TensorFlow 教程 - 深入MNIST完整代码

Tensorflow- MNIST机器学习入门 tensorflow中文社区对官方文档进行了完整翻译。鉴于官方更新不少内容,而现有的翻译基本上都已过时。故本人对更新后文档进行翻译工作,纰漏之处请大家指正。(如需了解其他方面知识,可参阅以下这个教程的目标读者是对机器学习和TensorFlow都不太了解的新手。如果你已经了解MNIST和softmax回归(softmax regression)的相关知识,你可以直接阅读这个。在学习教程之前,请确保已经安装。当我们开始学习编程的时候,第一件事往往是学习打印"Hello World"。 阅读详情

这个是TensorFlow官方教程《深入MNIST》中的完整代码。完整教程在这里。
代码注释是本人结合教程和自己的理解加的,如有错误请指正。

# -*- coding: utf-8 -*- 

import tensorflow as tf

#导入input_data用于自动下载和安装MNIST数据集
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

#创建一个交互式Session
sess = tf.InteractiveSession()

#创建两个占位符,x为输入网络的图像,y_为输入网络的图像类别
x = tf.placeholder("float", shape=[None, 784])
y_ = tf.placeholder("float", shape=[None, 10])

#权重初始化函数
def weight_variable(shape):
    #输出服从截尾正态分布的随机值
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial)

#偏置初始化函数
def bias_variable(shape):
    initial = tf.constant(0.1, shape=shape)
    return tf.Variable(initial)

#创建卷积op
#x 是一个4维张量,shape为[batch,height,width,channels]
#卷积核移动步长为1。填充类型为SAME,可以不丢弃任何像素点
def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides=[1,1,1,1], padding="SAME")

#创建池化op
#采用最大池化,也就是取窗口中的最大值作为结果
#x 是一个4维张量,shape为[batch,height,width,channels]
#ksize表示pool窗口大小为2x2,也就是高2,宽2
#strides,表示在height和width维度上的步长都为2
def max_pool_2x2(x):
    return tf.nn.max_pool(x, ksize=[1,2,2,1],
                          strides=[1,2,2,1], padding="SAME")


#第1层,卷积层
#初始化W为[5,5,1,32]的张量,表示卷积核大小为5*5,第一层网络的输入和输出神经元个数分别为1和32
W_conv1 = weight_variable([5,5,1,32])
#初始化b为[32],即输出大小
b_conv1 = bias_variable([32])

#把输入x(二维张量,shape为[batch, 784])变成4d的x_image,x_image的shape应该是[batch,28,28,1]
#-1表示自动推测这个维度的size
x_image = tf.reshape(x, [-1,28,28,1])

#把x_image和权重进行卷积,加上偏置项,然后应用ReLU激活函数,最后进行max_pooling
#h_pool1的输出即为第一层网络输出,shape为[batch,14,14,1]
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)

#第2层,卷积层
#卷积核大小依然是5*5,这层的输入和输出神经元个数为32和64
W_conv2 = weight_variable([5,5,32,64])
b_conv2 = weight_variable([64])

#h_pool2即为第二层网络输出,shape为[batch,7,7,1]
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)

#第3层, 全连接层
#这层是拥有1024个神经元的全连接层
#W的第1维size为7*7*64,7*7是h_pool2输出的size,64是第2层输出神经元个数
W_fc1 = weight_variable([7*7*64, 1024])
b_fc1 = bias_variable([1024])

#计算前需要把第2层的输出reshape成[batch, 7*7*64]的张量
h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)

#Dropout层
#为了减少过拟合,在输出层前加入dropout
keep_prob = tf.placeholder("float")
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)

#输出层
#最后,添加一个softmax层
#可以理解为另一个全连接层,只不过输出时使用softmax将网络输出值转换成了概率
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])

y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)

#预测值和真实值之间的交叉墒
cross_entropy = -tf.reduce_sum(y_ * tf.log(y_conv))

#train op, 使用ADAM优化器来做梯度下降。学习率为0.0001
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)

#评估模型,tf.argmax能给出某个tensor对象在某一维上数据最大值的索引。
#因为标签是由0,1组成了one-hot vector,返回的索引就是数值为1的位置
correct_predict = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))

