TensorFlow2を触ってみる posted at 3月 21, 2020 しょっぱなから補完が効かないとかハマったわけですが、TensorFlowを触り始めました。 過去に使っていたことがあるのですが、1.0より前のころだったので、kerasとかeagerとか戸惑いまくりです。 そんなわけで、しばらくは昔の記憶でTensorFlowを触って試行錯誤したり、VSCodeの設定をいじったり、といったメモ書きが続くと思います。 コメント
TensorFlow2:TensorBoardのグラフがうまく表示されず困った件(余談) posted at 4月 09, 2020 前回の記事 のおまけ。 余談と言いつつ、重要そうなことも入っている気がする。 余談:モデルがmain graphに表示されない件 TensorBoardでは、グラフが複雑になるのを避けるため、入出力が多いノード(原文では"high-degree nodes")は、 Auxiliary Nodes 側に配置される。 "入出力が多いノードは、だいたい保存とかそんな感じのノードなので、外しても問題ないっしょ。メイングラフには〇も置いとくし"(超意訳)らしい。モデルなんだがなぁ…。 Reference: TensorBoard: Graph Visualization グラフを見ていると、レイヤ内の各weightの定義が、ただのVariableではなく、ReadVariableOpになっていることが原因のようだ。 しかしweightの定義はkeras内でやっているので、手が出せない。 調べてみると、issueが上がっていたが解決していない(放置されている?)。 [TF 2.0] Inconvenient graph visualization #29215 この件は、今のところ手動でmain graphに移動させることで回避。 余談:test側のグラフ出力がエラーになる 前回の変更2では @tf.function を付与する関数をtrainのみにして対処したが、testのみにした場合はうまく動かない。 この場合、最初と同じで Graph visualization failed. Error: Malformed GraphDef. が表示されてしまう。 TensorBoardのコンソールには以下のエラーが表示される。 ValueError: Cannot combine GraphDefs because nodes share a name but contents are different: images よく見てみると、今度は入力である images がエラーの原因となっている。 いやいやテスト中はループでぐるぐる回してるだけで、処理は変わってないし! とりあえず本筋でないから放置するか。。。 と思ってぼーっとコード見ていたら、なんとなくバッチが気になってきた。 結果、データ読み込みの部分を... 続きを読む
TensorFlow2.1+VSCodeで補完が効かない件 posted at 3月 15, 2020 関数入力中のポップアップでドキュメントが表示されたりする機能も効かない。 暗記するほど使い込んでないのでAPIリファレンスを都度見に行くのも大変だし、困った。 とりあえず解決できたのでメモ。 調べた内容 調べたところ、以下のような回避が出ているが、あまり環境をいじりたくない。 https://qiita.com/artemis5656/items/e8e464510a7d907e1feb もう少し調べたところ、tensorflowのissueは2月末にfixedになっていた。 https://github.com/tensorflow/tensorflow/issues/32982 VSCode側のissueも、TensorFlow側で修正済みになっている。 https://github.com/microsoft/python-language-server/issues/818 3/11に、TensorFlow2.2のrc0が出たので試してみる。 無事動きました。(windows10+VSCode1.43.0+Python3.7+TensorFlow2.2.0rc0) まとめ 本件はTensorFlow側のbugで、TensorFlow2.2で修正される予定。 rc0でも修正されているので、issueに注意して使うのもあり。 正式版までひと月くらいかかるかもなので、breaking-changesに注意しながらrc0で書いて2.1に持ってくのもありか。 rc版はpre-release扱いなので、インストールするときは以下のようにバージョンを指定する必要がある。 –upgrade オプションは適当に。 pip install tensorflow==2.2.0rc0 よかった。 続きを読む
TensorFlow2:ログディレクトリ指定時のみSummaryを保存する posted at 4月 01, 2020 ちょっと動かすときはログを保存せず、学習時はログを保存する、みたいな切替をやりたくなる。 けど、summary記録箇所全部にif文入れるのはなぁというときの対処。 なにもしないnoop_writerが使える。 サンプルコード def run ( epochs , logdir = None ) : writer = tf . summary . create_noop_writer ( ) if logdir : writer = tf . summary . create_file_writer ( logdir ) for epoch in range ( epochs ) : loss = step_train ( ) with writer . as_default ( ) : # do nothing if writer is noop_writer. tf . summary . scalar ( "train_loss" , loss , epoch ) writer . close ( ) ちょっと記述が減って素敵。 続きを読む
コメント
コメントを投稿