input (4,4,3)
filter (3,3,3,3)
output (4,4,3)
Я пытаюсь свернуть входное изображение с помощью фильтра.Фильтр применяется для каждого слоя (т. Е. Следует использовать только значения из текущего канала вместо применения конвента по глубине).
Я разработал фильтры таким образом, чтобы только соответствующий слой фильтра имелзначение и другие каналы равны нулю:
enter array([[[[1., 0., 1.],
[0., 1., 0.],
[1., 0., 1.]],
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]],
[[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[1., 0., 1.],
[0., 1., 0.],
[1., 0., 1.]],
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]],
[[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[1., 0., 1.],
[0., 1., 0.],
[1., 0., 1.]]]], dtype=float32)code here
Для тестирования я создал 3-канальный (4,4) массив со всеми единицами на первом канале и нулями на остальном.
Ожидаемый выход - первый канал имеет свернутый выход, а остаток должен быть равен нулю.Но получил это (напечатал отдельные слои):
enter array([[2., 2., 2., 1.],
[2., 3., 3., 2.],
[2., 3., 3., 2.],
[1., 2., 2., 2.]], dtype=float32)
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]], dtype=float32)
array([[2., 2., 2., 1.],
[2., 3., 3., 2.],
[2., 3., 3., 2.],
[1., 2., 2., 2.]], dtype=float32)
Вот мой код:
weightwithout5 =tf.constant(
[[1., 0, 1],
[0, 1, 0],
[1., 0, 1],
[0, 0, 0],
[0., 0, 0],
[0, 0, 0],
[0., 0, 0],
[0, 0, 0],
[0., 0, 0],
[0, 0, 0],
[0, 0., 0],
[0, 0, 0],
[1., 0., 1],
[0, 1., 0],
[1., 0., 1.],
[0, 0., 0],
[0, 0, 0],
[0, 0., 0],
[0, 0, 0.],
[0, 0, 0],
[0, 0, 0.],
[0, 0, 0],
[0, 0, 0.],
[0, 0, 0],
[1, 0, 1.],
[0, 1, 0],
[1, 0, 1.]],shape=(3,3,3,3),dtype=tf.float32)
x = tf.placeholder(tf.float32, (None, 4, 4, 3))
convwithout5 = tf.nn.convolution(x,weightwithout5,strides=[1,1],padding="SAME")
in0_ = np.ones(shape=(4,4))## input with ones on channel 0 and zeros for other channels
in1_ = np.zeros(shape=(4,4))
in2_ = np.zeros(shape=(4,4))
input_ = cv2.merge([in0_, in1_, in2_])
input_1 = np.expand_dims(input_,axis=0)
print(input_1.shape)
with tf.Session() as sess:
convolved_output = sess.run([convwithout5],feed_dict={x:input_1})
print("the conv results")
print(convolved_output[0][0][:,:,0])## not sure on why i have to use extra [0] to get 4,4 matrix
print(convolved_output[0][0][:,:,1])
print(convolved_output[0][0][:,:,2])