一.tensorflow中二维卷积函数的参数含义:
def conv2d(input, filter, strides, padding, use_cudnn_on_gpu=True, data_format="NHWC", dilations=[1, 1, 1, 1], name=None)
卷积操作函数:
input:需要做卷积操作的图片;四维tensor张量,类型float32或float64;[batch,in_height,in_width,in_channels]形状(shape):batch训练时一个batch的图片数量,in_height图片高度,in_width图片宽度,in_channels图像通道数
filter:CNN中的卷积核(滤波器),四维tensor张张量,[filter_height,filter_width,in_channels,out_channels]形状(shape):卷积核高度,卷积核宽度,图像通道数,卷积核个数。
strides:卷积时图像每一维的步长。一维向量长度为4 如[1,1,1,1]
padding:决定是否补充0,SAME:填充到滤波器能够到达图像的边缘 VALID:边缘不填充
use_cudnn_on_gpu:bool类型,是否使用cudn加速,默认加速
返回值:featuremap特征图片(tensor张量)
input:输入的图片 如:[1,5,5,1]下图
filter:卷积核或滤波器
strides:步长(注意:图像每一维的步长,input是思维tensor,strides=[1,1,1,1]表示每一维的步长)
padding:padding=‘SAME’补0 当padding=‘VALID‘不补充0
返回值:featuremap特征图片
二.卷积函数的简单实例
import tensorflow as tf image = [0,1.0,1,2,2,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,0,2,0,1,0] ##注意:数据类型为float32或float64不能是int,其中需有一个1.0 input = tf.Variable(tf.constant(image,shape=[1,5,5,1])) ###输入一个5*5的图像矩阵 fil1 = [-1.0,0,1,-2,0,2,-1,0,1] ##注意:数据类型为float32或float64不能是int,其中需有一个1.0 filter = tf.Variable(tf.constant(fil1,shape=[3,3,1,1])) ###定义卷积核(滤波器) op = tf.nn.conv2d(input,filter,strides=[1,1,1,1],padding=‘SAME‘) ##一个通道输入,输出一个featuremap init = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) print(‘input:\n‘, sess.run(input)) print(‘op:\n‘,sess.run(op)) ##输出结果 ‘‘‘ input: [[[[ 0.] [ 1.] [ 1.] [ 2.] [ 2.]] [[ 0.] [ 1.] [ 1.] [ 0.] [ 0.]] [[ 1.] [ 1.] [ 0.] [ 1.] [ 0.]] [[ 1.] [ 0.] [ 1.] [ 1.] [ 1.]] [[ 0.] [ 2.] [ 0.] [ 1.] [ 0.]]]] op: [[[[ 3.] [ 3.] [ 1.] [ 1.] [-4.]] [[ 4.] [ 2.] [-1.] [-1.] [-3.]] [[ 3.] [-1.] [ 0.] [-1.] [-3.]] [[ 3.] [-1.] [ 1.] [ 0.] [-4.]] [[ 4.] [ 0.] [-1.] [ 0.] [-3.]]]] ‘‘‘
结果一致:
总结:
1.数据类型 input 和 filter的数据类型都只能是float32 或 float64
2.strides步长:是指输入数据的每一个维度的步长,输入数据是4维tensor 所以步长[1,1,1,1](一维tensor,长度4)才是和图示步长一致。
原文:https://www.cnblogs.com/liuhuacai/p/12000329.html