pytorch使用half(),也就是f16来训练可以减少内存开销
使用中碰到的问题有:
1.f16如何转换最省事儿:
2.f16转换之后会出现梯度NAN的问题
解决
问题一:
直接在模型下面使用
ae = AutoEncoder1(dimenstions,activation=nn.ReLU()).to(device)
ae.half()
就可以了
问题二:
使用了Adam优化器
这里需要调整Adam esp
参考 https://blog.csdn.net/gwb281386172/article/details/104705195
同时如果不能解决加入梯度裁剪
loss = loss_fn(pred,x1)
loss.backward()
torch.nn.utils.clip_grad_norm_(parameters=model.parameters(), max_norm=10, norm_type=2)
optimizer.step()
随机数据集的划分
train_data = torch.from_numpy(my_arr_n2)#my_arr_n2是一个numpy数组
train_set, test_set = torch.utils.data.random_split(train_data, [0.8, 0.2])
train_loader = torch.utils.data.DataLoader(train_set, batch_size=batch_size, shuffle=True)
test_laoder = torch.utils.data.DataLoader(test_set, batch_size=batch_size, shuffle=False)
如果需要直接使用test数据集,可以直接 train_data[test_set.ind***],忘了ind啥了,可以使用dir(test_set)查看一下