TensorFlow实战-TensorFlow第一步-第3章

3 TensorFlow第一步 39

3.1 TensorFlow的编译及安装 39

  • install anconda
    link
  • CPU version
    conda install tensorflow
  • GPU version
    conda install tensorflow-gpu

3.2 TensorFlow实现SoftmaxRegression识别手写数字 46

导入数据

MNIST是一个非常简单的机器视觉数据集,由几万张28x28像素的手写数字组成,这些图片只包含灰度信息。

123456
from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

print(mnist.train.images.shape, mnist.train.labels.shape)print(mnist.test.images.shape, mnist.test.labels.shape)print(mnist.validation.images.shape, mnist.validation.labels.shape)
Extracting MNIST_data/train-images-idx3-ubyte.gz
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
(55000, 784) (55000, 10)
(10000, 784) (10000, 10)
(5000, 784) (5000, 10)

可以看到数据集中,训练集有55000个样本,测试集有10000个样本,验证集有5000个样本。
这里的数据全部丢弃了图片的二维结构信息,只是把一张图片变成了一个很长的一维向量。
我们可以使用matplotlib把一维数据还原为原来的图像。如下所示。

1234567
from matplotlib import pyplot as plt% matplotlib inline

data = mnist.train.images[0].reshape((28,28))plt.imshow(data)

print(mnist.train.labels[0])
[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]

)

训练数据(55000, 784),第一维是图片的编号,第二维是图片中像素点的编号。
对10个种类的标签进行了onehot编码,如上所示,[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.] 代表为7

准备好数据以后,接下来就要设计算法了

这里使用了一个叫做softmax regression的算法来训练分类模型。

当我们处理分类任务时,通常需要使用softmax regression模型。即使后面章节中的CNN或者RNN,如果是分类模型,最后一层同样也是softmax regression。
它的工作原理很简单,将可以判定为某类的特征想加,然后将这些特征转化为判定为这一类的概率。
这些特征可以通过一些简单的方法得到,比如对所有像素求一个加权和,而权重是根据数据自动学习、训练出来的。比如某一个像素的灰度值大代表可能是数字n的概率越大。

如下公式:

featurei=∑jWijxj+bi

其中i为第i类,j代表一张图片的第j个像素。bi是bias。

接下来计算所有特征的softmax,简单的说就是计算一个exp函数,然后再进行标准化(让所有类别的输出的概率值和为1)。

softmax(x)=normalize(exp(x))

其中判定为第i类的概率是:

softmax(x)_i=exp(x)∑jexp(xj)



可以用下面一行简洁的表达:

y=softmax(Wx+b)

cross_entropy的定义如下:

Hy′(y)=?∑iy′ilog(yi)

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
import tensorflow as tf

# 创建InteractiveSession,使用这个命令会将这个session注册为默认的session,# 之后的计算也默认跑在这个session里面。# 不同session之间的数据和运算都是相互独立的。sess = tf.InteractiveSession()

# 创建用于输入数据的placeholder,第一个参数是数据类型,第二个参数代表tensor的shape。# None表示不限制条数,784是表示一个784维的向量。x = tf.placeholder(tf.float32, [None, 784])

#接下来要为softmax regression模型中的weight和biases创建Variable对象。#Variable中的数据是持久化的,长期存在并且在每轮迭代中被更新。#这里把weight和bias全部初始化为0,因为模型训练时会自动学习合适的值,所以对这个简单模型来说初始值不太重要。#但是对于复杂CNN RNN或者其他比较深的全连接网络来说,初始化的方法比较重要,甚至至关重要。W = tf.Variable(tf.zeros([784, 10]))b = tf.Variable(tf.zeros([10]))

# 实现公式y = softmax(Wx + b)#tf.nn包含了大量的神经网络组件,softmax是其中之一。#tf.matmul是矩阵乘法函数y = tf.nn.softmax(tf.matmul(x, W) + b)

