プーリングレイヤーを使用して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を使って他のことを試しましたが、今のところうまくいきません。
動作するようになりました。将来の参考のために、これはあなたがそれを実装する必要がある方法です。 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))