背景:深度学习训练时,我自己提取了输入跟输入进行训练,把一些字符串类别映射成了数字,
y = []
dict_y={}
index=1
for item in train_data.iloc[:,-1].values:
if dict_y.get(item) is None:
dict_y[item]=index
index=index+1
y=torch.Tensor(np.array(y))
然后损失函数用的是交叉熵:
loss=nn.CrossEntropyLoss()
训练时:
for epoch in range(num_epoch):#densenet太花费显存了,我的8GGPU禁不住
epoch_loss=0
epoch_acc=0
for X,y in dataloader:
X=X.to(torch.device('cuda:0'))
y=y.to(torch.device('cuda:0'))
optimizer.zero_grad()
y_hat=net(X)
l=loss(y_hat,y)
l.backward()
optimizer.step()
epoch_loss+=l.item()#可以将l从计算图中剥离出来吧
epoch_acc+=torch.eq(y_hat,y).sum().item()
但是出了题目所示的错,查看资料才知道 交叉熵loss函数接受两个参数,第一个是float,第二个是long!!!所以我改了下
y=torch.tensor(np.array(y),dtype=torch.long)
好像就好使了