TensorFlow实战(六)- 使用TensorFlow实现卷积神经网络CNN

本文详细介绍了卷积神经网络(CNN)的基本原理,包括稀疏连接、权值共享等特性,并探讨了其在图像处理中的应用。接着,使用TensorFlow实现简单及高级的CNN,讲解了padding的不同方式、基础操作以及数据增强、LRN层等技巧,以提高模型的泛化能力。在CIFAR-10数据集上的实验展示了模型的有效性。
摘要由CSDN通过智能技术生成

一,卷积神经网络简介

卷积神经网络提供了一种方法来特化神经网络,使其能够处理清楚的网络结构拓扑的数据,以及将这样的模型扩展到非常大的规模。这种方法在二维图像拓扑上是最成功的。

卷积神经网络的主要特征有:

  • 稀疏连接:源于视觉的局部感受野。
  • 权值共享
  • 等变表示:平移等变性。
  • 总结:稀疏连接和权值共享降低了参数量,使训练复杂度大大降低,并减轻了过拟合。同时权值共享还赋予了卷积网络对平移的容忍性,而池化层降采样进一步降低了输出餐数量,并赋予模型对轻度形变的容忍性,提高了模型的泛化能力。

卷积神经网络中的一个卷积层一般包括三级:

  1. 卷积级:利用卷积核加偏置进行仿射变换,提取feature map。
  2. 探测级:非线性激活函数,如Relu。
  3. 池化级:降采样,一般用最大池化,保留最显著的特征,并提升模型的畸变容忍能力。

卷积神经网络的参数只与卷积核的大小与数量有关,只要我们提供的卷积核数量足够多,能提取出各种方向的边或者各种形态的点,就可以让卷积层抽象出有效而丰富的高阶特征。

经典卷积网络:

  • LeNet5
  • AlexNet
  • VGG
  • GoogleInceptionNet
  • ResNet

二,用TensorFlow实现简单的卷积网络

padding的填充方式有三种(假设输入图像宽为m,卷积核宽为k,步长为1):

  • valid:无论怎样都不使用零填充的极端情况,并且卷积核只允许访问那些图像中能够完全包含整个核的位置。输出的宽度会变成m-k+1。
  • same:只进行足够的零填充来保持输出与输入有相同的大小,这可能会导致边界像素的欠表示。
  • full:进行足够的零填充,来保证每个像素在每个方向上正好被访问了k次,最终输出图像的宽度为m+k-1,一般不用。
    但,零填充的最优数量处于valid和same padding之间的某个位置。

一些基础

  • tf.nn.conv2d(x,filters,strides,padding)
    ①x=[图像数量(一般为-1代表样本数量不固定),长度,宽度,图像通道数]。
    ②filters=[长度,宽度,输入图像的通道数,卷积核数]
    ③strides = [批处理步长(一般为1),长度上的步长,宽度上的步长,卷积核数上的步长(一般为1)]
    ④padding=’same’或‘valid’,用来定义零填充的方式。
  • tf.nn.max_pool(x,pool_kernel,strides,padding)
    参数形式同conv2d。

tensorflow的实现

# 一般CNN的实现
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

# 0,导入数据
mnist = input_data.read_data_sets("MNIST_data/",one_hot=True)
print(mnist.train.images.shape,mnist.train.labels.shape)
sess = tf.InteractiveSession()

# 1,定义一些要重复使用的函数
def weighted_variable(shape):
    initial = tf.truncated_normal(shape,stddev=0.1)
    return tf.Variable(initial)
def bias_variable(shape):
    initial = tf.constant(0.1,shape=shape)
    return tf.Variable(initial)
def conv2d(x,filters):
    return tf.nn.conv2d(x,filters,strides=[1,1,1,1],padding="SAME")
def max_pool_2x2(x):
    return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

# 2,定义输
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值