微调

个人做法是用hotdog_w代替finetune_net.fc的第一行权重

for _ in range(0):
    with torch.no_grad():
        finetune_net.fc.weight[0] = hotdog_w.reshape(-1)

训练结果:loss 0.135, train acc 0.945, test acc 0.948
729.7 examples/sec on [device(type=‘cuda’, index=0)]
原始finetune结果:loss 0.170, train acc 0.940, test acc 0.929
614.3 examples/sec on [device(type=‘cuda’, index=0)]

请问为什么我训练时会不使用GPU而是用的CPU啊

1.使用4e-4的学习率,速度变快了(176.2->190.3 examples/sec),准确度提升了(train acc 0.933->0.951)
2.更改了超参数:weight decay(0.001->0.01)
速度提升明显,泛化能力提升了,但是在训练集上的精确度下降了。
我觉得这样子是合理的,提升L2重要性,即降低了过拟合可能性,即提升了泛化能力
3.我尝试了给出的代码,但是报错element 0 of tensors does not require grad and does not have a grad_fn,这是说在d2l.train_batch_ch13中,反向传播时候遇到了没有梯度的张量
我猜想需要自己构建训练函数
4.单独切割出来热狗参数,em,我不会

  1. 检查将模型移动到gpu的代码是否在,没有的话显式地进行移动:
device = torch.device("cuda:0" is torch.cuda.is_available() else "cpu")
model.to(device)
  1. 如果已经如上面显式地进行了移动,还在cpu上的话。检查你的torch是否安装了支持gpu版本的,安装是否正确,命令行输入以下指令测试,返回True的话就已经正确安装:
torch.cuda.is_available()