#计算正确预测项的比例,因为tf.equal返回的是布尔值,
#使用tf.cast把布尔值转换成浮点数,然后用tf.reduce_mean求平均值
accuracy = tf.reduce_mean(tf.cast(correct_predict, "float"))

#初始化变量
sess.run(tf.initialize_all_variables())

#开始训练模型,循环20000次,每次随机从训练集中抓取50幅图像
for i in range(20000):
    batch = mnist.train.next_batch(50)
    if i%100 == 0:
        #每100次输出一次日志
        train_accuracy = accuracy.eval(feed_dict={
            x:batch[0], y_:batch[1], keep_prob:1.0})
        print "step %d, training accuracy %g" % (i, train_accuracy)

    train_step.run(feed_dict={x:batch[0], y_:batch[1], keep_prob:0.5})

print "test accuracy %g" % accuracy.eval(feed_dict={
x:mnist.test.images, y_:mnist.test.labels, keep_prob:1.0})

最终测试集上的准确率大概是99.2%

tensorflow MNIST autoencoder完整代码+tsne降维可视化 #来源于莫烦tensorflow视频中学习# -*- coding: utf-8 -*-"""autoencoder mnist can runningautoencoder自定义实现,未直接调用函数,显示autoencoder结果与原来真实输入数据的对比图"""#特色:可视化 通过encoder最后一层神经元数目为2,将数据降维到2维,进行画点plt.scatter可视化#划分的不咋开#impo... 阅读详情

相关推荐

TensorFlow MNIST 测试

TensorFlow MNIST 测试昨天在安装好了TensorFlow后,迫不及待来了一次MNIST测试,结果各种爆炸,一开始上不了官网,科学上网以后也过不去,后来找了墙内的下载,结果跑起来还是有错误,大概是数据集不完整之类差错。当时用VS调试,调试也不友好,一出错就中断弹中断。今天用PyCharm建立好,建好项目重新跑了一次,中间还出现一次关于CUDA设备路径错误(采用了*nux路径),升级到最

新的故事 旧的回忆 7039

手写数字识别Python+TensorFlow+CNN卷积神经网络【完整代码系统】

手写数字识别系统,使用Python语言,基于TensorFlow搭建CNN卷积神经网络算法对数据集进行训练,最后得到模型,并基于FLask搭建网页端界面,基于Pyqt5搭建桌面端可视化界面。

子午的博客 2197

基于 Tensorflow 构建卷机网络(CNN)进行图像分类的教程(附完整版代码 可作为毕设)

基于 Tensorflow 构建卷机网络(CNN)进行图像分类的教程(附完整版代码 可作为毕设)

机器学习深度学习业余选手 756

MNIST前向传播(全连接)代码(tensorflow2.6)

训练集大小[60000,28*28]

weixin_42343912的博客 303

TensorFlow入门实战:基于MNIST的手写数字识别完整教程

Sequential模型允许用户按照前向传播顺序依次添加网络层,每层的输出自动成为下一层的输入,适合初学者快速实现标准CNN架构。layers.Flatten(), # 展平为一维向量layers.Dense(64, activation='relu'), # 全连接层layers.Dropout(0.5), # 防止过拟合layers.Dense(10, activation='softmax') # 输出层])代码逻辑解析:第一层必须指定,后续层自动推断输入维度。

weixin_33597080的博客 1220

UWB定位进阶:如何利用DW1000的CIR数据做NLOS信号识别?

本文深入探讨了如何利用DW1000芯片的信道脉冲响应(CIR)数据进行非视距(NLOS)信号识别,以提升UWB定位精度。通过分析CIR数据的核心价值、预处理方法、特征提取技术以及机器学习模型构建,为研究人员和工程师提供了实用的解决方案,帮助克服室内定位中的NLOS挑战。

weixin_28729205的博客 474

TensorFlow学习笔记——MNIST手写数字识别的CNN代码实现(代码注释详细,方便小清新入门)

1. 全连接神经网络 vs. 卷积神经网络 1.1 全连接神经网络 先回顾多层神经网络 多层神经网络包括一个输入层和一个输出层,中间有多个隐藏层。每层有若干个神经元,相邻两层之间的后一层的每个神经元都分别与前一层的所有神经元连接。在识别问题中,输入层(即网络的第一层)代表特征向量,其每一个神经元代表一个特征值。 多层神经网络在图像识别问题中,输入层的每一个神经元可能代表一个像素的灰度值。但这种神经网络用于图像识别有几个问题,一是没有考虑图像的空间结构,识别性能受到限制;二是每相邻两层的神经元都是全相连,参

