标签:STATUS ALLOC tensor tuple labels device 报错 images
问题如下:
1、利用pytorch复现googlenet网络
2、定义训练过程函数中
def train(epoch):
running_loss = 0 # 损失值归零
for batch_idx, data in enumerate(train_loader, start=0):
images, labels = data #将输入x和相应的标签y从数据中拿出来
# 将输入和目标y都放到GPU上面
images, labels = images.to(device), labels.to(device)
...
labels.to(device)
报错“AttributeError: 'tuple' object has no attribute 'to'”,发现是因为Python中的元组类(tuple)没有调用to
的方法。
3、解决
(1)执行labels = torch.tensor(labels).to(device)
试图将tuple转为tensor,但是报错:"ValueError: too many dimensions 'str'";
(2)这是因为“张量表示由数值
组成的多维数组”,故字符串str无法直接转为tensor
4、将tuple字符串元素数值化
(1)方法一:调用sklearn的preprocessing(成功运行)
from sklearn import preprocessing
le = preprocessing.LabelEncoder() #获取一个LabelEncoder
labels = le.fit_transform(labels) #训练LabelEncoder
labels = torch.as_tensor(labels)
成功运行
(2)方法二:直接将tuple元素强转为int型(运行报错)
images, labels = data #将输入x和相应的标签y从数据中拿出来
print(labels)
输出:('177', '166', '100', '136')
由于labels实际上是数字,所以思考能否直接将元素转为int型?
labels = [int(i) for i in labels]
labels = torch.as_tensor(labels)
经过此操作成功将labels转为了tensor,但是运行之后报错:
RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)`
Q:请问方法二为什么会报错呢?
标签:STATUS,ALLOC,tensor,tuple,labels,device,报错,images 来源: https://www.cnblogs.com/lijiuliang/p/15165710.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。