Learningを応用したアプリケーションを作れるようになるのが目的です。MNIST数字識別する簡単なアプリケーションを、色々な方法で作ってみます。AI)を意識しています。モデルそのものには言及しません。数学的な話も出てきません。Learningモデルをどうやって使うか(エッジ推論)、ということに重点を置いています。Tensorflow2.x版を本記事の後ろに追記しました。今回の内容は、WindowsとLinux(Ubuntu)のどちらでも動きますが、本記事の説明はWindowsメインで行います。サイトを参考にさせていただき、変換用スクリプトを作りました。現在、FastGFileは非推奨とのことなので、tensorflow.gfile.GFileに置き換えています。関数を呼ぶことで、Keras用モデル(.h5)をTensorFlow用モデル(*.pb)に変換できます。関数を呼ぶことで、変換したTensorFlow用モデルの情報をJSONファイルに保存します。このスクリプトをそのまま実行すると、前回作成したKeras用モデル(conv_mnist.h5)を、TensorFlow用モデル(conv_mnist.pb)に変換してくれます。get_model_info(tf_model_filename)モデル情報を確認する上記スクリプトを実行すると、TensorFlow用モデル(conv_mnist.pb)と共に、モデル情報を記した(conv_mnist.pb_param.json)も出力されます。このモデル情報は非常に重要です。変換したモデルを使用する際に入出力の名前が必要になります。前回モデル作成時に、入力にはInputを使い、出力は全結合をするDenseを使いsoftmaxを取るようにしました。グラフ名はデフォルトではimportになるようです。このような情報をヒントに入出力のTensorを探します。]}変換したTensorFlow用モデルを使って、入力画像から数字識別するアプリケーションを作るSpyder上でnumber_detector_tensorflow.pyというファイルを開き、以下のようなコードを実装します。TensorFlow呼び出しもこの中でやっているので、少し複雑になっています。get_tensor_by_nameに先ほど確認した入出力名を設定して、入出力Tensorを取得しています。使うことで、より簡単に変換できました。(参考、というかほぼ使わせていただきました。ありがとうございます。print(t.name)上記スクリプトを実行すると、「conv_mnist_pb」というディレクトリが出来ます。この中にモデル構造を格納したファイル(.pbtxt)とweightパラメータが格納されたファイル(variables)が作られます。最後に入出力名を表示しているので、下記コマンドのパラメータやTensorflowから使う際のヒントにしてください。graph)が作られます。input_1_3と最後に数字のプリフィックスが付けられてどんどん増えていきます。conv_mnist_pbディレクトリに作られるpbtxtやweightファイルサイズもその分だけどんどん大きくなっていきます。するときには必要なoutputだけを指定するので問題ないのですが、謎です。何かリセット的なのが必要なのでしょうか。ターミナルから実行したり、Spyder上でカーネルを再起動したら問題ありません。Colaboratoryで試します。使用するTensorflowのバージョンは、2.1.0-rc1でした。Keras用モデル(.h5)をTensorFlow用モデル(*.pb)に変換する下記コードでは、Kerasモデルを僕のgoogleドライブからダウンロードしていますが、前回の続きからやる場合は不要です。ファイルと、assets、variableディレクトリが作られます。modelをtarにまとめています。conv_mnist_saved_modelモデル情報を見てみる本記事では、Tensorflowモデルの情報を見るために、色々とコードを書いてみましたが、下記コマンドで見ることが出来ます。