запись ошибки pytorch: преобразование типа | преобразование типа данных numpy

глубокое обучение PyTorch

Участвуйте в 14-м дне Ноябрьского испытания обновлений, узнайте подробности события:Вызов последнего обновления 2021 г.

проблема появляется

Глядя на код сегодня, вы видите фрагмент кода, который инициализируется случайным образом.np.random.normal, это выглядит более проблематично при просмотре данных, поэтому я изменил его наnp.arange. Потом начинает выдавать ошибки.


Давайте сначала посмотрим на исходный код:

features = np.random.normal(size=(4, 1))
np.random.shuffle(features)
poly_features = np.power(features, np.arange(5).reshape(1, -1))
for i in range(5):
    poly_features[:, i] /= math.gamma(i + 1) 
  • Функция случайной инициализации дисплея, двухмерная, форма 4*1
  • перемешать в случайном порядке
  • poly_feature предназначен для хранения функций от 0-й степени до 4-й степени
  • Затем разделите каждый элемент poly_feature на его факториал,gamma(n)Это факториал n-1 или (n-1)!

Потом я начал менять код.

features = np.arange(4).reshape(-1,1)
poly_features = np.power(features, np.arange(5).reshape(1, -1))

for i in range(5):
    poly_features[:, i] /= math.gamma(i + 1)  
  • во-первыхarangeнеобходимо добавить после.reshape(-1,1), преобразуется в размерность x*1, x автоматически корректируется в соответствии с количеством элементов.
    • Если он объединен, он сообщит об ошибке, что механизм широковещательной рассылки не может быть использован.

    operands could not be broadcast together with shapes (4,) (1,5)

    • Поскольку по умолчанию используются одномерные 4 элемента, а не двумерные 4*1, механизм трансляции использовать нельзя.
  • Так как код проверяется просмотром данных, я случайным образом перемешиваю элементыnp.random.shuffle(features)Это предложение было удалено.
  • с последующимfor i in range():Этот цикл выдаст ошибку
    • Причина в том, что типы данных не совпадают, массив, сгенерированный аранжировкой, не является числом с плавающей запятой, для которого требуется число с плавающей запятой..

    TypeError: ufunc 'true_divide' output (typecode 'd') could not be coerced to provided output parameter (typecode 'i') according to the casting rule ''same_kind''

    Кажется, что требуется double, но генерируется int.

преобразование типа данных numpy

Как преобразовать его в float.

  1. poly_features = poly_features.astype(np.float32)

    Добавьте приведенное выше предложение после polyfeatures.

  2. Или, чтобы избежать проблем, вы можете напрямую использовать умножение чисел для принудительного преобразования типа,

    • Напримерpoly_features = np.power(features, np.arange(5).reshape(1, -1))*1.0
    • ноне можетизменить обратноpoly_features[:, i] = poly_features[:, i]*1.0/math.gamma(i + 1), последующие изменения не вступят в силу. Хотя об ошибке не сообщается, данные результата по-прежнему имеют тип int.
  3. Определить тип данных непосредственно во время объявленияfeatures = np.arange(4, dtype = np.float32).reshape(-1,1)