TensorFlow卷积神经网络
一、方法定义
tf.nn.conv2d (input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)
参数:
**input : ** 输入的要做卷积的图片,要求为一个张量,shape为 [ batch, in_height, in_weight, in_channel ],其中batch为图片的数量,in_height 为图片高度,in_weight 为图片宽度,in_channel 为图片的通道数,灰度图该值为1,彩色图为3。(也可以用其它值,但是具体含义不是很理解)
filter: 卷积核,要求也是一个张量,shape为 [ filter_height, filter_weight, in_channel, out_channels ],其中 filter_height 为卷积核高度,filter_weight 为卷积核宽度,in_channel 是图像通道数 ,和 input 的 in_channel 要保持一致,out_channel 是卷积核数量。
strides: 卷积时在图像每一维的步长,这是一个一维的向量,[ 1, strides, strides, 1],第一位和最后一位固定必须是1
padding: string类型,值为“SAME” 和 “VALID”,表示的是卷积的形式,是否考虑边界。"SAME"是考虑边界,不足的时候用0去填充周围,"VALID"则不考虑
use_cudnn_on_gpu: bool类型,是否使用cudnn加速,默认为true
---------------------
- 个人理解
以上内容在网上会搜到很多,下面详细介绍,输入的几个重要参数input, filter, strides,对于不同的参数得到的张量不同。
举例:
- 要卷积的图片input:[1,m,m,n] 1表示数量,m*m为图像大小,n为图片通道数
- 卷积核filter:[2,2,n,a] 2*2为卷积核大小,n为图片通道数,a为卷积核个数,n个通道输入,生成a个feature map
- 步长strides:[1,x,x,1]各个维度移动的步长,根据实际修改数值
若tf.nn.conv2d输入以上三个参数并且padding=”SAME”,则结果为[1,m/x,m/x,a] :1为数据数量
下面来看看lena图像进行卷积前后的结果显示 也是sobel算法
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mp # mp 用于读取图片
import