web-dev-qa-db-ja.com

KerasでのTensorflowレイヤーの使用

プーリングレイヤーを使用してKerasでシーケンシャルモデルを構築しようとしていますtf.nn.fractional_max_pool。 Kerasで独自のカスタムレイヤーを作成してみることができることはわかっていますが、Tensorflowですでにレイヤーを使用できるかどうかを確認しようとしています。次のコードスニペットの場合:

p_ratio=[1.0, 1.44, 1.44, 1.0]

model = Sequential()
model.add(ZeroPadding2D((2,2), input_shape=(1, 48, 48)))
model.add(Conv2D(320, (3, 3), activation=PReLU()))
model.add(ZeroPadding2D((1,1)))
model.add(Conv2D(320, (3, 3), activation=PReLU()))
model.add(InputLayer(input_tensor=tf.nn.fractional_max_pool(model.layers[3].output, p_ratio)))

私はこれを取得します エラーInputの代わりにInputLayerとKerasFunctional APIを使って他のことを試しましたが、今のところうまくいきません。

12
Bart C

動作するようになりました。将来の参考のために、これはあなたがそれを実装する必要がある方法です。 tf.nn.fractional_max_poolは3つのテンソルを返すため、最初のテンソルのみを取得する必要があります。

model.add(InputLayer(input_tensor=tf.nn.fractional_max_pool(model.layers[3].output, p_ratio)[0]))

またはLambdaレイヤーを使用する:

def frac_max_pool(x):
    return tf.nn.fractional_max_pool(x,p_ratio)[0]

モデルの実装は次のとおりです。

model.add(Lambda(frac_max_pool))
18
Bart C