Я пытаюсь понять, как работает функция tf.nn.conv2d (). Таким образом, я создал для этого простую программу тензорного потока:
import tensorflow as tf
import numpy as np
Nif = 2
Niy = 4
Nix = 4
Nof = 1
Koy =3
Kox = 3
ifmaps = np.random.randint(3, size=(Nif, Niy, Nix))
print("ifmaps= ", ifmaps)
weights = np.random.randint(3, size=(Nof, Nif, Koy, Kox))
print("weights = ", weights)
weights = np.reshape(weights, (Koy, Kox, Nif,Nof))
ifmaps = tf.constant(ifmaps, dtype=tf.float64, shape=[Nif, Niy, Nix])
weights = tf.constant(weights, dtype=tf.float64, shape=[Koy, Kox, Nif,Nof])
ifmaps_tf = tf.reshape(ifmaps, shape=[-1, Niy, Nix, Nif]) #NHWC
weights_tf = tf.reshape(weights, shape = [Koy, Kox, Nif, Nof])
res = tf.nn.conv2d(ifmaps_tf, weights_tf, strides=[1, 1, 1, 1], padding='VALID') #S=1, no padding
#reshape it to NCHW format
ofmap = tf.reshape(res, shape=[ Nof, 2, 2])
with tf.Session() as sess:
print("ofmap = ", sess.run(ofmap))
Результаты, которые я получаю:
ifmaps= [[[0 2 1 0]
[2 0 1 0]
[0 1 2 1]
[1 0 2 1]]
[[0 0 2 1]
[0 0 1 0]
[2 1 2 1]
[0 2 0 2]]]
weights = [[[[1 1 1]
[0 1 0]
[1 0 2]]
[[2 2 2]
[2 2 2]
[0 1 0]]]]
ofmap = [[[17. 21.]
[20. 16.]]]
Не правильное значение ofmaps! Кто-нибудь может помочь мне получить то, что мне не хватает? Заранее спасибо.