weixin_40730615的博客 3163

Trae+Playwright MCP自动化测试全流程指南:从环境搭建到智能体运行

本文提供了一份详细的Trae与Playwright MCP集成指南,涵盖从Node.js、Python环境搭建到智能体创建的全流程。通过结合MCP协议,AI智能体能够理解任务并驱动Playwright执行复杂的浏览器自动化操作,实现从网页数据抓取到端到端测试的智能工作流。

banana的博客 531

基于tensorflow实现CNN对mnist手写数字分类(附完整代码)

基于tensorflow实现CNN对mnist手写数字分类(附完整代码)

石头的博客 927

手把手拆解:储能电站如何实现‘孤岛运行’与‘黑启动’?从SVPWM控制到无缝并网

本文深入解析储能电站的孤岛运行与黑启动技术,从SVPWM控制策略到电网重构实战。通过详细的三环控制架构和黑启动五阶段技术路线,展示储能电站在电网故障时如何快速切换为独立电压源并实现电网重建。文章还探讨了虚拟惯量补偿、多站协同控制等前沿技术,为电力系统应急恢复提供关键解决方案。

weixin_30509393的博客 305

深入解析Mifare Classic Crypto1认证流程与密钥交换机制

本文深入解析Mifare Classic Crypto1认证流程与密钥交换机制,详细介绍了Crypto1加密算法的工作原理、认证初始化阶段、随机数交换与密钥流生成过程,以及双向验证步骤。文章还分析了Mifare Classic的安全漏洞,包括随机数生成缺陷和密钥流恢复攻击,并提供了Proxmark3实战演示和防护建议。

c6d7e8f9g的博客 898

tensorflow入门数据集:mnist详解

python处理二进制 python的struct模块可以将整型(或者其它类型)转化为byte数组.看下面的代码. # coding: utf-8 from struct import * # 包装成大端的byte数组 print(pack('>hhi', 1, 2, 3)) # b'\x00\x01\x00\x02\x00\x00\x00\x03' pack(’>hhl’, 1,...

智者之家 5352

BERTopic模型入门教程(附代码+参数调节)

BERTopic 是一种用于从文本数据中提取主题模型的新型方法。通过结合 BERT嵌入和传统的主题模型来生成语义丰富的主题。传统的主题模型(如LDA)主要依赖于词频矩阵,而 BERTopic 通过预训练语言模型生成高维语义嵌入来捕捉词语间的复杂关系,因此可以更好地处理上下文信息。BERTopic模型可以看作是创建其主题表示的一系列步骤。核心原理如下:就本质而言,BERTopic就是一个拼装框架,可以把每部分都替换成其他模型,只要完成任务即可。

m0_52069102的博客 1万+

TensorFlow 教程 - MNIST手写数字识别完整代码