# 为了训练模型,需要定义一个loss function来描述模型对问题的分类精度。#loss越小,代表模型分类结果和真实值的偏差越小,也就是说模型越准确。#对于多分类问题,通常使用cross-entrpopy作为loss function.#其中y是预测的概率分布,y‘是真是的概率分布。#tf.reduce_mean用来对每个batch数据结果求平均值。y_ = tf.placeholder(tf.float32, [None, 10])cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))

#有了softmax regression和损失函数cross-entropy的定义,只需要再定义一个优化算法就可以开始训练。#我们常见的是随机梯度下降SGD,定义好优化算法后,TensorFlow就可以根据我们定义的整个计算图自动求导,并根据反向传播算法进行训练,在每一轮迭代时更新参数来减少loss。在后台TensorFlow会自动天津爱很多运算操作来实现刚才提到的返现爱你过传播和梯度下降,而给我们提供的是一个封装好的优化器。我们直接调用tf.train.GradientDescentOptimizer,并设置学习速率为0.5,优化目标设定为cross-entropy,得到进行训练的操作train_step。#下一步使用TensorFlow的全局参数初始化器tf.global_variables_initializer,并直接实行run方法。train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)tf.global_variables_initializer().run()

#最后一步,开始迭代执行训练操作train_step,这里每次都随机从训练集中抽取100条样本过程一个mini-batch,并feed给placehodler,然后调用train_step对这些样本进行训练。#使用一小部分数据进行随机梯度下降,这样绝大多数比全量样本训练的收敛速度更快,而且计算量不太大。#只有把数据feed时,并运行run方法时,计算才开始执行。for i in range(1000):    batch_xs, batch_ys = mnist.train.next_batch(100)    train_step.run({x: batch_xs, y_: batch_ys})

#现在完成了训练,需要对模型的准确性进行验证。#tf.argmax是从一个tensor中找最大值的序号#tf.argmax(y, 1)是求各个预测的数字钟概率最大的那一个。#tf.argmax(y_, 1)则是找样本的真是数字类别。#tf.equal是判断预测的数字是否是真正的类别。#tf.cast将correct_prediction输出的bool值转换为float32correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

#最后计算模型的在测试集上的准确率,并打印出来结果。print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels}))
0.9194

总结

从上面的例子,我们可以总结一下整个流程。

  1. 定义算法公式,也就是神经网络forward时的计算
  2. 定义loss,选定优化器,并指定优化器优化loss
  3. 迭代地对数据进行训练
  4. 在测试集或者验证集上对准确率进行评测。

原文地址:https://www.cnblogs.com/LearnFromNow/p/9349631.html

时间: 2024-07-31 00:30:04

TensorFlow实战-TensorFlow第一步-第3章的相关文章

微软Azure云计算开发实战(1):第一步申请注册Azure账号

,这个系列文章来系统介绍Azure的相关开发知识,包括账号申请,部署网站,开发虚拟机服务器,安装SQL数控,Hadoop对接,NoSQL安全,负载均衡等知识. 作为系列的第一课<微软Azure云计算开发实战(1):第一步注册Azure账号>我们先说一下如何申请微软Azure账号, 无论开发人员,还是企业,都想在正式使用之前,体验一下Aure的功能.第一步就是申请微软的Azure账号. 账号的申请比较简单,因为Azure的配置比较高,所以测试账号在国内一直比较抢手,完全免费的测试账号基本也是10

TensorFlow实战-TensorFlow实现卷积神经网络CNN-第5章

第5章-TensorFlow实现卷积神经网络CNN 5.1 卷积神经网络简介 卷积神经网络CNN最初是为了解决图像识别等问题设计的,当然现在的应用已经不限于图像和视频,也可以用于时间序列信号,比如音频信号.文本数据等. 在深度学习出现之前,必须借助SIFT.HoG等算法提取出有效而丰富的特征,再集合SVM等机器学习算法进行图像识别. CNN作为一个深度学习架构被提出来最初的诉求是降低对图像数据预处理的要求,以及避免复杂的特征工程.CNN最大的特点是在于卷积的权值共享结构,可以大幅减少神经网络的参

TensorFlow实战-TensorFlow和其他深度学习框架的对比-第2章

