Не могу преобразовать np.ndarray типа numpy.bool_ - PullRequest
1 голос
/ 19 мая 2019

Мне интересно, почему я получаю эту ошибку, когда я использовал:

Y_train_class = torch.tensor(Y_train_class.values)

Ошибка типа: не удалось преобразовать np.ndarray типа numpy.bool_.Поддерживаются только следующие типы: double, float, float16, int64, int32 и uint8.

Я пытался преобразовать свои данные в float, но, похоже, не удалось

X_train = pd.read_csv('c:/Data/x_train_set_yu.csv', header= None)
Y_train = pd.read_csv('c:/Data/y_train_set_yu.1.csv', header= None)

Y_train_class = (Y_train >= 550)
print (Y_train_class)
X_test = pd.read_csv('c:/Data/X_test.csv',header= None)

X_train = torch.tensor(X_train.values)

Y_train.astype(np.float32)
Y_train_class.astype(np.float32)

Y_train_class = torch.tensor(Y_train_class.values)

TypeError: невозможно преобразовать np.ndarray типа numpy.bool_.Поддерживаются только следующие типы: double, float, float16, int64, int32 и uint8.

1 Ответ

0 голосов
/ 19 мая 2019

Обычно вы придерживаетесь правильного подхода, за исключением того, что numpy astype не на месте Так что вместо

Y_train_class.astype(np.float32)

вам нужно иметь

Y_train_class = Y_train_class.astype(np.float32)

(в настоящее время ваш исходный Y_train_class.astype(np.float32) не может быть эффективно выполнен).

Если ваша цель состоит в том, чтобы тренироваться с такими функциями потерь, как nn.BinaryCrossEntropy, ваш подход к бросанию на плаву правильный, так как они ожидают, что классы 0/1 будут float32 в любом случае. В общем случае PyTorch использует uint8 тензоры вместо булевых тензоров, поэтому для получения функционального эквивалента вашего оригинального тензорного тензора вы должны использовать torch.from_numpy(Y_train_class.astype(np.uint8)) - тогда он правильно поддерживает операции маскирования, как в numpy, пример ниже

import torch
import numpy as np

test_vals = np.array([1, 3, 3])
array = np.array([True, True, False], dtype=np.bool)
print(test_vals[array])

test_vals = torch.from_numpy(test_vals)
tensor = torch.from_numpy(array.astype(np.uint8))
print(test_vals[tensor])

Наконец, насколько мне известно, в будущих версиях PyTorch появятся булевы тензоры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...