RuntimeError: “nll_loss_forward_reduce_cuda_kernel_2d_index“ not implemented for ‘Float‘

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

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)

好像就好使了 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值