设置为CPU还是GPU:
device = torch.device(“cuda” if (use_cuda and torch.cuda.is_available()) else “cpu”)
device = torch.device(“cpu”)
将一个array转换成tensor:
I0=torch.from_numpy(I00)
记录一个tensor的梯度:
alpha = alpha.to(device)
alpha.requires_grad = True
想要I0和 I1一致:
用: I1=I1.squeeze()
本来I2是[28,28], 现在转换成[1,1,28,28]:
I2 = I2[np.newaxis,np.newaxis,:,:]
torch.save()用法:保存模型参数
torch.save(model.state_dict(), f’transformer_best.pth’)
pretrained_model = “data/lenet_mnist_model.pth”
model.load_state_dict(torch.load(pretrained_model, map_location=‘cpu’))
加载模型:model.load_state_dict
启用 Batch Normalization 和 Dropout。
如果模型中有BN层(Batch Normalization)和 Dropout,需要在训练时添加model.train()。model.train()是保证BN层能够用到每一批数据的均值和方差。对于Dropout,model.train()是随机取一部分网络连接来训练更新参数。
训练完train样本后,生成的模型model要用来测试样本。在model(test)之前,需要加上model.eval(),否则的话,有输入数据,即使不训练,它也会改变权值。这是model中含有BN层和Dropout所带来的的性质。
detach()生成的是无梯度的纯tensor。
https://zhuanlan.zhihu.com/p/410199046
加了 .item() 在精度上的区别:
一个元素张量可以用x.item()得到元素值,我理解的就是一个是张量,一个是元素。