[tensorflow] tf.nn.conv2d()

示例代码:

import tensorflow as tf

# tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
# 除去name参数用以指定该操作的name,与方法有关的一共五个参数:
#
# 第一个参数input:指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数],注意这是一个4维的Tensor,要求类型为float32和float64其中之一
#
# 第二个参数filter:相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height, filter_width, in_channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],要求类型与参数input相同,有一个地方需要注意,第三维in_channels,就是参数input的第四维
#
# 第三个参数strides:卷积时在图像每一维的步长,这是一个一维的向量,长度4
#
# 第四个参数padding:string类型的量,只能是"SAME","VALID"其中之一,这个值决定了不同的卷积方式(SAME: 计算得到的卷积矩阵尺寸与input相同;VALID: 计算得到的卷积矩阵尺寸为:n-k+1)
#
# 第五个参数:use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true
#
# 结果返回一个Tensor,这个输出,就是我们常说的feature map

oplist=[]
shape=[]
# [batch, in_height, in_width, in_channels]
input_arg  = tf.Variable(tf.ones([1, 3, 3, 5]))
# [filter_height, filter_width, in_channels, out_channels]
filter_arg = tf.Variable(tf.ones([1 ,1 , 5 ,1]))
# strides=1
# tensorShape [1,3,3,1]
op2 = tf.nn.conv2d(input_arg, filter_arg, strides=[1,1,1,1], use_cudnn_on_gpu=False, padding='VALID')
oplist.append([op2, "case 2"])
shape.append(op2.shape)

# [batch, in_height, in_width, in_channels]
input_arg  = tf.Variable(tf.ones([1, 3, 3, 5]))
# [filter_height, filter_width, in_channels, out_channels]
filter_arg = tf.Variable(tf.ones([3 ,3 , 5 ,1]))
# tensorShape [1,1,1,1]
op2 = tf.nn.conv2d(input_arg, filter_arg, strides=[1,1,1,1], use_cudnn_on_gpu=False, padding='VALID')
oplist.append([op2, "case 3"])
shape.append(op2.shape)

# [batch, in_height, in_width, in_channels]
input_arg  = tf.Variable(tf.ones([1, 5, 5, 5]))
# [filter_height, filter_width, in_channels, out_channels]
filter_arg = tf.Variable(tf.ones([3 ,3 , 5 ,1]))
# tensorShape [1,3,3,1]
op2 = tf.nn.conv2d(input_arg, filter_arg, strides=[1,1,1,1], use_cudnn_on_gpu=False, padding='VALID')
oplist.append([op2, "case 4"])
shape.append(op2.shape)

# [batch, in_height, in_width, in_channels]
input_arg  = tf.Variable(tf.ones([1, 5, 5, 5]))
# [filter_height, filter_width, in_channels, out_channels]
filter_arg = tf.Variable(tf.ones([3 ,3 , 5 ,1]))
# tensorShape [1,5,5,1]
op2 = tf.nn.conv2d(input_arg, filter_arg, strides=[1,1,1,1], use_cudnn_on_gpu=False, padding='SAME')
oplist.append([op2, "case 5"])
shape.append(op2.shape)

# [batch, in_height, in_width, in_channels]
input_arg  = tf.Variable(tf.ones([1, 5, 5, 5]))
# [filter_height, filter_width, in_channels, out_channels]
filter_arg = tf.Variable(tf.ones([3 ,3 , 5 ,7]))
# tensorShape [1,5,5,7]
op2 = tf.nn.conv2d(input_arg, filter_arg, strides=[1,1,1,1], use_cudnn_on_gpu=False, padding='SAME')
oplist.append([op2, "case 6"])
shape.append(op2.shape)

# [batch, in_height, in_width, in_channels]
input_arg  = tf.Variable(tf.ones([1, 5, 5, 5]))
# [filter_height, filter_width, in_channels, out_channels]
filter_arg = tf.Variable(tf.ones([3 ,3 , 5 ,7]))
# strides=2,即卷积时核移动的步长为2
# tensorShape [1,3,3,7]
op2 = tf.nn.conv2d(input_arg, filter_arg, strides=[1,2,2,1], use_cudnn_on_gpu=False, padding='SAME')
oplist.append([op2, "case 7"])
shape.append(op2.shape)


# [batch, in_height, in_width, in_channels]
input_arg  = tf.Variable(tf.ones([4, 5, 5, 5]))
# [filter_height, filter_width, in_channels, out_channels]
filter_arg = tf.Variable(tf.ones([3 ,3 , 5 ,7]))
# tensorShape [4,3,3,7]
op2 = tf.nn.conv2d(input_arg, filter_arg, strides=[1,2,2,1], use_cudnn_on_gpu=False, padding='SAME')
oplist.append([op2, "case 8"])
shape.append(op2.shape)

with tf.Session() as a_sess:
    a_sess.run(tf.global_variables_initializer())
    for aop in oplist:
        print("----------{}---------".format(aop[1]))
        print(a_sess.run(aop[0]))
        print('---------------------\n\n')
print(shape[:])

输出结果:

结果是这样的:

———-case 2———
[[[[5.]
[5.]
[5.]]

[[5.]
[5.]
[5.]]

[[5.]
[5.]
[5.]]]]
———————

———-case 3———
[[[[45.]]]]
———————

———-case 4———
[[[[45.]
[45.]
[45.]]

[[45.]
[45.]
[45.]]

[[45.]
[45.]
[45.]]]]
———————

