数字识别问题

文章目录

  • 6.1 MNIST数据处理
  • 6.2.1 训练数据
  • 6.2.2 变量管理
  • 6.3.1 保存模型
  • 6.3.1 加载计算图
  • 6.3.1 加载模型
  • 6.3.2 导出元图

6.1 MNIST数据处理

在直接在第6章的目录下面创建文件
在这里插入图片描述
compat.v1.是tensorflow2.x的语法,全部删掉
在这里插入图片描述
删除compat.v1.后的代码

# -*- coding: utf-8 -*-
"""
Created on Sat May  7 21:29:18 2022

@author: HRH
"""


from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
tf.disable_eager_execution()
file = "./MNIST"
mnist = input_data.read_data_sets(file, one_hot=True)
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.matmul(x, W) + b
Y = tf.placeholder(tf.float32, [None, 10])
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(Y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=Y, logits=y))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
for i in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    sess.run(train_step, feed_dict={x: batch_xs, Y: batch_ys})
    if i%100 ==0:
       print(sess.run(accuracy, feed_dict={x: mnist.test.images, Y:    
mnist.test.labels}))  
print ("优化完成")
print ("模型的准确率为",sess.run(accuracy, feed_dict = {x:mnist.test.images, Y: mnist.test.labels}))

运行结果:
在这里插入图片描述

6.2.1 训练数据

需要运行这三个程序,运行顺序如后标所示
在这里插入图片描述

第一个程序:
在这里插入图片描述
mnist_inference.py 文件代码

import tensorflow as tf
tf.disable_eager_execution()
INPUT_NODE = 784
OUTPUT_NODE = 10
LAYER1_NODE = 500

def get_weight_variable(shape, regularizer):
    weights = tf.get_variable("weights", shape,initializer=tf.truncated_normal_initializer(stddev=0.1))
    if regularizer != None:
        tf.add_to_collection('losses', regularizer(weights))
    return weights
def inference(input_tensor, regularizer):
    with tf.variable_scope('layer1'):
        weights = get_weight_variable([INPUT_NODE, LAYER1_NODE], regularizer)
        biases = tf.get_variable("biases", [LAYER1_NODE],initializer=tf.constant_initializer(0.0))
        layer1 = tf.nn.relu(tf.matmul(input_tensor, weights)+biases)
    with tf.variable_scope('layer2'):
        weights = get_weight_variable([LAYER1_NODE, OUTPUT_NODE], regularizer)
        biases = tf.get_variable("biases", [OUTPUT_NODE],initializer=tf.constant_initializer(0.0))
        layer2 = tf.matmul(layer1, weights) + biases
    return layer2

第二个程序:
在这里插入图片描述
在这里插入图片描述
300次数据训练完成:
在这里插入图片描述
mnist_train.py 文件代码

import os
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import mnist_inference
tf.disable_eager_execution()
tf.reset_default_graph()
BATCH_SIZE = 100
LEARNING_RATE_BASE = 0.8
LEARNING_RATE_DECAY = 0.99
REGULARIZATION_RATE = 0.0001
TRAINING_STEPS = 300
MOVING_AVERAGE_DECAY = 0.99
MODEL_SAVE_PATH = "./"
MODEL_NAME = "model.ckpt"
def train(mnist):
    print("开始训练!")
    # 定义输入输出placeholder。
    x = tf.placeholder(tf.float32, [None, mnist_inference.INPUT_NODE],name='x-input')
    y_ = tf.placeholder(tf.float32, [None, mnist_inference.OUTPUT_NODE],name='y-input')