当你安装了tensorflow后,tensorflow自带的教程演示了如何使用卷积神经网络来识别手写数字。代码路径为tensorflow-master\tensorflow\examples\tutorials\mnist\mnist_deep.py。 为了快速测试该程序,我提前将需要的mnist手写数字库下载到了工程目录(我在pycharm中新建了工程,并把mnist_deep.py中的代码拷贝...

帅性而为1号的博客 4171

STM32 SPI驱动TFT LCD实战:时序配置与硬件协同

SPI(串行外设接口)是一种高速、全双工、同步串行通信协议,广泛应用于微控制器与显示模组等外设的数据交互。其核心依赖时钟极性(CPOL)与时钟相位(CPHA)组合定义的四种工作模式,直接影响数据采样可靠性;而片选(NSS)与MOSI/SCLK等信号的硬件映射,则决定了多设备共总线下的通信稳定性。在TFT LCD驱动场景中,SPI凭借低开销、高吞吐优势成为主流选择,尤其适配ST7789、ILI9341等集成显示控制器的模块。本文聚焦STM32L系列MCU通过SPI2驱动1.3寸LCD的完整链路,涵盖Mode

php55的博客 1209

Z-Image Turbo随机性增强插件的下载教程及使用方法 z-image生成图像太相似怎么办 Z-Image Turbo 整合包下载

Z-Image Turbo 是出了名的“seed 不敏感”,非常难做多样化图像创作。ComfyUi-ConditioningNoiseInjection 插件通过在conditioning(提示词编码)阶段加入可控噪声,成功解决了 Turbo 随机性不足的问题。它不仅能让 Turbo 产生更丰富的构图差异,还能保持主题稳定,是目前我测试过最有效的 Turbo 随机性增强工具。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1976

TensorFlow 教程 - MNIST机器学习入门完整代码

这个是TensorFlow官方文档中“MNIST机器学习入门”这部分的完整代码,并加入了部分注释。 原教程中详细地讲解了一下如何使用TensorFlow做一个最简单的模型来对MNIST数据集进行训练和预测。原文档地址在这里import tensorflow as tf#导入input_data用与自动下载和安装MNIST数据集 from tensorflow.examples.tutorials.

云笔记,记录工作学习中遇到的问题,希望对你有帮助 1万+

GitLab CI/CD .gitlab-ci.yml 关键词(十一):发布版本 release

本篇文章介绍使用GitLab CI/CD 发布一个版本,对外发布。并填写一些发布的信息。

知无涯 4719

tensorflow教程中的mnist数据下载脚本

安利一篇我翻译的国外大牛的神经网络入门文章 阅读tensorflow教程过程中,最初的例子使用mnist,官方提供的下载脚本链接已经失效,从网上一直没有找到正确的input_data.py的脚本,查看官方教程,发现这个脚本在这里但是下载下来之后发现,运行过程会报错,因为通过pip安装的tensorflow包里是不包含这部分代码的,同时这个文件依赖也在pip安装的tensor版本里也是没有的。

Gary,Done的专栏 6664

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

tensorflow常用学习链接

常见链接如下 静觅的TensorFlow MNIST初级学习 代码可用 https://cuiqingcai.com/4898.html  

u010173306的专栏 220

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

基于tensorflow的MNIST数字识别

一、MNIST数据集介绍 MNIST是一个非常有名的手写体数字识别数据集,在很多资料中,这个数据集都会作为深度学习的入门样例。下面大致介绍这个数据集的基本情况,并介绍tensorflow对MNIST数据集做的封装。tensorflow的封装让使用MNIST数据集变得更加方便。MNIST数据集是NIST数据集的一个子集,它包含了60000张图片作为训练数据,10000张图片作为测试数据。在MNIS...

weixin_36670529的博客 2162

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

TensorFlow官方教程学习笔记(二)——MNIST入门

TensorFlow官方教程学习笔记(二)——MNIST入门

小时候贼聪明 1万+

Tensorflow-MNIST代码解析

MNIST是深度学习的入门demo,由6万张训练图片和1万张测试图片构成(数据集下载地址:https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/),每张图片都是28*28大小,而且都是黑白两色,这些图片是采集的不同的人手写从0到9的数字。TensorFlow将这个数据集和相关操作封装到了库中,下面为训练及效果评估代码。 import s...

haiziccc的专栏 852

TensorFlow-Course 实战:基于全卷积 CNN 的 MNIST 手写数字分类完整教程

本篇技术指南以 TensorFlow-Course 仓库中的 [卷积神经网络教程](https://link.gitcode.com/i/e1b643f600e0a9fea4aaa0104efbdb8b) 为核心,系统讲解如何用 TensorFlow 搭建一个完全卷积(fully-convolutional)的 CNN 图像分类器,在 MNIST 手写数字数据集上完成训练、评估与 TensorBo

gitblog_00012的博客 1102

TensorFlow学习 Mnist示例程序完整代码+注释解析

以下是通过阅读官方文档整理的Mnist示例程序,更详细的代码解释参见官网: 官方英文:http://www.tensorflow.org/ 中文翻译:http://wiki.jikexueyuan.com/project/tensorflow-zh/ 目录结构: 将MNIST数据放在当前文件夹下,文件夹名命名为MNIST_data test.py: from tensorflow....

whywww的博客 7035
上一篇: TensorFlow 教程 - MNIST机器学习入门完整代码
下一篇: 批量生成ethereum私钥脚本
Toormi
博客等级 码龄11年 563粉丝 92原创
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值