我真服了,明明这么简单的东西,居然卡了我一个晚上,哭死
1.模型保存与加载推理的问题
代码如下,很简单,直接用既保持模型,又保存checkpoints的就好了,虽然不推荐,但是简单啊!
torch.save(SncNet, 'final.pth')
model = torch.load("best.pth")
2.关于nn.Flatten()与torch.flatten()(懒得写了,如下图所示)
由于我的模型是全部由全连接层构成,输入数据是4*3,因此网络第一层必然是nn.Flatten(),但是nn.Flatten()出现在网络的定义中,因此它是对于第一维度的拉伸,反之,torch.flatten()是对于第零维度的拉伸。因此要想输入一个4*3的数据去已保存的模型中,首先第一步是需要把他reshape成1*4*3的格式,或者在网络输入输入的时候直接将数据输入成1*12的格式。
3.在做预测模型的时候,出现了预测出全是0和1的情况,很显然是因为经过了sigmoid之后,梯度爆炸,导致最后两极分化,如下图所示,这是我经过断点之后,查看sigmoid之前的数据,发现产生了梯度爆炸(谢谢我的彬神,告诉我该怎么debug呜呜呜),但是再训练的时候看输出明明好好的,所以问题肯定出在了数据导入,紧接着就发现,我忘记对数据做归一化,导致梯度爆炸!!!
4.在导入模型的时候,他直接给我再训练了一次,这是因为我直接import了我神经网络的代码,而我却在main里面进行训练,所以在import之后计算机自动给我运行了main,所以就又训练了一次。。。我麻了。。。解决办法就是,要么def train,要么就只复制网络结构。