#    regularizer = tf.contrib.layers.l2_regularizer(REGULARIZATION_RATE)
    regularizer = tf.keras.regularizers.l2(REGULARIZATION_RATE)
    # 直接使用mnist_inference.py中定义的前向传播过程
    y = mnist_inference.inference(x, regularizer)
    global_step = tf.Variable(0, trainable=False)
    # 定义损失函数、学习率、滑动平均操作以及训练过程
    variable_averages = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, global_step)
    variable_averages_op = variable_averages.apply(tf.trainable_variables())
    # 交叉熵与softmax函数一起使用
    cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1))
    cross_entropy_mean = tf.reduce_mean(cross_entropy)
    loss = cross_entropy_mean + tf.add_n(tf.get_collection('losses'))
    learning_rate = tf.train.exponential_decay(LEARNING_RATE_BASE,global_step,mnist.train.num_examples / BATCH_SIZE,LEARNING_RATE_DECAY)
    train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss, global_step=global_step)
    with tf.control_dependencies([train_step, variable_averages_op]):
        train_op = tf.no_op(name='train')
    saver = tf.train.Saver()
    with tf.Session() as sess:
        print("变量初始化!")
        tf.global_variables_initializer().run()
        for i in range(TRAINING_STEPS):
            xs, ys = mnist.train.next_batch(BATCH_SIZE)
            _, loss_value, step = sess.run([train_op, loss, global_step],feed_dict={x: xs, y_: ys})
            # 每1000轮保存一次模型
            #if i+1 % 10 == 0:
            print("After %d training step(s), loss on training ""batch is %g." % (step, loss_value))
            saver.save(sess, os.path.join(MODEL_SAVE_PATH, MODEL_NAME),global_step=global_step)

def main(argv=None):
    print("进入主函数!")
    mnist = input_data.read_data_sets(r".\mnist", one_hot=True)
    print("准备训练!")
    train(mnist)

if __name__ == "__main__":
    tf.app.run()

第三个程序:
在这里插入图片描述
mnist_eval.py文件

import time
import tensorflow.compat.v1 as tf
from tensorflow.examples.tutorials.mnist import input_data
import mnist_inference
import mnist_train
tf.disable_eager_execution()
tf.reset_default_graph()
EVAL_INTERVAL_SECS = 10
def evaluate(mnist):
    with tf.Graph().as_default() as g:
        #定义输入与输出的格式
        x = tf.placeholder(tf.float32, [None, mnist_inference.INPUT_NODE], name='x-input')
        y_ = tf.placeholder(tf.float32, [None, mnist_inference.OUTPUT_NODE], name='y-input')
        validate_feed = {x: mnist.validation.images, y_: mnist.validation.labels}
	       #直接调用封装好的函数来计算前向传播的结果
        y = mnist_inference.inference(x, None)
	 	  #计算正确率
        correcgt_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
        accuracy = tf.reduce_mean(tf.cast(correcgt_prediction, tf.float32))
	       #通过变量重命名的方式加载模型
        variable_averages = tf.train.ExponentialMovingAverage(0.99)
        variable_to_restore = variable_averages.variables_to_restore()
        saver = tf.train.Saver(variable_to_restore)
        #每隔10秒调用一次计算正确率的过程以检测训练过程中正确率的变化
        while True:
            with tf.Session() as sess:
                ckpt = tf.train.get_checkpoint_state(r"./")
                if ckpt and ckpt.model_checkpoint_path:
                    #load the model
                    saver.restore(sess, ckpt.model_checkpoint_path)
                    global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]
                    accuracy_score = sess.run(accuracy, feed_dict=validate_feed)
                    print("After %s training steps, validation accuracy = %g" % (global_step, accuracy_score))
                    return
                else:
                    print('No checkpoint file found')
                    return
            time.sleep(EVAL_INTERVAL_SECS)
def main(argv=None):
    mnist = input_data.read_data_sets(r".\mnist", one_hot=True)
    evaluate(mnist)
if __name__ == '__main__':
    tf.app.run()

训练结果:
在这里插入图片描述

6.2.2 变量管理

在这里插入图片描述
程序报错:
在这里插入图片描述
报错解决:
在这里插入图片描述
运行结果:
在这里插入图片描述

import tensorflow as tf
tf.disable_v2_behavior()
tf.reset_default_graph()
# 在名字为foo的命名空间内创建名字为v的变量
with tf.variable_scope("foo"):
    v = tf.get_variable("v", [1], initializer=tf.constant_initializer(1.0))
'''
# 因为命名空间foo内已经存在变量v,再次创建则报错
with tf.variable_scope("foo"):
    v = tf.get_variable("v", [1])
# ValueError: Variable foo/v already exists, disallowed.
# Did you mean to set reuse=True in VarScope?
'''
# 将参数reuse参数设置为True,则tf.get_variable可直接获取已声明的变量
with tf.variable_scope("foo", reuse=True):
    v1 = tf.get_variable("v", [1])
    print(v == v1) # True
