TensorFlow2を触ってみる posted at 3月 21, 2020 しょっぱなから補完が効かないとかハマったわけですが、TensorFlowを触り始めました。 過去に使っていたことがあるのですが、1.0より前のころだったので、kerasとかeagerとか戸惑いまくりです。 そんなわけで、しばらくは昔の記憶でTensorFlowを触って試行錯誤したり、VSCodeの設定をいじったり、といったメモ書きが続くと思います。 コメント
TensorFlow2:TensorBoardのグラフがうまく表示されず困った件 posted at 4月 08, 2020 前回は、kerasのsummaryなどでグラフの可視化をしましたが、今回はTensorboardのグラフを使ってみます。 使用するモデルは、 TensorFlow2:MNISTやってみる(keras model class) で作成したものです。 1.xのときと違って、Summaryを保存するだけではグラフは出力されないようです。 ということで、変更を加えて出力してみたけど、うまく動かなかったり、いまいちきれいに出なかったという話。 Reference: Examining the TensorFlow Graph グラフ出力のための変更 紆余曲折が長いので、まずは最終的な形を記載します。 今回はsubclassedなモデルで、 model.fit() は使用していないので、 Graphs of tf.functions セクションで記載のある方法を試す。 計算開始時に tf.summary.trace_on(graph=True) を呼び、終了時に tf.summary.trace_export() を呼ぶ。 注意点としては、 trace_export() は、 writer.as_default() のブロック内で呼び出す必要がある。 必然的に、SummaryWriterのインスタンスが必要になる(Writerが書き出すファイル内にグラフが入るので、当たり前かもしれないが一応)。 以下の「# !!! ADD」コメント部分が追加した箇所。 def training(model, optimizer, epochs, ds_train, ds_test, logdir=None): # ...skip writer = tf.summary.create_noop_writer() if logdir: logdir.mkdir(parents=True, exist_ok=True) writer = tf.summary.create_file_writer(str(logdir)) global_step = 1 tf.summary.trace_on(graph=True) # !!! ADD for epoch in range(1, epochs... 続きを読む
TensorFlow2:MNISTやってみる(keras model class) posted at 3月 31, 2020 TensorFlowのチュートリアルにそって、MNIST問題をやってみる。 TensorFlow 2 quickstart for experts 上記のコードをベースに、関数作ったりしながらソースを作成した。 1.xの時との違いとかをメモしながら記載する。といいつつ、1.xの時に近い書き方を選んでいると思う。 ざっくり処理フロー 以下のような流れになる。流れは1.xの時と変わらない。 MNISTデータ読み出し処理の定義 モデルの定義 学習の定義 テストの定義 学習ループの実行 コード 事前に タイピングを減らすために、パッケージ名にエイリアスを付けておく。 import tensorflow as tf # asign aliases tfk = tf . keras tfkl = tf . keras . layers MNISTデータ読み出し処理の定義 def load_dataset ( batch_size = 32 ) : ( x_train , y_train ) , ( x_test , y_test ) = tfk . datasets . mnist . load_data ( ) # normalize 0.0 ~ 1.0 x_train , x_test = x_train / 255.0 , x_test / 255.0 # add newaxis for channel. x_train = x_train [ . . . , tf . newaxis ] x_test = x_test [ . . . , tf . newaxis ] # build pipeline: shuffle -> batch. ds_train = tf . data . Dataset . from_tensor_slices ( ( x_train , y_train ) ) . shuffle ( 10000 ) . batch ( batch_size ) ds_test = tf . data . Dataset . from_tensor_slices... 続きを読む
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 ( ) ちょっと記述が減って素敵。 続きを読む
コメント
コメントを投稿