问题现象
我的版本是13.1,运行Tensorboard 命令的时候直接报错,无法运行。从网上查了很多大部分的提示错误,跟我的不一样,我猜测是版本不同的原因,但是根据他们的原理来进行了一下构思,解决了问题。其中问题出现的情况如下:
File "c:\users\ict_sjf\anaconda3\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "c:\users\ict_sjf\anaconda3\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Users\ICT_SJF\Anaconda3\Scripts\tensorboard.exe\__main__.py", line 9, in <module>
File "c:\users\ict_sjf\anaconda3\lib\site-packages\tensorboard\main.py", line 57, in run_main
app.run(tensorboard.main, flags_parser=tensorboard.configure)
File "c:\users\ict_sjf\anaconda3\lib\site-packages\absl\app.py", line 300, in run
_run_main(main, args)
File "c:\users\ict_sjf\anaconda3\lib\site-packages\absl\app.py", line 251, in _run_main
sys.exit(main(argv))
File "c:\users\ict_sjf\anaconda3\lib\site-packages\tensorboard\program.py", line 228, in main
self._register_info(server)
File "c:\users\ict_sjf\anaconda3\lib\site-packages\tensorboard\program.py", line 274, in _register_info
manager.write_info_file(info)
File "c:\users\ict_sjf\anaconda3\lib\site-packages\tensorboard\manager.py", line 270, in write_info_file
payload = "%s\n" % _info_to_string(tensorboard_info)
File "c:\users\ict_sjf\anaconda3\lib\site-packages\tensorboard\manager.py", line 130, in _info_to_string
for k in _TENSORBOARD_INFO_FIELDS
File "c:\users\ict_sjf\anaconda3\lib\site-packages\tensorboard\manager.py", line 130, in <dictcomp>
for k in _TENSORBOARD_INFO_FIELDS
File "c:\users\ict_sjf\anaconda3\lib\site-packages\tensorboard\manager.py", line 51, in <lambda>
(dt - datetime.datetime.fromtimestamp(0)).total_seconds()),
OSError: [Errno 22] Invalid argument
主要问题点在于:
(dt - datetime.datetime.fromtimestamp(0)).total_seconds()),
在这里出现了错误,导致无法运行。
解决方法
根据提示的路径信息,找到manager.py这个文件,找到里面报错的那一行
(dt - datetime.datetime.fromtimestamp(0)).total_seconds()),
将其改为:
(dt - datetime.datetime.fromtimestamp(90000)).total_seconds()),
尝试运行一下,试试看。
问题解析
- 这个问题挺奇葩的,也能搜到类似的问题,位置应该都在这里,他们的错误也是一样的。很多人会说是这个
serialize=lambda dt: int(dt.strftime("%s"))
,改了里面的小s为大S就可以了。但是我去我的那个文件里面找了,根本没有没有这条命令啊!!! 可能对于某些版本可行,但是对于我这个版本,并没有。 - 于是只能针对这个代码去查了,
datetime.datetime.fromtimestamp()
这个的功能其实挺简单的,就是将UNIX时间戳改成标准时间,于是我去stackoverflow上面查了一下,自己又试验了一下, **结果发现输入为0的时候,也就是datetime.datetime.fromtimestamp(0)
会直接报错,我记得理论上应该是1970年1月1日0点吧,这个错误很是奇怪。 - 所以我尝试了让他转换一个大于0的时间,发现低于90000,也就是1970年1月1日9点之前的任何时间都会报错(这个好奇葩啊,难道是因为win10?)。所以我就把那个时间点输入改成90000,结果就运行起来了。
- 运行是可以了,时间就不知道准不准了,哈哈!那个不是我关心的重点。。。
另外
在windows下面后面的--logdir “C:\”
是需要使用双引号的。留给自己提个醒。
参考
https://stackoverflow.com/questions/49224621/python-datetime-datetime-fromtimestamp-bug
https://blog.csdn.net/qq_18644873/article/details/88091336
https://blog.csdn.net/u013244846/article/details/88380860