'''
# 当reuse=True时,tf.get_variable只能获取指定命名空间内的已创建的变量
with tf.variable_scope("bar", reuse=True):
    v2 = tf.get_variable("v", [1])
# ValueError: Variable bar/v does not exist, or was not created with
# tf.get_variable(). Did you mean to set reuse=None in VarScope?
'''
with tf.variable_scope("root"):
    # 通过tf.get_variable_scope().reuse函数获取当前上下文管理器内的reuse参数取值
    print(tf.get_variable_scope().reuse) # False
    with tf.variable_scope("foo1", reuse=True):
        print(tf.get_variable_scope().reuse) # True
        with tf.variable_scope("bar1"):
            # 嵌套在上下文管理器foo1内的bar1内未指定reuse参数,则保持与外层一致
            print(tf.get_variable_scope().reuse) # True
    print(tf.get_variable_scope().reuse) # False
# tf.variable_scope函数提供了一个管理变量命名空间的方式
u1 = tf.get_variable("u", [1])
print(u1.name) 
with tf.variable_scope("foou"):
    u2 = tf.get_variable("u", [1])
    print(u2.name) 
with tf.variable_scope("foou"):
    with tf.variable_scope("baru"):
        u3 = tf.get_variable("u", [1])
        print(u3.name)
    u4 = tf.get_variable("u1", [1])
    print(u4.name) 
# 可直接通过带命名空间名称的变量名来获取其命名空间下的变量
with tf.variable_scope("", reuse=True):
    u5 = tf.get_variable("foou/baru/u", [1])
    print(u5.name)  
    print(u5 == u3) 
    u6 = tf.get_variable("foou/u1", [1])
    print(u6.name) 
    print(u6 == u4) 

6.3.1 保存模型

新建一个Model文件夹用来保存模型
在这里插入图片描述
在这里插入图片描述
运行程序:
在这里插入图片描述

6.3.1 加载计算图

在这里插入图片描述

6.3.1 加载模型

在这里插入图片描述

6.3.2 导出元图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/22320.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于最新SolVES 模型与多技术融合【QGIS、PostgreSQL、ARCGIS、MAXENT、R】实现生态系统服务功能社会价值评估及拓展案例分析

目录 第一章 理论基础与研究热点 第二章 SolVES 4.0 模型运行环境配置 第三章 SolVES 4.0 模型运行 第四章 数据获取与入库 第五章 环境变量与社会价值的相关分析 第六章 拓展案例分析 SolVES模型(Social Values for Ecosystem Services)全称为生态…

如何使用SolVES 模型与多技术融合实现生态系统服务功能社会价值评估?

