Tensorflow2.0学习笔记(一)——MNIST入门

文章目录

  • Tensorflow2.0学习笔记(一)——MNIST入门
  • 前言
  • 一、MNIST是什么?
  • 二、实现步骤及代码
    • 1.引入库
    • 2.下载MNIST数据集
    • 3.构建Softmax回归模型
    • 4.启动模型
    • 5.训练和评估模型
  • 三、程序运行结果
  • 总结

前言

本次学习用到了储备知识中的Softmax回归模型


一、MNIST是什么?

MNIST是一个入门级的计算机视觉数据集,它包含各种手写的数字图片,学习它的使用就相当于编程入门学习中的打印 “Hello,World!“ 。

二、实现步骤及代码

1.引入库

代码如下:

#屏蔽警告
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
#tensorflow2.0无法用 import tensorflow as tf 导入库文件,所以使用下面的代码
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

由于我电脑的原因,每次运行都会警告需要升级到最新的tensorflow,所以我用上面的命令屏蔽掉了警告,对程序运行完全没有影响。

2.下载MNIST数据集

代码如下:

#加载MNIST数据
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets ("MNIST_data/",one_hot=True)

3.构建Softmax回归模型

代码如下:

x = tf.placeholder(tf.float32, [None, 784])            #构建占位符,代表输入的图像,None表示样本的数量可以是任意的
W = tf.Variable(tf.zeros([784,10]))                    #构建一个变量,代表训练目标W,初始化为0
b = tf.Variable(tf.zeros([10]))                        #构建一个变量,代表训练目标b,初始化为0
y = tf.nn.softmax(tf.matmul(x,W) + b)                  #构建了一个softmax的模型:y = softmax(Wx + b),y指样本标签的预测值
y_ = tf.placeholder("float", [None,10])                #构建占位符,代表样本标签的真实值
cross_entropy = -tf.reduce_sum(y_*tf.log(y))           #交叉熵代价函数
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)          #使用梯度下降法(0.01的学习率)来最小化这个交叉熵代价函数
init = tf.initialize_all_variables()

这里放出上篇笔记的图片

可以看出softmax模型的计算方法类似于线性代数的行列式的计算——Y=x*W+b,需要保证x的列与W的行数相同,在MNIST中就是保证图片的维度相同,即:x和W想乘后要与b的维度相同。

4.启动模型

代码如下:

#构建Session,在Session中启动模型
sess = tf.Session()                                    #构建会话
sess.run(init)                                         #初始化所有变量
......
......
sess.close()

Tensorflow依赖于一个高效的C++后端来进行计算。与后端的这个连接叫做session。一般而言,使用TensorFlow程序的流程是先创建一个图,然后在session中启动它。

TensorFlow在这里实际上所做的是,它会在后台给描述你的计算的那张图里面增加一系列新的计算操作单元用于实现反向传播算法和梯度下降算法。然后,它返回给你的只是一个单一的操作,当运行这个操作时,它用梯度下降算法训练你的模型,微调你的变量,不断减少成本。

5.训练和评估模型

代码如下:

#训练模型1000次
for i in range(1000):                                  #迭代次数为1000batch_xs, batch_ys = mnist.train.next_batch(100)                   #使用minibatch的训练数据,一个batch的大小为100sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})        #用训练数据替代占位符来执行训练#评估模型correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))     #tf.argmax()返回的是某一维度上其数据最大所在的索引值,在这里即代表预测值和真值accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))    #用平均值来统计测试准确率print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))    #打印测试信息

tf.argmax是非常重要的函数,后面会单独提到。

三、程序运行结果


正确率在91%左右,预测结果不太好,有很大改进空间。


总结

涉及指令整理

Placeholder:占位符,相当于函数自变量,用作输入
Variable:可修改的张量。
tf.matmul(a,b):矩阵a乘以矩阵b得到 矩阵a*b
tf.log():求对数
tf.reduce_sum:求和
tf.reduce_mean:用于计算张量tensor沿着指定数轴(图像某一维度)的平均值
tf.cast(a,b):数据类型转换函数,a为待转换的数据,b为目标数据类型。
tf.equal(a,b):判断a和b是否相等,逐个元素判断,每次判断对应一次true或false
tf.argmax(a):当a是一位矩阵时,输出是这个数组中最大参数的索引;
tf.argmax(a):当a是多维矩阵时,分类讨论:tf.argmax(a,0),0表示y方向,具体解释如下:
tf.argmax(a,1),1表示x方向

import tensorflow as tf
b = [[3,8,9],[2,15,0]]
a = tf.argmax(b,1)
with tf.Session() as sess:print(sess.run(a))

即 3 2
8 15
9 0
3>2,输出3的索引0,8<15,输出15的索引1,9>0,输出9的索引0
结果是[0,1,0],有几列就输出几个元素。
tf.argmax(a,1),1表示x方向

import tensorflow as tf
b = [[3,8,9],[2,15,0]]
a = tf.argmax(b,1)
with tf.Session() as sess:print(sess.run(a))

