こしあん
2018-07-18

Kerasでモデルのsummaryをテキストとして保存する方法

Kerasで「plot_modelを使えばモデルの可視化ができるが、GraphViz入れないといけなかったり、セットアップが面倒くさい!model.summary()のテキストをファイル保存で十分だ!」という場合に使えるテクニックです。

summary()のprint_fn引数を使う

summary()はコンソールに出力するための関数で、出力の文字列を返したりすることはできません(返り値はNoneです)。ただし、print_fn引数を使うと出力先を書き換えることができ、これによりファイル出力ができます。

Kerasのsummary()関数を見ると次のように書かれています。なお、model.summary()はkeras.utils.print_summaryへのショートカットです。

print_fn: 使うためのプリント関数.サマリの各行で呼ばれます.サマリの文字列をキャプチャするためにカスタム関数を指定することもできます.

https://keras.io/ja/utils/#print_summary

ファイルに出力する場合はこうします。

with open("output.txt", "w") as fp:
    model.summary(print_fn=lambda x: fp.write(x + "\r\n"))

print_fnにラムダ式をコールバックの形で指定します。行ごとに呼ばれるので、末尾に改行コードをつけないと改行がないテキストファイルが出力されます。改行コードは環境にあわせて切り替えてください(\nにするなど)。

summaryの文字列を取得するには

同じように、summary()の文字列の値を取得するには、io.StringIOを使うとできます。

from io import StringIO

with StringIO() as buf:
    # StringIOに書き込む
    model.summary(print_fn=lambda x: buf.write(x + "\n"))
    # StringIOから取得
    text = buf.getvalue()

print(text)

結果的にはmodel.summary()と何ら変わりませんが、一度変数に記録した値を表示しているのが異なるところです。StringIOの使い方については詳しくは公式ドキュメントを参照してください。ちなみに最新バージョンではモジュールがStringIOから、io.StringIOに変わっているのでご注意ください。

https://docs.python.jp/2/library/stringio.html
https://docs.python.org/ja/3.7/library/io.html

関連

Related Posts

Kerasに組み込まれているNASNet(Mobile)の実装... NASNet Mobileのsummary __________________________________________________________________________________________________ Layer (type) ...
Google ColabのTPUでResNetのベンチマークを取ってみた... Google ColaboratoryでTPUが使えるようになりましたが、さっそくどのぐらい速いのかベンチマークを取ってみました。以前やったResNetのベンチマークを使います。 環境:Google Colab(TPU)、TensorFlow:1.11.0-rc2、Keras:2.1.6 コ...
Affinity LossをCIFAR-10で精度を求めてひたすら頑張った話... 不均衡データに対して有効性があると言われている損失関数「Affinity loss」をCIFAR-10で精度を出すためにひたすら頑張った、というひたすら泥臭い話。条件10個試したらやっと精度を出すためのコツみたいなのが見えてきました。 結論 長いので先に結論から。CIFAR-10をAffini...
Google Colaboratoryで保存したKerasのモデルを読み込むとValueError... Google Colaboratory(Colab)上のKerasでh5形式で保存したモデルをダウンロードして、load_modelすると「TypeError: ('Keyword argument not understood:', 'data_format')」とエラーが発生して読み込めないこ...
tensorflow.kerasでKeras方式のhdf5で重みを保存する方法... 従来のKerasで係数を保存すると「hdf5」形式で保存されたのですが、TPU環境などでTensorFlowのKerasAPIを使うと、TensorFlow形式のチェックポイントまるごと保存で互換性の面で困ったことがおきます。従来のKerasのhdf5形式で保存する方法を紹介します。 サンプル...
Tags:

Add a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です