TensorFlow学习笔记(一)MNIST手写字识别

TensorFlow 是一个非常强大的用来做大规模数值计算的库。其所擅长的任务之一就是实现以及训练深度神经网络。

TensorFlow 可以拆分成 tensor 和 flow 两部分来理解,tensor 指的是张量,是维度的推广,表示更多维度的矩阵;flow 指的是流,一层层的计算可以看作是“张量”在计算模型上的流动,简单的说就是看作计算过程。

TensorFlow 的工作方式是:

  • 使用图(graph)来表示计算任务.
  • 在会话(Session)的上下文(context)中执行图.
  • 使用 tensor 表示数据.
  • 通过变量(Variable)维护状态.
  • 使用 feed 和 fetch 可以为任意的操作(arbitrary operation)赋值或者从其中获取数据.

TensorFlow 程序通常被组织成一个构建阶段和一个执行阶段。在构建阶段, 节点的执行步骤被描述成一个图;在执行阶段, 使用会话执行图中的节点计算。

当我们开始学习编程的时候,第一件事往往是学习打印”Hello World”。就好比编程入门有Hello World,机器学习入门有MNIST。MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片:

这里写图片描述

它也包含每一张图片对应的标签,告诉我们这个是数字几。比如,上面这四张图片的标签分别是5,0,4,1。

这里我们搭建一个卷积神经网络来识别图中的数字。

加载MNIST数据集

首先是采用一个脚本来自动下载和导入MNIST数据集,它会自动创建一个’MNIST_data’的目录来存储数据。

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot = True)

使用InteractiveSession类创建一个会话,通过它可以更加灵活地构建代码。它能在运行图的时候,插入一些计算图,如果没有使用InteractiveSession,那么需要在启动session之前构建整个计算图,然后启动该计算图。

import tensorflow as tf
sess = tf.InteractiveSession()

设置输入数据的参数,x、y_用占位符表示,用来存储输入图像展开形成的向量和输入图像的标签。

x = tf.placeholder("float", shape = [None, 784])
y_ = tf.placeholder("float", shape = [None, 10])

tf.placeholder(dtype, shape=None, name=None)函数可以理解为形参,用于定义过程,在执行的时候再赋具体的值,返回的是一个tensor。

参数:

  • dtype:数据类型,常用的数据类型有tf.float32,tf.float64等.
  • shape:数据形状,可以是一维值,也可以是多维。这里的[None, 784]和[None,10]表示的是固定列数、任意行数的数据.
  • name:名称.

初始化权重

创建这个模型需要创建大量的权重和偏置项,而且权重在初始化时应该加入少量的噪声来打破对称性以及避免0梯度。我们使用的是ReLU神经元,因此比较好的做法是用一个较小的正数来初始化偏置项,以避免神经元节点输出恒为0的问题(dead neurons)。为了不在建立模型的时候反复做初始化操作,这里定义两个函数用于初始化。

#生成shape形状的标准差为0.1的正态分布中的随机值
def weight_variable(shape):
    initial = tf.truncated_normal(shape, stddev = 0.1)
    return tf.Variable(initial)

#生成形状为shape的值都为0.1的常量
def bias_variable(shape):
    initial = tf.constant(0.1, shape = shape)
    return tf.Varia
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值