———-case 5———
[[[[20.]
[30.]
[30.]
[30.]
[20.]]

[[30.]
[45.]
[45.]
[45.]
[30.]]

[[30.]
[45.]
[45.]
[45.]
[30.]]

[[30.]
[45.]
[45.]
[45.]
[30.]]

[[20.]
[30.]
[30.]
[30.]
[20.]]]]
———————

———-case 6———
[[[[20. 20. 20. 20. 20. 20. 20.]
[30. 30. 30. 30. 30. 30. 30.]
[30. 30. 30. 30. 30. 30. 30.]
[30. 30. 30. 30. 30. 30. 30.]
[20. 20. 20. 20. 20. 20. 20.]]

[[30. 30. 30. 30. 30. 30. 30.]
[45. 45. 45. 45. 45. 45. 45.]
[45. 45. 45. 45. 45. 45. 45.]
[45. 45. 45. 45. 45. 45. 45.]
[30. 30. 30. 30. 30. 30. 30.]]

[[30. 30. 30. 30. 30. 30. 30.]
[45. 45. 45. 45. 45. 45. 45.]
[45. 45. 45. 45. 45. 45. 45.]
[45. 45. 45. 45. 45. 45. 45.]
[30. 30. 30. 30. 30. 30. 30.]]

[[30. 30. 30. 30. 30. 30. 30.]
[45. 45. 45. 45. 45. 45. 45.]
[45. 45. 45. 45. 45. 45. 45.]
[45. 45. 45. 45. 45. 45. 45.]
[30. 30. 30. 30. 30. 30. 30.]]

[[20. 20. 20. 20. 20. 20. 20.]
[30. 30. 30. 30. 30. 30. 30.]
[30. 30. 30. 30. 30. 30. 30.]
[30. 30. 30. 30. 30. 30. 30.]
[20. 20. 20. 20. 20. 20. 20.]]]]
———————

———-case 7———
[[[[20. 20. 20. 20. 20. 20. 20.]
[30. 30. 30. 30. 30. 30. 30.]
[20. 20. 20. 20. 20. 20. 20.]]

[[30. 30. 30. 30. 30. 30. 30.]
[45. 45. 45. 45. 45. 45. 45.]
[30. 30. 30. 30. 30. 30. 30.]]

[[20. 20. 20. 20. 20. 20. 20.]
[30. 30. 30. 30. 30. 30. 30.]
[20. 20. 20. 20. 20. 20. 20.]]]]
———————

———-case 8———
[[[[20. 20. 20. 20. 20. 20. 20.]
[30. 30. 30. 30. 30. 30. 30.]
[20. 20. 20. 20. 20. 20. 20.]]

[[30. 30. 30. 30. 30. 30. 30.]
[45. 45. 45. 45. 45. 45. 45.]
[30. 30. 30. 30. 30. 30. 30.]]

[[20. 20. 20. 20. 20. 20. 20.]
[30. 30. 30. 30. 30. 30. 30.]
[20. 20. 20. 20. 20. 20. 20.]]]

[[[20. 20. 20. 20. 20. 20. 20.]
[30. 30. 30. 30. 30. 30. 30.]
[20. 20. 20. 20. 20. 20. 20.]]

[[30. 30. 30. 30. 30. 30. 30.]
[45. 45. 45. 45. 45. 45. 45.]
[30. 30. 30. 30. 30. 30. 30.]]

[[20. 20. 20. 20. 20. 20. 20.]
[30. 30. 30. 30. 30. 30. 30.]
[20. 20. 20. 20. 20. 20. 20.]]]

[[[20. 20. 20. 20. 20. 20. 20.]
[30. 30. 30. 30. 30. 30. 30.]
[20. 20. 20. 20. 20. 20. 20.]]

[[30. 30. 30. 30. 30. 30. 30.]
[45. 45. 45. 45. 45. 45. 45.]
[30. 30. 30. 30. 30. 30. 30.]]

[[20. 20. 20. 20. 20. 20. 20.]
[30. 30. 30. 30. 30. 30. 30.]
[20. 20. 20. 20. 20. 20. 20.]]]

[[[20. 20. 20. 20. 20. 20. 20.]
[30. 30. 30. 30. 30. 30. 30.]
[20. 20. 20. 20. 20. 20. 20.]]

[[30. 30. 30. 30. 30. 30. 30.]
[45. 45. 45. 45. 45. 45. 45.]
[30. 30. 30. 30. 30. 30. 30.]]

[[20. 20. 20. 20. 20. 20. 20.]
[30. 30. 30. 30. 30. 30. 30.]
[20. 20. 20. 20. 20. 20. 20.]]]]
———————

[TensorShape([Dimension(1), Dimension(3), Dimension(3), Dimension(1)]),
TensorShape([Dimension(1), Dimension(1), Dimension(1), Dimension(1)]),
TensorShape([Dimension(1), Dimension(3), Dimension(3), Dimension(1)]),
TensorShape([Dimension(1), Dimension(5), Dimension(5), Dimension(1)]),
TensorShape([Dimension(1), Dimension(5), Dimension(5), Dimension(7)]),
TensorShape([Dimension(1), Dimension(3), Dimension(3), Dimension(7)]),
TensorShape([Dimension(4), Dimension(3), Dimension(3), Dimension(7)])]

 

以上,参考自:https://www.cnblogs.com/qggg/p/6832342.html

Leave a Reply

Your email address will not be published.