我在看关于 tf.nn.conv2d
给你的张量流的文件。但我不明白它在做什么或者它想达到什么目的。文件上说,
# 1: 将滤波器平坦化为具有形状的二维矩阵
[filter_height * filter_width * in_channels, output_channels]
.
那是干什么的?这是元素的乘法还是纯粹的矩阵乘法?我也不能理解文件中提到的另外两点。我把它们写在下面:
# 2: 从输入张量中提取图像斑块,形成一个虚拟的形状张量
[batch, out_height, out_width, filter_height * filter_width * in_channels]
.对于每个补丁,右乘滤波器矩阵和图像补丁向量。
如果有人能给出一个例子,一段代码(非常有帮助) ,并解释这里发生了什么,以及为什么操作是这样的,那将是非常有帮助的。
我试过编码一小部分,然后打印出操作的形状,但我还是不明白。
我试过这样的方法:
op = tf.shape(tf.nn.conv2d(tf.random_normal([1,10,10,10]),
tf.random_normal([2,10,10,10]),
strides=[1, 2, 2, 1], padding='SAME'))
with tf.Session() as sess:
result = sess.run(op)
print(result)
我对卷积神经网络了如指掌。我研究了他们的 给你。但是张量流的实现并不是我所期望的。这就引出了一个问题。
编辑: 因此,我实现了一个更简单的代码。但我不知道发生了什么。我是说结果是这样的。如果有人能告诉我是什么过程产生了这个输出,那将是非常有帮助的。
input = tf.Variable(tf.random_normal([1,2,2,1]))
filter = tf.Variable(tf.random_normal([1,1,1,1]))
op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
print("input")
print(input.eval())
print("filter")
print(filter.eval())
print("result")
result = sess.run(op)
print(result)
输出
input
[[[[ 1.60314465]
[-0.55022103]]
[[ 0.00595062]
[-0.69889867]]]]
filter
[[[[-0.59594476]]]]
result
[[[[-0.95538563]
[ 0.32790133]]
[[-0.00354624]
[ 0.41650501]]]]