問題現象
我的版本是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