写于1.4日中午 在学校
我以后再也再也不拖延了。
一、遇到Out of memory的问题
解决办法:
1、把图片Resize一下。
2、把batch size改小一点。
先尝试解决办法2:
我先尝试第二种办法:batch size 原来是25,我把batch size改成2试试看。
果然可以顺利跑起来了!好开心啊~
我还是不希望resize图片,那么久吧
关于batch size和训练结果的关系,查看这一个网页:
https://www.zhihu.com/question/32673260
判断学习率设置是否良好:
其次,准确率
二、Pytorch如何保存训练好的模型
参考网址:https://blog.csdn.net/VictoriaW/article/details/72840878
我发现在代码的训练部分,有这样一段保存训练结果的代码:
这个函数的具体定义在代码下的save_checkpoint.py代码内。
意思是把state of a net保存在checkpoint文件夹下的weights0.pth文件中。
我现在需要用的是第一种方法。
目前我已经在checkpoints文件夹下的checkpoints文件夹下保存了weights0.pth
我现在需要导入.pth文件夹。
(其实这个不需要服务器,这个在自己家里的电脑上都能跑出来。)
在test的代码里,有这样一段代码:
torch.load后面这两个参数分别表示什么意思呢?
所以我想到的解决办法是:把“weights0.pth”文件放到和result一样的文件夹下面,然后把load_weights的默认值改成“weights0.pth”,再跑。
我现在已经对原来的程序作出的改动有:
1、main里面的batchsize被我改成了从25到2
2、所有的png都被我改成了tif
3、result_visualization.py里的load_weights的默认值被我改成了“weights0.pth”
4、result_visualization.py里的测试集的位置被我改变了。
三、跑test的代码
我把weights移动到对应的文件夹了。
遇到的问题1:
代码里“import matplotlib.pyplot as plt”这一句话报错。
解决办法1:
参考网站:https://stackoverflow.com/questions/49013901/importerror-cannot-import-name-path-matplotlib
就是卸载再重装
卸载重装后重启试试看。
成功解决,所以不需要看办法二了。
解决办法2:
https://blog.csdn.net/Nebula_W/article/details/79541287
这个办法可能更靠谱一点:
原因:Package中path.py的版本过高造成的。
解决方法:更改path.py的版本在7.6.1左右即可。
遇到的问题2:
代码里“import pandas as pd”这一句话报错。
参考网站:
https://stackoverflow.com/questions/30761152/how-to-solve-import-error-for-pandas
解决办法:
卸载,重装,再重启Spyder
解决!
遇到问题3:
我暂时注释掉了这两句:
遇到问题4:
类似统一原图和groundtruth图的名字的问题
用rename改一下名字就好了。
祈祷再不要报错了。
好像在跑了。
真的没有报错了。
报错是没有足够内存!
所以程序应该是对的了。
遇到问题5:
train的程序跑到第29个epoch的61%的时候忽然跑不动了。
那我就先不跑啦,先去用服务器跑test的程序。
遇到问题6:无法导入Pytorch
快速退出python模式的方法:Ctrl+z
我试过了,如果直接输入python,再输入import torch,还是不行。
解决办法1:重装Pytorch
上面显示你已经装过了pytorch
解决办法2:卸载再重装Pytorch
卸载的时候上面写:
然后我直接输入了pip install torch,居然开始安装了,之后就导入成功了。
遇到问题7:
还是CUDA OUT of memery的问题
问了学姐,学姐说解决办法是:一个图一个图地放进去跑,不要很多图一起放进去跑。
我放了一个图进去,立刻就跑好了。
遇到问题8:
跑是跑好了,但是图去哪里了呢?
我把default那里的./改成了prediction,希望能创建这么一个文件夹。
但是还是跑完了没有图。真的很奇怪。我去查源代码吧。
图就在visualization文件夹下面呀!稍微等一下就出来了。等大概1分钟。
我是在WinSCP里面看的。
四、回顾Train的代码
遇到的问题是:loss的值是负的。
我用的计算loss的方法是Dice Loss function.。
我需要先去查这个function。
Dice coefficient是常见的评价分割效果的方法之一,同样的也可以作为损失函数衡量分割的结果和标签之间的差距。
在这个class中,dice_coef函数的return是loss的结果
这里有一个相关的函数定义的式子:
https://blog.csdn.net/a362682954/article/details/81226427