ディープ ニューラル ネットワーク (DNN) を使用する場合、個々のレイヤーのアクティベーションを検査すると便利なことがよくあります。これは、モデルの動作を理解し、潜在的な問題を特定するのに役立ちます。 Python 用の人気のある DNN ライブラリである Keras は、これを実現する簡単な方法を提供します。
Keras モデルは一連のレイヤーとして構築され、それぞれが特定の操作を実行します。入力。特定のレイヤーの出力を取得するには、次の構文を使用できます。
model.layers[index].output
ここで、index は出力を抽出するレイヤーのインデックスです。たとえば、提供されたコード スニペットの 2 番目の畳み込み層の出力を取得するには:
conv_output = model.layers[2].output
モデル内のすべての層から出力を抽出するには、次のようにします。リスト内包表記を使用できます:
outputs = [layer.output for layer in model.layers]
実際にレイヤーの出力を評価するために、Keras は K.function と呼ばれる一連の関数を提供します。これらの関数は、テンソルのリストを入力として受け取り、出力のリストを返します。
各レイヤー出力の評価関数を作成するには、次の手順を実行できます。
from keras import backend as K functors = [K.function([inp, K.learning_phase()], [out]) for out in outputs]
ここで、inp は入力テンソル K.learning_phase() はモデルがトレーニング モードか推論モードかを示すフラグであり、out はその出力です。 layer.
ここで、入力データを対応する評価関数に渡すことでレイヤー出力を評価できます:
test = np.random.random(input_shape)[np.newaxis,...] layer_outs = [func([test, 1.]) for func in functors] print layer_outs
必ず K を設定してください。モデル内のいずれかの層にトレーニングをシミュレートするためのドロップアウトまたはバッチ正規化が含まれている場合は、learning_phase() を 1 に設定します。 mode.
レイヤーの出力を評価するためのより効率的なアプローチは、すべてのレイヤーの出力のリストを返す単一関数を使用することです:
from keras import backend as K functor = K.function([inp, K.learning_phase()], outputs)
これにより、個々の関数の評価に関連するデータ転送と計算のオーバーヘッドが削減されます。
以上がKeras モデルの特定のレイヤーからアクティベーションを抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。