我在训练模型时不但存储训练结束时模型和优化器的参数,而且随时存储验证集loss最低的模型的参数。存储模型参数没问题,而存储优化器参数时对这一句〔fluid.save_dygraph(opt.state_dict(), '.yolo_')〕代码报这个错误〔AssertionError: state_dict is empty, no need to save〕。这是为了节省空间而禁止重复存储优化器参数么?而且由于无法存储最优loss的模型参数时同时存储当时的优化器参数,所以我在读取最优模型的参数用于继续训练时读取的是上次训练完成时存储的优化器参数,而且训练程序能够运行。并且即使我换了优化方式(比如从Momentum换为SDGOptimizer)再继续训练都可以。这样正常么?如果可以随便换优化器,学习率和正则化项,那么存储优化器参数还有什么意义?请教大佬。
收藏
点赞
0
个赞
请登录后评论
TOP
切换版块
那个是课程里的项目,我只能编辑,无法公开。后来我把课程项目复制到自己的项目,整理代码时发现我在尝试多次存储优化器的参数没成功后只是把重复存储优化器的那行代码给注释了,而在继续训练时读取的代码却没有删除读取优化器的部分。所以再次存储时造成的那个框架报错。那时,优化器的参数确实是空的。后来运行框架再也不保错了。谢谢。项目我也公开了,里面我加了一些数据增广的代码和大家交流。https://aistudio.baidu.com/aistudio/projectDetail/271017
你先把你的项目公开一下吧,然后我给你debug看看
https://aistudio.baidu.com/aistudio/projectdetail/251082
https://aistudio.baidu.com/aistudio/education/group/info/888
这个是课程里的项目
你这个地址我进不去,你把你项目启动删除项目页面的地址发我
https://aistudio.baidu.com/bdvgpu/user/76563/251082/notebooks/251082.ipynb?redirects=1
我现在除了训练结束时一同存储优化器参数,其他都只是存储模型参数。
他报的state_dic没内容,会不会是参数还未初始化你就把他存到字典里导致shape是0?
能把你的URL发一下吗
我这里把模型参数和优化器参数手工存在了硬盘文件上了,以便继续训练时读取。
fluid中,模型变量有临时和长期之分,应该不会存在节省空间问题