手写数字识别之卷积神经网络

本文通过mnist_cnn_forward.py、mnist_cnn_back.py和test.py,详细阐述了手写数字识别中卷积神经网络的前向传播、反向传播过程。经过训练,在5000轮后模型的正确率达到了0.97,进一步提升到25000轮后,正确率提高到0.98。
摘要由CSDN通过智能技术生成

 

1.前向传播  mnist_cnn_forward.py

import tensorflow as tf
IMAGE_SIZE = 28  #图片大小28*28
NUM_CHANNELS =1  #图片通道数
CONV1_SIZE = 5   #第一层卷积核大小
CONV1_KERNEL_NUM = 32  #第一层使用了32个卷积核
CONV2_SIZE = 5
CONV2_KERNEL_NUM = 64
OUTPUT_NODE = 10   #10分类输出
FC_SIZE = 512  #隐藏层节点个数
# 权重w生成函数
def get_weight(shape,regularizer):
    #正态分布生成,去掉最大偏离点的
    w = tf.Variable(tf.truncated_normal(shape,stddev=0.1))
    if regularizer!=None:
        tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(regularizer)(w))
    return w
# 偏执B生成函数,初始值为0
def get_bias(shape):
    b = tf.Variable(tf.zeros(shape))
    return b
#求卷积
def conv2d(x,w): #x 输入,所用卷积核W
    return tf.nn.conv2d(x,w,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')

def forward(x,train,regularizer):
    #初始化化第一层卷积核W ,B
    conv1_w = get_weight([CONV1_SIZE,CONV1_SIZE,NUM_CHANNELS,CONV1_KERNEL_NUM],regularizer)
    conv1_b = get_bias([CONV1_KERNEL_NUM])
    conv1 = conv2d(x,conv1_w)
    #对conv1添加偏执,使用relu激活函数
    relu1 = tf.nn.relu(tf.nn.bias_add(conv1,conv1_b))
    #池化
    pool1 = max_pool_2x2(relu1)

    conv2_w = get_weight([C
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值