从代码学AI——卷积神经网络(CNN)

今天和大家一起来看下基于TensorFlow实现CNN的代码示例,源码参见Convolutional_netWork。使用MNIST数据集进行训练和预测,下面开始代码注解。

'''
这里从源码的角度详细说明使用TensorFlow如何简单的实现卷积神经网络

使用MNIST数据集进行卷积神经网络的实现

使用MNIST数据集

数据集参见:http://yann.lecun.com/exdb/mnist/)

源码地址: 

    https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/convolutional_network.py

'''

导入相关方法和模块

from __future__ import print_function

import tensorflow as tf

# 导入 MNIST 数据
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)

基本参数设置

# 参数设置
#学习速率(也有称为步长的)
learning_rate = 0.001
#迭代的次数
training_iters = 200000
#每个批次的数据大小(这里表示每个批次使用128张图片)
batch_size = 128
#每10次进行一次结果输出
display_step = 10

#网络相关参数
#输入数据,每个待处理图片是28*28的矩阵,可以理解为将其拉平则变为一个长度为784的数组
n_input = 784 
#分类数量,最终是解决分类问题,这里分为10类,卷积神经网络也只是替代传统机器学习中特征提取的这个过程
n_classes = 10
#随机失活概率,也有叫留存率的,即在dropout层,以这个概率进行随机失活,进而减少过拟合
dropout = 0.75

基本输入的占位

# 图的输入参数定义,TensorFlow中会将各个Option编排成一个DAG(有向无环图)
# 这里定义输入,可以理解为采用占位符进行站位,待实际运行时进行具体填充,这里None表示运行时指定
# [参见]tf.placeholder使用
x = tf.placeholder(tf.float32, [None, n_input])
y = tf.placeholder(tf.float32, [None, n_classes])
#失活概率
keep_prob = tf.placeholder(tf.float32)

定义卷积神经网络

# 该函数实现卷基层的定义
# 在卷积神经网络中,往往存在多层卷基层,这里将卷积的定义当初抽出来
# 实现很简单,即采用卷积核(或者理解成滤波器)W对待处理数据x进行卷积计算(理解成在图像上平移过滤,当然也会处理深度的问题)
# 在每个窗口都可以理解成进行窗口内的WX+b这样的计算(这里的X是窗口内的数据,W是卷积核)
def conv2d(x, W, b, strides=1):
    #进行卷积计算,padding = 'SAME'表示处理后输出图像大小不变,如果valid则是变动的
    #一般在多层卷积中,往往会控制图像大小不变,否则处理起来比较困难,每层处理都要考虑图像大小
    #[参见]卷积计算
    x = tf.nn.conv2d(x, W, strides=[1, strides, strides, 1], padding='SAME')
    x = tf.nn.bias_add(x, b)
    #对结果进行非线性激活
    #[参见]激活函数
    return tf.nn.relu(x)

定义池化操作

# 进行池化操作,这里进行最大池化
# 池化可以达到降低数据量、利用更过的局部信息的目的
# 这里k默认为2,移动的步长是2,那么图像处理后相当于减小一半
# [参见]池化操作
def maxpool2d(x, k=2):
    return tf.nn.max_pool(x, ksize=[1, k, k, 1], strides=[1, k, k, 1],
                          padding='SAME')
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值