Machine learning 属性错误:';元组';没有属性';至';

Machine learning 属性错误:';元组';没有属性';至';,machine-learning,deep-learning,pytorch,kaggle,Machine Learning,Deep Learning,Pytorch,Kaggle,我正在写这个图像分类器,我已经定义了加载程序,但是我犯了这个错误,对此我没有任何线索 我已经定义了火车装载机,为了更好的解释,我尝试了这个 for ina,lab in train_loader: print(type(ina)) print(type(lab)) 我得到了 <class 'torch.Tensor'> <class 'tuple'> 我得到了一个错误: Epoch 1/15 -----------------------------

我正在写这个图像分类器,我已经定义了加载程序,但是我犯了这个错误,对此我没有任何线索

我已经定义了火车装载机,为了更好的解释,我尝试了这个

for ina,lab in train_loader:
    print(type(ina))
    print(type(lab)) 
我得到了

<class 'torch.Tensor'>
<class 'tuple'>
我得到了一个错误:

Epoch 1/15
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-36-fea243b3636a> in <module>
----> 1 train_model(model=arch, optimizer=optim, n_epochs=15, criterion=criterion)

<ipython-input-34-b53149a4bac0> in train_model(model, optimizer, n_epochs, criterion)
     12         for inputs,labels in train_loader:
     13             inputs = inputs.to(device)
---> 14             labels  = labels.to(device)
     15             optimizer.zero_grad()
     16             output = model(inputs)

AttributeError: 'tuple' object has no attribute 'to'
纪元1/15
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在里面
---->1列车模型(模型=arch,优化器=optim,n\u历次=15,标准=标准)
列车内模型(模型、优化器、n个时期、标准)
12对于输入,列车装载机中的标签:
13输入=输入到(设备)
--->14标签=标签到(设备)
15优化器0_grad()
16输出=模型(输入)
AttributeError:“tuple”对象没有“to”属性
如果你还需要什么,请告诉我! 谢谢

编辑:标签如下所示。 这是蜜蜂和黄蜂之间的图像分类。它还包含昆虫和非昆虫

(‘黄蜂’、‘黄蜂’、‘昆虫’、‘昆虫’、‘黄蜂’、‘黄蜂’、‘蜜蜂’、‘昆虫’、‘其他’、‘蜜蜂’、‘蜜蜂’、‘蜜蜂’、‘黄蜂’、‘蜜蜂’、‘蜜蜂’、‘黄蜂’、‘其他’、‘蜜蜂’、‘蜜蜂’、‘蜜蜂’)
(‘黄蜂’、‘黄蜂’、‘昆虫’、‘蜜蜂’、‘其他’、‘黄蜂’、‘昆虫’、‘黄蜂’、‘昆虫’、‘黄蜂’、‘黄蜂’、‘昆虫’、‘蜜蜂’、‘昆虫’、‘其他’、‘黄蜂’、‘蜜蜂’、‘蜜蜂’、‘昆虫’、‘其他’)

它的字面意思是Python中的tuple类没有名为
to
的方法。由于您正试图将标签放到设备上,只需执行
labels=torch.tensor(标签).to(设备)

如果您不想这样做,可以通过使数据加载器以PyTorch张量而不是元组的形式返回标签来更改数据加载器的工作方式

编辑 由于标签似乎是字符串,我将首先将它们转换为一个热编码向量:

>>> import torch
>>> labels_unique = set(labels)
>>> keys = {key: value for key, value in zip(labels_unique, range(len(labels_unique)))}
>>> labels_onehot = torch.zeros(size=(len(labels), len(keys)))
>>> for idx, label in enumerate(labels_onehot):
...     labels_onehot[idx][keys[label]] = 1
...
>>> labels_onehot = labels.to(device)

我在这里有点不清楚,因为我不知道细节,但是字符串不能与张量一起工作。

您好,当我将标签更改为张量时,我收到了错误消息ValueError:太多维度'str'标签在您使用的数据中是什么样子的?我已经编辑了问题并提供了数据。输入还包含张量格式的文件values@Stark_Tony没有
str
string类型的张量。不能把它转换成张量串。是的,这是一个愚蠢的大错误。我试过标签编码器,它成功了。非常感谢!
>>> import torch
>>> labels_unique = set(labels)
>>> keys = {key: value for key, value in zip(labels_unique, range(len(labels_unique)))}
>>> labels_onehot = torch.zeros(size=(len(labels), len(keys)))
>>> for idx, label in enumerate(labels_onehot):
...     labels_onehot[idx][keys[label]] = 1
...
>>> labels_onehot = labels.to(device)