最近在调试tensorflow,环境是win10,IDE pycharm tensorflow 2.5 python3.6
在使用tensorflow训练的模型时 ,模型能够训练出来,在保存未checkpoint时却不能被以.ckpt的形式保存,出现了很多问题,在经过几天的查询后,最终也得到了解决。这里感慨一下学习途中真的坎坷和艰难,顺便记录一下,希望帮助到有需要的同学。
保存checkpoint调用的主要代码如下
checkpoint_file = os.path.join(TRAIN_DIR, 'checkpoint_regression')
saver = tf.train.Saver()
saver.save(sess, checkpoint_file, global_step=step)
问题一 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 164
问题报错如下
Traceback (most recent call last):
File "D:/tensorflow/class4/class4/MNIST_FC/p16_mnist_train_ex3.py", line 29, in <module>
callbacks=[cp_callback])
File "D:\Python37\lib\site-packages\keras\utils\traceback_utils.py", line 67, in error_handler
raise e.with_traceback(filtered_tb) from None
File "D:\Python37\lib\site-packages\tensorflow\python\eager\execute.py", line 55, in quick_execute
inputs, attrs, num_outputs)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 137: invalid start byte
对于这个问题,网上有很多解释,大部分都都集中在checkpoint文件保存路径讨论上,参考这些方法后改进,一直没解决。
终于解决了问题,有以上烦劳的同学们也可以参考一下这个博客,博主写的已经很详细了,我就不赘述了。
在解决第一个问题后,第二个问题就马上出现了
问题二 tensorflow.python.framework.errors_impl.UnknownError: Failed to rename
报错如下
File "C:\Users\<redacted>\Miniconda3\envs\<redacted>\lib\site-packages\tensorflow\python\lib\io\file_io.py", line 532, in atomic_write_string_to_file
rename(temp_pathname, filename, overwrite)
File "C:\Users\<redacted>\Miniconda3\envs\<redacted>\lib\site-packages\tensorflow\python\lib\io\file_io.py", line 491, in rename
rename_v2(oldname, newname, overwrite)
File "C:\Users\<redacted>\Miniconda3\envs\<redacted>\lib\site-packages\tensorflow\python\lib\io\file_io.py", line 508, in rename_v2
compat.as_bytes(src), compat.as_bytes(dst), overwrite)
tensorflow.python.framework.errors_impl.UnknownError: Failed to rename: tests\files\checkpoints\0000_00_00_00_00_00\checkpoint.tmpc6ee5d6bc5a445c884bba8c3acadf01f to: tests\files\checkpoints\0000_00_00_00_00_00\checkpoint : Access is denied.
; Input/output error
关于这个报错,网上也有很多讨论和方法
比如来自StackOverflow的问题:tensorflow.python.framework.errors_impl.UnknownError:无法重命名:输入/输出错误 - 问答 - 腾讯云开发者社区-腾讯云
大部分都讨论还是集中在文件路径上,但都不能解决问题。直到看到github,终于找到了答案。
具体如下:点击traceback中的最后一项
File "C:\Users\<redacted>\Miniconda3\envs\<redacted>\lib\site-packages\tensorflow\python\lib\io\file_io.py",
打开file_io.py,将其中的代码改成下述所示代码即可
def atomic_write_string_to_file(filename, contents, overwrite=True): if not has_atomic_move(filename): write_string_to_file(filename, contents) else: temp_pathname = filename + ".tmp" + uuid.uuid4().hex write_string_to_file(temp_pathname, contents) try: if overwrite and os.path.exists(filename): os.remove(filename) rename(temp_pathname, filename, overwrite) except errors.OpError: delete_file(temp_pathname) raise
测试效果良好,目前成果解决了问题。
总结:这些问题大部分都跟代码无关,都是在windows下一些环境配置问题,解决起来却要花太多时间。所以,如果可以,还是建议使用linux,少很非必要的麻烦。