web-dev-qa-db-ja.com

TensorFlowでの畳み込みのカスタムパディング

Tensorflow関数 tf.nn.conv2d では、パディングオプションには「SAME」と「VALID」しかありません。

しかし、Caffeのconvレイヤーには パッドオプション があり、入力の両側に(暗黙的に)追加するピクセル数を定義できます。

Tensorflowでそれを達成する方法は?

どうもありがとうございました。

15
karl_TUM

tf.pad()を使用して doc を参照)、tf.nn.conv2d(..., padding="VALID")を適用する前にTensorをパディングできます(有効なパディングはパディングがないことを意味します)。


たとえば、画像を高さ2ピクセル、幅1ピクセルでパディングし、5x5カーネルでたたみ込みを適用する場合:

input = tf.placeholder(tf.float32, [None, 28, 28, 3])
padded_input = tf.pad(input, [[0, 0], [2, 2], [1, 1], [0, 0]], "CONSTANT")

filter = tf.placeholder(tf.float32, [5, 5, 3, 16])
output = tf.nn.conv2d(padded_input, filter, strides=[1, 1, 1, 1], padding="VALID")

outputの形状は[None, 28, 26, 16]、幅が1のパディングしかないため。

34