卷积神经网络代码

卷积核=滤波器=filter,卷积核里的值可以理解为权重w,经卷积变换后的图像在卷积神经网络里称为feature map
经过卷积运算后的每个像素值并不能保证在0~256之间,对于在区间外的像素点会导致灰度图无法限制,所以还需要做一次归一化,然后每个值乘以256,再将所有制映射到这个区间内
归一化算法: x = ( x − M i n ) / ( M a x − M i n ) x=(x-Min)/(Max-Min) x=(xMin)/(MaxMin)

网络结构
卷积神经网络主要包括卷积层和池化层
对于一副图片,一般会使用多个卷积核,将他们统一放到卷积层里来操作,这一层中有几个滤波器,就有几个feature map,接着还有经历一个池化层,将feature map降维缩小
卷积层里channel的个数代表卷积层的深度,池化层中只有一个滤波器,主要参数是步长大小

卷积操作

  • 窄卷积:生成的feature map比原来的原始图片小,补偿可变,步长S,原始图片MM,卷积核大小NN,卷积后的图像大小(M-N)/S+1 * (M-N)/S+1
  • 同卷积:卷积后的图片尺寸与原始图片尺寸一样大,步长固定为1,一般会使用padding(外圈补0)
  • 全卷积(full 卷积/反卷积):把原始图片里的每个像素点都用卷积操作曾展开,需要对原图进行padding操作,生成的结果会比原图大,原图MM,卷积核NN,卷积后的尺寸(M+N-1) * (M+N-1),全卷积步长固定为1
  • 多通道卷积:每个输入通道的图片都要与同一个卷积核进行卷积操作,生成与输入通道匹配的feature map,再把这几张feature map相同位置上的值加起来,生成一张feature map

相关函数
卷积函数

tf.nn.conv2d(input, fliter, strides, padding, use_cudnn_on_gpu = None, name=None)

input是一个tensor,具有【batch, in_height, in_weight, in_channels】这样的shape,【训练时一个batch的图片数量,高、宽、通道数】
flier是一个tensor,具有【filter_height, filter_weight, in_channels, out_channels】这样的shape【卷积核的高、宽、图像通道数、滤波器个数】
strides:卷积时在图像每一维的步长,一个一维向量,长度为4。输入格式默认格式”NHWC“,则strides的设置为[1,stride,stride,1]对应[batch,in_height, in_width, in_channels]第二、三维是在filter在特征图上的移动的跨度,第四个表示在一个样本的一个通道上移动。第一维和第四维一般恒定为1,
padding:SAME或VALID(边缘不填充)

池化函数

tf.nn.max_pool(input, ksize, strides, padding, name=None)
tf.nn.avg_pool(input, ksize, strides, padding, name=None)

input:池化输入,通常是feature map,【batch, height, width, channels】
ksize:池化窗口大小,四维向量,【1,height, weight, 1】
strides:[1, stride, stride, 1]
padding:VALID或SAME
返回一个tensor,【batch, height, width, channels】

队列机制
tensorflow提供了一个队列机制,通过多线程将读取数据与计算数据分开

#启动线程,向队列里读取数据
tf.train.start_queue_runners()

反卷积神经网络
反卷积操作步骤:
1、将卷积核反转,上下左右方向进行递序操作
2、将卷积结果作为输入,做补0的扩充操作(往每个元素后面补0)
3、在扩充后的输入基础上再对整体补0
4、将补0后的卷积结果作为真正的输入,反转后的卷积核为filter,进行步长为1 的卷积操作

def conv2d_transpose(value, filter, output_shape, strides, padding='SAME', data_format="NHWC", name=None)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值