Tensorboard 1.13.1無法運行,報錯OSError: [Errno 22] Invalid argument ; (dt - datetime.datetime ...

問題現象

我的版本是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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章