どうも調べにくいのかぱっと見つからないことが多いので、メモしておく.

とりあえずTensorFlow2もKerasも以外と簡単にできる

今回は、mnistとCNNの組み合わせの場合の中間層の取り出し方をまとめておく

全体のコードは長いので末尾につけてます.

TensorFlow2の場合

上記のようにモデルを定義するときに特徴量算出する部分(中間層の出力)の関数を自身で用意できていればその関数に入力値を入れたら途中の値が取り出せる.

conv_netが学習させるネットワークで、特徴量を取り出す部分も最後の分類の全結合層も含んでいるが、前半部分をfeature_extraction_part_conv_netとして切り出してある. feature_extraction_part_conv_netの関数に入力値を渡せば、適切に訓練された重みで計算が行われる.

Kerasの場合

こっちの方がいろいろ融通が効きそうな書き方になる.

特徴量を取得したい中間層のmodelの名前はmodel.summary()等で確認. そこで表示される層の名前を今回ならdense_2と設定.

tf.keras.Modelを使って、入力と出力を指定して、新しい特徴量算出用のモデルfeature_extraction_modelを作成. すでにオリジナルのmodelで訓練してれば、新しく作ったモ特徴量算出用モデルもそのパラメータもそれが使用される.

あとは通常通りpredictを呼べば特徴量を算出できる.

Tensorflow2のコード全体

mnistのサンプルを改変.
なるべく短めに記述.

Keras(tf.keras)のコード全体