TensorFlow实战5:利用卷积神经网络对图像分类(初阶:MNIST手写数字)代码实现

本文通过TensorFlow实现卷积神经网络(CNN)对MNIST手写数字的识别,介绍CNN在图像识别中的优势及步骤,包括数据准备、卷积、激活、池化、全连接层、损失计算和训练过程。
摘要由CSDN通过智能技术生成

之前用简单的神经网络实现过一次手写数字识别,这次会使用卷积神经网络来进行识别。

普通的神经网络(ANN)来对图像进行识别时,主要有如下缺点:
1. 参数太多
2. 没有利用像素之间的位置关系,对于图线识别任务来说,每个像素与周围的像素都是联系的很紧密的
3. 神经网络的层数受限制

但是利用卷积神经网络来解决图像识别分类问题,就可以避免上述的问题。
此篇文章中实现卷积神经网络对图像进行分类的步骤如下:
1. 准备数据
2. 卷积、激活、池化(两层)
3. 两层全连接层(第一层先特征加权,然后激活;第二层特征加权)
4. 使用softmax和交叉熵计算损失
5. 用梯度下降减少损失,计算准确率
6. 在运行会话时,进行1000次迭代,每100次打印结果

代码如下:

# 生成权重
def weight_variable(shape):
    w = tf.Variable(tf.random_normal(shape=shape, mean=0.0, stddev=1.0))
    return w


# 生成偏置
def bias_variable(shape):
    b = tf.Variable(tf.constant(0.0, shape=shape))
    return b


def model():
    """
    搭建的模型函数
    :return:模型预测值、样本真实值、特征值
    """

    # 1、准确数据的输入占位符,x,y
    with tf.variable_scope("data"):
        # 特征值
        x = tf.placeholder(tf.float32, [None, 784])

        # 标签值
        y_true = tf.placeholder(tf.int32, [None, 10])

    # 2、进行卷积层1
    with tf.variable_scope("conv_1"):
        # 准备参数ÿ
利用tensorflow实现卷积神经网络来进行MNIST手写数字图像的分类。 #导入numpy模块 import numpy as np #导入tensorflow模块,程序使用tensorflow实现卷积神经网络 import tensorflow as tf #下载mnist数据集,并从mnist_data目录中读取数据 from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('mnist_data',one_hot=True) #(1)这里的“mnist_data” 是和当前文件相同目录下的一个文件夹。自己先手工建立这个文件夹,然后从https://yann.lecun.com/exdb/mnist/ 下载所需的4个文件(即该网址中第三段“Four files are available on this site:”后面的四个文件),并放到目录MNIST_data下即可。 #(2)MNIST数据集是手写数字字符的数据集。每个样本都是一张28*28像素的灰度手写数字图片。 #(3)one_hot表示独热编码,其值被设为true。在分类问题的数据集标注时,如何不采用独热编码的方式, 类别通常就是一个符号而已,比如说是9。但如果采用独热编码的方式,则每个类表示为一个列表list,共计有10个数值,但只有一个为1,其余均为0。例如,“9”的独热编码可以为[00000 00001]. #定义输入数据x和输出y的形状。函数tf.placeholder的目的是定义输入,可以理解为采用占位符进行占位。 #None这个位置的参数在这里被用于表示样本的个数,而由于样本个数此时具体是多少还无法确定,所以这设为None。而每个输入样本的特征数目是确定的,即为28*28。 input_x = tf.placeholder(tf.float32,[None,28*28])/255 #因为每个像素的取值范围是 0~255 output_y = tf.placeholder(tf.int32,[None,10]) #10表示10个类别 #输入的输入数据input_x被reshape成四维数据,其中第一维的数据代表了图片数量 input_x_images = tf.reshape(input_x,[-1,28,28,1]) test_x = mnist.test.images[:3000] #读取测试集图片的特征,读取3000个图片 test_y = mnist.test.labels[:3000] #读取测试集图片的标签。就是这3000个图片所对应的标签
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值