生态系统服务是人类从自然界中获得的直接或间接惠益,可分为供给服务、文化服务、调节服务和支持服务4类,对提升人类福祉具有重大意义,且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目(Millennium Ecosystem Asse…

SSL/TLS认证握手过程

一: SSL/TLS介绍 什么是SSL,什么是TLS呢?官话说SSL是安全套接层(secure sockets layer),TLS是SSL的继任者,叫传输层安全(transport layer security)。说白点,就是在明文的上层和TCP层之间加上一层加密,这样就保证上层信…

Jenkins + docker-compose 在 Centos 上搭建部署

一、前期准备 1. 检查 CentOS上 是否安装 docker 可以使用以下命令: sudo docker version 如果已经安装了Docker,它将显示有关Docker版本和构建信息的输出。如果未安装Docker,将收到有关命令未找到的错误消息。 2. 检查是否安装 docker-…

吴恩达 x OpenAI Prompt Engineering教程中文笔记

Datawhale干货 作者:刘俊君,Datawhale成员 完整课程:《吴恩达ChatGPT最新课程》 🐳Reasons & Importance Important for research, discoveries, and advancement 对研究、发现和进步很重要 Accelerate the scientific resea…

MySQL 事务篇

事务有哪些特性? 原子性: 一个事务中的所有操作,必须全部执行。要么全部完成要么就不完成。中间如果出现错误,就要回滚到初始状态。 持久性: 事务处理结束后,对数据的修改就是永久的,就是系统故…

Unity UI -- (5)增加基础按钮功能

分析分析一些常见UI 良好的UI设计会清晰地和用户沟通。用户知道他们能和屏幕上哪些东西交互,哪些不能。如果他们进行了交互,他们也要清楚地知道交互是否成功。换句话说,UI要提供给用户很多反馈。 我们可以来看看在Unity里或者在计算机上的任何…

【数据结构】树和二叉树和基本介绍、树的基本术语和表示、二叉树的性质和储存结构

文章目录 1.树的基本概念和介绍1.1树的概念1.2树的基本术语1.3树的使用1.4树的表示1.4.1图形表示1.4.2代码表示 2.二叉树的基本概念和介绍2.1二叉树的介绍2.2二叉树的性质2.3二叉树的储存结构2.3.1顺序储存结构2.3.2链式存储结构 1.树的基本概念和介绍 1.1树的概念 在以前的学…

关于Markdown文件的处理【笔记】

关于Markdown文件的处理【笔记】 前言推荐关于Markdown文件的处理一、md文件转word文档1 准备2 打开3 转为word文档4 导出结果5 打开 二、word文档转md文件1 准备2 导入3 打开4 显示图片5 打开 三、导入到CSDN中1 选择导入2 查看 四、导入设置1 前言2 导入设置3 修改配置 最后 …

C++中map的用法

博主简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的人。 博主主页:陈童学哦 所属专栏:CSTL 前言:Hello各位小伙伴们好!欢迎来到本专栏CSTL的学习,本专栏旨在帮助大家了解…

【分享】ChatGPT的key,用key免费使用ChatGPT(每天更新)

1、ChatGPT用法总结: 自动化文本生成:可以用GPT生成文章、新闻、文本摘要,甚至小说、诗歌等文学作品。语音生成:结合语音合成技术,GPT可以生成自然流畅的语音,可以用于语音助手、交互式语音应用等。问答系统…

深度学习笔记之递归网络(五)递归神经网络的反向传播过程

机器学习笔记之递归网络——递归神经网络的反向传播过程 引言回顾:递归神经网络的前馈计算过程场景构建前馈计算描述 反向传播过程各参数的梯度计算各时刻损失函数梯度计算损失函数对各时刻神经元输出的梯度计算 Softmax \text{Softmax} Softmax回归的梯度计算关于 …

学习git

文章目录 02-为什么要学习Git软件?03 概念:版本控制04 概念:版本控制软件基础功能05 概念:集中式、分布式版本控制系统、多人协作开发5.1 文件冲突问题5.2集中式版本控制(CVS,SVN)5.3 分布式版本…

【KVM虚拟化】· virsh管理命令

目录 🍁libvirt架构概述 🍁使用virsh管理虚拟机 🍂常用命令总结 🍁kvm基本功能管理 🍂帮助命令 🍂KVM的配置文件存放目录 🍂查看虚拟机状态 🍂虚拟机关机与开机 🍂强制虚…

使用FFMPEG进行音频重采样

准备 1. ffmpeg 4.4 2. sdl2 3.一段原始的音频PCM数据 重采样流程 1.设置输入音频参数和输出音频参数 2.根据设置的参数初始化SwrContent上下文 3.创建一个输入buffer, 根据输入的音频参数(采样率,通道数,样本位深度)申请空间…

数据库sql语句-----游标和存储过程

关键词: create procedure xxx()as.......go 查询: exec ... 从例子中感悟一下: create table cartoon( linenum int, name varchar(50) not null, line varchar(100) not null )insert into cartoon values(1,灰太…

Linux文件与目录管理笔记1

鸟哥私房菜笔记 这里写目录标题 常用文件命令cd,pwd,mkdir,rmdir 执行文件的路径的变量:$PATHls,cp,rm,mv 文件内容查看指令(cat,tac,nl)可翻页查看(more,less)More(一页一页翻动)less 数据截取(head,tail)非纯文本文件:od 常用文件命令 cd…

信创办公–基于WPS的PPT最佳实践系列 (插入表格或图标)

信创办公–基于WPS的PPT最佳实践系列 (插入图表或图标) 目录 项目背景操作步骤1、插入表格2、实现放映功能 项目背景 当表格数据过大时,将其复制粘贴到PPT上时会显得插入的表格内容小、拥挤,使PPT看起来不美观。这个问题我们可以…

关于多线程

概念 进程:正在运行的程序,不仅指处于执行期的程序本身,还包括它所管理的资源,比如由它打开的窗口,地址的资源,进程状态等等 线程:CPU调度和分派的基本单位 进程好比工厂的车间,它…

[组合数学] 排列组合

文章目录 加法法则 --每一类都能够独立的完成任务乘法法则 --集合论 任务分步骤1000和9999之间有多个具有不同数位的奇数n 7 3 1 1 2 1 3 4 ^311^213^4 3112134 求除尽n的整数个数0到10000之间有多少个整数恰好是有一位数字是5两位数字可以组成多少两位互异且非零的两位数 减…