30分钟手把手带你入门TensorFlow——Mnist手写数字识别实战教程

本文是一篇TensorFlow入门教程,通过Mnist手写数字识别实例,详细讲解了如何构建CNN网络、设置loss function以及训练过程。教程涵盖了数据准备、网络结构、训练与测试,适合初学者跟随实践。
摘要由CSDN通过智能技术生成

Hello大家好,这一次睿老师将会带领大家实现mnist的手写数字识别,手把手教会你如何使用TensorFlow进行基本的操作。本次课程中,我会保持一贯的啰嗦风格,事无巨细地深入讲解每一个操作细节,为每一位读者提供最贴心的服务。

准备工作

安装TensorFlow我就不多说了,主要是mnist数据集的获取一般都会有些问题。你可能会遇到input_data.py文件下载不下来,又或是下载input_data.py之后运行会报错,又或是使用tensorflow.examples.tutorials.mnist 里自带的input_data.py报错。
解决方法如下:

1、Input_data.py文件需要修改一下下才能正常使用,在37行的“return
numpy.frombuffer(bytestream.read(4), dtype=dt)”:末尾处添加“[0]”,变成“return
numpy.frombuffer(bytestream.read(4), dtype=dt)[0]”
2、由于网络问题或其他一些未知原因,input_data下载、解压mnist数据集时会报错,这时你只要自己手动下载好数据集(四个压缩包)放到工作空间的MNIST_data文件夹里就行,就能绕开报错问题。

流程讲解

大致流程分为三步:
1、构建CNN网络结构;
2、构建loss function,配置寻优器;
3、训练、测试。

神经网络总体结构概览:

本教程中使用了两个卷积层+池化层,最后接上两个全连接层。
第一层卷积使用32个3x3x1的卷积核,步长为1,边界处理方式为“SAME”(卷积的输入和输出保持相同尺寸),激发函数为Relu,后接一个2x2的池化层,方式为最大化池化;
第二层卷积使用50个3x3x32的卷积核,步长为1,边界处理方式为“SAME”,激发函数为Relu, 后接一个2x2的池化层,方式为最大化池化;
第一层全连接层:使用1024个神经元,激发函数依然是Relu。
第二层全连接层:使用10个神经元,激发函数为softmax,用于输出结果。

代码概览:

import input_data
import tensorflow as tf
#读取数据
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
sess=tf.InteractiveSession()
#构建cnn网络结构
#自定义卷积函数(后面卷积时就不用写太多)
def conv2d(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')
#设置占位符,尺寸为样本输入和输出的尺寸
x=tf.placeholder(tf.float32,[None,784])
y_=tf.placeholder(tf.float32,[None,10])
x_img=tf.reshape(x,[-1,28,28,1])

#设置第一个卷积层和池化层
w_conv1=tf.Variable(tf.truncated_normal([3,3,1,32],stddev=0.1))
b_conv1=tf.Variable(tf.constant(0.1,shape=[32]))
h_conv1=tf.nn.relu(conv2d(x_img,w_conv1)+b_conv1)
h_pool1=max_pool_2x2(h_conv1)

#设置第二个卷积层和池化层
w_conv2=tf.Variable(tf.truncated_normal([3,3,32,50],stddev=0.1))
b_conv2=tf.Variable
  • 28
    点赞
  • 197
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值