Tensorflow-浅层CNN(MNIST数据集)

CNN

卷积神经网络的提出,解决了传统的基于SIFT类型特征提取算法的繁琐问题。原图像可以直接作为输入。
CNN与SIFT一样,对缩放、平移、旋转等畸变具有不变性,有很强泛化性。
* 卷积的权值共享,大幅减少神经网络参数量,防止过拟合(low bias; high var)

* 全连接层由于参数过多、梯度弥散,不利于多层训练

每个卷积会经过以下几个操作
* 图像经过多个不同的卷积核滤波,并加上bias提出局部特征,每个卷积核会映射出一个新的2D图像
* 将卷积核滤波输出进行非线性激活函数处理,如ReLU
* 对激活函数的输出进行池化(降采样),一般使用最大池化,即保留最显著特征,提高畸变容忍能力、
* 最后可以加上LRN(?),或者Batch Normalization

权值共享

假设图像是1000x1000,则输入为1,000,000x1

全连接层

每一个节点连接1000,000个像素,共1000,000个节点,参数量极大

局部连接

每一个节点与10x10的像素连接,共10x10x1000,000个参数,比全连接缩小10000倍

卷积操作

每一个节点参数一样,且仅仅与核有关系。10x10的卷积层,参数为100

Feather Map

每一个卷积核的输出成为一个Feather Map。通常,前面的卷积层提取简单特征,比如点、线,下一层提取更高阶特征,比如,几何图形,一层一层往下,组合成眼睛、鼻子等五官,最后组合成一张人脸,完成人脸匹配识别。

Tensorflow 实现简单的卷积神经网络

from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
mnist = input_data.read_data_sets("../../mnist/", one_hot = True)
sess = tf.InteractiveSession()
Extracting ../../mnist/train-images-idx3-ubyte.gz
Extracting ../../mnist/train-labels-idx1-ubyte.gz
Extracting ../../mnist/t10k-images-idx3-ubyte.gz
Extracting ../../mnist/t10k-labels-idx1-ubyte.gz

定义初始化函数来简化多次参数的初始化

  • 制造噪声来打破对称结构,如截断的正态分布,标准差0.1
  • 因为使用ReLU,因此置偏置bias=0.1以避免死亡节点
def weight_variable(shape):
    init_w = tf.truncated_normal(shape=shape, stddev=0.1)
    return tf.Variable(init_w)

def bias_variable(shape):
    init_b = tf.constant(0.1, shape=shape)
    return init_b

定义卷积层、池化层函数简化多次卷积、池化操作

  • tf.nn.conv2d是二维卷积函数,卷积参数W[row, col, channel, num_of_convs]
  • tf.nn.max_pool是最大池化函数,strides设为横竖步长2,将图片所为原来的一半
  • 步长strides[batch, height, width, channels],batch为图片样本,1代表不放过任何样本;channel=1代表不放过任何通道
# 图片大小不变
def 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值