我在tf.nn.conv2d
这里查看 tensorflow的文档。但是我不明白它的作用或试图达到的目的。它在文档上说,
#1:将滤镜展平为具有形状的二维矩阵
[filter_height * filter_width * in_channels, output_channels]
。
现在那是做什么的?是逐元素乘法还是仅矩阵乘法?我也无法理解文档中提到的其他两点。我在下面写了它们:
#2:从输入张量中提取图像补丁,以形成形状的虚拟张量
[batch, out_height, out_width, filter_height * filter_width * in_channels]
。#3:对于每个色块,将滤波器矩阵和图像色块向量右乘。
如果有人可以举一个例子,也许有一段代码(极其有用)并解释那里发生了什么以及为什么这样的操作,那将真的很有帮助。
我尝试编码一小部分并打印出操作的形状。不过,我还是不明白。
我尝试过这样的事情:
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)
我了解卷积神经网络的点点滴滴。我在这里学习过。但是在tensorflow上的实现不是我期望的。因此它提出了一个问题。
编辑:所以,我实现了一个简单得多的代码。但是我不知道发生了什么。我的意思是结果是这样的。如果有人能告诉我是什么过程产生此输出的,那将非常有帮助。
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]]]]
tf.nn.conv2d()
,因此,除非use_cudnn_on_gpu=False
我们明确指定,否则当我们将TF与GPU支持一起使用时,根本不使用所讨论的方法。