Lors de la formation et de la vérification des données avec un réseau neuronal, il est nécessaire de mettre en forme les données dans le formulaire (groupe de données, étiquette). MNIST et CIFAR10 ont cette forme à l'avance, mais lorsque vous utilisez les données dont vous disposez, vous devez créer cette forme vous-même. Cependant, il a fallu un certain temps pour comprendre, donc je vais l'enregistrer ici.
De plus, il y avait des gens qui ont répondu en anglais sur la méthode de base, donc si vous parlez anglais, veuillez consulter la série d'échanges suivante. Convert Pandas dataframe to PyTorch tensor?
Cette Qiita complète le contexte et explique un peu plus en détail, veuillez donc ne lire que si nécessaire.
train_label = torch.tensor(train['target'].values)
Citation: Convertir la trame de données Pandas en tenseur PyTorch?
train_data = torch.tensor(X.drop('target', axis = 1).values)
Citation: Convertir la trame de données Pandas en tenseur PyTorch?
Cependant, cela peut entraîner l'erreur suivante:
Error
TypeError: can't convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, int64, int32, int16, int8, uint8, and bool.
Comme mentionné ci-dessus, si le type de np.ndarray est object, il ne peut pas être converti en torch.tensor. Un objet est un type de données qui est un mélange de plusieurs types de données. Par conséquent, les données doivent être converties en l'un des types de données correspondants du tenseur ci-dessus. Par exemple, unissons-le au type float32. Cela fonctionne bien si vous le réécrivez comme suit.
train_data = torch.tensor(X.drop('target', axis = 1).values.astype(np.float32))
Citation: Convertir la trame de données Pandas en tenseur PyTorch?
Utilisez ce type de données adapté à vos données. Pour plus de détails sur les types de données, voir Liste des types de données NumPy et conversion par type de données (cast).
Ou s'il existe un DataFrame (X_train) non étiqueté depuis le début, convertissez-le en np.array puis en tenseur.
train_data = torch.tensor(np.array(X_train.astype('f')))
from torch.utils import data
train_tensor = data.TensorDataset(train_data, train_label)
La classe torch.utils.data.TensorDataset prend les tenseurs comme argument et rassemble les données en indexant les tenseurs selon la première dimension. Donc, bien sûr, vous obtiendrez une erreur si vous ne disposez pas de suffisamment de données et d'étiquettes pour vous entraîner. Référence: tutoriel officiel pytorch
c'est tout.
Recommended Posts