背景:深度学习训练时,我自己提取了输入跟输入进行训练,把一些字符串类别映射成了数字,

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)

好像就好使了 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