2 TensorFlow和其他深度学习框架的对比 18 2.1 主流深度学习框架对比 18 2.2 各深度学习框架简介 20 TensorFlow TensorFlow是相对高阶的机器学习库,用户?方便地用它设计神经网络结构,而不必为了追求高效率的实现亲自写C++或者CUDA代码. TensorFlow另外一个特点是灵活的移植性.TensorFlow还提供了TensorBoard,TensorBoard是TensorFlow的一组web应用,用来监控TensorFlow的运行过程,或可视化计算图

[Tensorflow实战Google深度学习框架

本系列为Tensorflow实战Google深度学习框架知识笔记,仅为博主看书过程中觉得较为重要的知识点,简单摘要下来,内容较为零散,请见谅. 2017-11-06 [第五章] MNIST数字识别问题 1. MNIST数据处理 为了方便使用,Tensorflow提供了一个类来处理MNIST数据,这个类会自动下载并转化MNIST数据的格式,将数据从原始的数据包中解析成训练和测试神经网络时使用的格式. 2. 神经网络模型训练及不同模型结果对比 为了评测神经网络模型在不同参数下的效果,一般会从训练数据

《Tensorflow实战Google深度学习框架》PDF一套四本+源代码_高清_完整

TensorFlow实战 热门Tensorflow实战书籍PDF高清版一套共四本+源代码,包含<Tensorflow实战>.<Tensorflow:实战Google深度学习框架(完整版)>.<TensorFlow:实战Google深度学习框架(第2版)>与<TensorFlow技术解析与实战>,不能错过的学习Tensorflow书籍. TensorFlow是谷歌2015年开源的主流深度学习框架,目前已在谷歌.优步(Uber).京东.小米等科技公司广泛应用.&

TensorFlow实战之CNN实现对鸡蛋的分类

本文标签: TensorFlow TensorFlow实战之CNN 3.1问题分析 为了评估N个鸡蛋中是否有圈养鸡蛋,我们利用卷积神经网络(CNN)让计算机学习圈养鸡蛋和土鸡蛋图片的特征,然后根据鸡蛋的图片将其分类.通过对图片的预处理,将其转化为32*32相同大小的图片.在神经网络加载数据之后,会将其转化为32*32*3的数组.然后通过卷积和池化等一系列操作提取出图片的特征.以达到对鸡蛋进行分类的目的.我们主要用Python语言在TensorFlow中构建卷积神经网络(CNN),让CNN学习圈养

TensorFlow实战之实现AlexNet经典卷积神经网络

本文已同步本人另外一个博客(http://blog.csdn.net/qq_37608890/article/details/79371347) 本文根据最近学习TensorFlow书籍网络文章的情况,特将一些学习心得做了总结,详情如下.如有不当之处,请各位大拿多多指点,在此谢过. 一.AlexNet模型及其基本原理阐述 1.关于AlexNet 2012年,AlexKrizhevsky提出了深度卷积神经网络模型AlexNet,可以看作LeNet的一种更深更宽的版本.该模型包含了6亿3000万个连

学习《TensorFlow实战Google深度学习框架 (第2版) 》中文PDF和代码

TensorFlow是谷歌2015年开源的主流深度学习框架,目前已得到广泛应用.<TensorFlow:实战Google深度学习框架(第2版)>为TensorFlow入门参考书,帮助快速.有效的方式上手TensorFlow和深度学习.书中省略了烦琐的数学模型推导,从实际应用问题出发,通过具体的TensorFlow示例介绍如何使用深度学习解决实际问题.书中包含深度学习的入门知识和大量实践经验,是走进这个前沿.热门的人工智能领域的优选参考书. 第2版将书中所有示例代码从TensorFlow 0.9

TensorFlow实战之Softmax Regression识别手写数字

     关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2018年02月21日 23:10:04所撰写内容(http://blog.csdn.net/qq_37608890/article/details/79343860).        本文根据最近学习TensorFlow书籍网络文章的情况,特将一些学习心得做了总结,详情如下.如有不当之处,请各位大拿多多指点,在此谢过. 一.相关概念 1.MNIST MNIST(Mixed