[3,8,9]最大的是9,索引为2;[2,15,0]最大的是15,索引1。
结果是[2,1]。有几行就输出几个元素。

Tensorflow2.0学习笔记(一)相关推荐

  1. TensorFlow2.0 学习笔记(三):卷积神经网络(CNN)

    欢迎关注WX公众号:[程序员管小亮] 专栏--TensorFlow学习笔记 文章目录 欢迎关注WX公众号:[程序员管小亮] 专栏--TensorFlow学习笔记 一.神经网络的基本单位:神经元 二.卷 ...

  2. Tensorflow2.0学习笔记(二)

    Tensorflow2.0学习笔记(二)--Keras练习 文章目录 Tensorflow2.0学习笔记(二)--Keras练习 前言 二.使用步骤 1.实现步骤及代码 2.下载 Fashion MN ...

  3. Tensorflow2.0学习笔记(一)北大曹健老师教学视频1-4讲

    Tensorflow2.0学习笔记(一)北大曹健老师教学视频1-4讲 返回目录 这个笔记现在是主要根据北京大学曹健老师的视频写的,这个视频超级棒,非常推荐. 第一讲 常用函数的使用(包含了很多琐碎的函 ...

  4. Tensorflow2.0学习笔记(二)北大曹健老师教学视频第五讲

    Tensorflow2.0学习笔记(二)北大曹健老师教学视频第五讲 返回目录 理论部分主要写点以前看吴恩达视频没有的或者不太熟悉的了. 5.1卷积计算过程 实际项目中的照片多是高分辨率彩色图,但待优化 ...

  5. tensorflow2.0 学习笔记:一、神经网络计算

    mooc课程Tensorflow2.0 笔记 人工智能三学派 行为主义:基于控制论,构建感知-动作控制系统(自适应控制系统) 符号主义:基于算数逻辑表达式,求解问题时先把问题描述为表达式,再求解表达式 ...

  6. TensorFlow2.0学习笔记2-tf2.0两种方式搭建神经网络

    目录 一,TensorFlow2.0搭建神经网络八股 1)import  [引入相关模块] 2)train,test  [告知喂入网络的训练集测试集以及相应的标签] 3)model=tf.keras. ...

  7. tensorflow2.0学习笔记(五)

    Keras高层API 基本就是4步: Matrics update_state result().numpy() reset_states(就是清除缓存) tensorflow2.0代码很简单,就MN ...

  8. TensorFlow2.0学习笔记-3.模型训练

    3.模型训练 3.1.Keras版本模型训练 • 构建模型(顺序模型.函数式模型.子类模型) • 模型训练: model.fit() • 模型验证: model.evaluate() • 模型预测:  ...

  9. Tensorflow2.0学习笔记------Cifar10

    承接上文的MNIST的练手,本文再来练习卷积神经网络实现cifar10的分类,环境还是在colab是安装的tensorflow.不会用colab的可以看我之前博客https://blog.csdn.n ...

最新文章

  1. Python中相见恨晚的技巧(记得收藏)
  2. 对tmemorystream的一些改进_delphi教程
  3. 服务器站点解密出错,修改域超级管理员密码后站点复制出错。
  4. python problem
  5. C#委托之个人理解(转)
  6. java voip 的sip服务器搭建_用ASTERISK搭建自己的免费VOIP服务器
  7. ANSYSworkbench中skewness解释
  8. 开发一款游戏需要什么技术
  9. warmup与余弦退火学习率
  10. 大法将致:将Windows Server 2016打造成个人办公系统,WIN2016打造成超级WIN10,WIN2016优化设置
  11. 误差反向传播的C++实现
  12. InnoDB之redo log
  13. REVIT建模步骤中:绘制形状不能拾取两条参照平面的交点解决方法
  14. 极性与非极性电容并联的作用
  15. apk 路由器劫持_一种在路由器上防止网页劫持的方法与流程
  16. C语言指针中 *p 和 p 的区别
  17. c语言结构体编辑学生成绩管理,【C语言】结构体的应用以及学生成绩管理系统的设计...
  18. 闲鱼基于 Flutter 的移动端跨平台应用实践
  19. 三维匹配_三维GIS数据融合的基本方法与进展
  20. 23种设计模式----模板方法模式----行为模式

热门文章

  1. 动网论坛系统已死 所谓的改革无非是徒劳
  2. sip re-invite 详解
  3. linux内核分析(转自某位大哥网上的笔记)
  4. html支付宝注册网页,用html设置支付宝页面
  5. Dragon Balls
  6. python爬虫——12306查询车次
  7. 关于日语输入法及其日英切换
  8. 力扣LeetCode刷题心得之Python 找到最接近 0 的数字
  9. 为什么下水道的盖子是圆的? (微软公司考员工的题目)
  10. 肝通宵写了三万字把SQL数据库的所有命令,函数,运算符讲得明明白白讲解,内容实在丰富,建议收藏+三连好评