tensorflow 卷积神经网络 LeNet-5模型 MNIST手写体数字识别

本文主要是介绍tensorflow 卷积神经网络 LeNet-5模型 MNIST手写体数字识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

____tz_zs小练习


案例来源《TensorFlow实战Google深度学习框架》

cnn/mnist_inference.py

# -*- coding: utf-8 -*-
"""
@author: tz_zs卷积神经网络 mnist_inference.py
"""import tensorflow as tf# 定义神经网络结构相关的参数
INPUT_NODE = 784
OUTPUT_NODE = 10IMAGE_SIZE = 28
NUM_CHANNELS = 1
NUM_LABELS = 10# 第一层卷积层的尺寸和深度
CONV1_DEEP = 32
CONV1_SIZE = 5# 第二层卷积层的尺寸和深度
CONV2_DEEP = 64
CONV2_SIZE = 5# 全连接层的节点个数
FC_SIZE = 512def inference(input_tensor, train, regularizer):with tf.variable_scope('layer1-conv1'):conv1_weights = tf.get_variable("weight", [CONV1_SIZE, CONV1_SIZE, NUM_CHANNELS, CONV1_DEEP],initializer=tf.truncated_normal_initializer(stddev=0.1))conv1_biases = tf.get_variable("bias", [CONV1_DEEP], initializer=tf.constant_initializer(0.0))# print(conv1_weights)  # <tf.Variable 'layer1-conv1/weight:0' shape=(5, 5, 1, 32) dtype=float32_ref># print(conv1_biases)  # <tf.Variable 'layer1-conv1/bias:0' shape=(32,) dtype=float32_ref>conv1 = tf.nn.conv2d(input_tensor, conv1_weights, strides=[1, 1, 1, 1], padding='SAME')relu1 = tf.nn.relu(tf.nn.bias_add(conv1, conv1_biases))# print(conv1)  # Tensor("layer1-conv1/Conv2D:0", shape=(100, 28, 28, 32), dtype=float32)# print(relu1)  # Tensor("layer1-conv1/Relu:0", shape=(100, 28, 28, 32), dtype=float32)with tf.name_scope('layer2-pool1'):pool1 = tf.nn.max_pool(relu1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')# print(pool1)  # Tensor("layer2-pool1/MaxPool:0", shape=(100, 14, 14, 32), dtype=float32)with tf.variable_scope('layer3-conv2'):conv2_weights = tf.get_variable("weight", [CONV2_SIZE, CONV2_SIZE, CONV1_DEEP, CONV2_DEEP],initializer=tf.truncated_normal_initializer(stddev=0.1))conv2_biases = tf.get_variable("bias", [CONV2_DEEP], initializer=tf.constant_initializer(0.0))conv2 = tf.nn.conv2d(pool1, conv2_weights, strides=[1, 1, 1, 1], padding='SAME')relu2 = tf.nn.relu(tf.nn.bias_add(conv2, conv2_biases))with tf.name_scope('layer4-pool2'):pool2 = tf.nn.max_pool(relu2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')pool_shape = pool2.get_shape().as_list()# print(pool_shape)# [100, 7, 7, 64]-------[5000, 7, 7, 64]nodes = pool_shape[1] * pool_shape[2] * pool_shape[3]reshaped = tf.reshape(pool2, [pool_shape[0], nodes])with tf.variable_scope('layer5-fc1'):fc1_weights = tf.get_variable("weight", [nodes, FC_SIZE],initializer=tf.truncated_normal_initializer(stddev=0.1))if regularizer != None:tf.add_to_collection('losses', regularizer(fc1_weights))fc1_biases = tf.get_variable("bias", [FC_SIZE], initializer=tf.constant_initializer(0.1))fc1 = tf.nn.relu(tf.matmul(reshaped, fc1_weights) + fc1_biases)if train:fc1 = tf.nn.dropout(fc1, 0.5)with tf.variable_scope('layer6-fc2'):fc2_weights = tf.get_variable("weight", [FC_SIZE, NUM_LABELS],initializer=tf.truncated_normal_initializer(stddev=0.1))if regularizer != None:tf.add_to_collection('losses', regularizer(fc2_weights))fc2_biases = tf.get_variable("bias", [NUM_LABELS], initializer=tf.constant_initializer(0.1))logit = tf.matmul(fc1, fc2_weights) + fc2_biasesreturn logit


cnn/mnist_train.py

# -*- coding: utf-8 -*-
"""
@author: tz_zs卷积神经网络 mnist_train.py
"""
import tensorflow as tf
import os
from tensorflow.examples.tutorials.mnist import input_data
import numpy as np
# 加载函数
import cnn.mnist_inference as mnist_inference# 配置神经网络参数
BATCH_SIZE = 100
LEARNING_RATE_BASE = 0.1
LEARNING_RATE_DECAY = 0.99
REGULARIZATION_RATE = 0.0001
TRAINING_STEPS = 30000
MOVING_AVERAGE_DECAY = 0.99# 模型保存路径和文件名
MODEL_SAVE_PATH = "/path/to/model/cnn/"
MODEL_NAME = "model.ckpt"def train(mnist):# 定义输入输出的placeholder# x = tf.placeholder(tf.float32, [None, mnist_inference.INPUT_NODE], name='x-input')x = tf.placeholder(tf.float32, [BATCH_SIZE,mnist_inference.IMAGE_SIZE,mnist_inference.IMAGE_SIZE,mnist_inference.NUM_CHANNELS],name='x-input')y_ = tf.placeholder(tf.float32, [BATCH_SIZE, mnist_inference.OUTPUT_NODE], name='y-input')# 定义正则化regularizer = tf.contrib.layers.l2_regularizer(REGULARIZATION_RATE)# 使用前向传播y = mnist_inference.inference(x, True, 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())# print(tf.trainable_variables())# [<tf.Variable 'layer1-conv1/weight:0' shape=(5, 5, 1, 32) dtype=float32_ref>,# <tf.Variable 'layer1-conv1/bias:0' shape=(32,) dtype=float32_ref>,# <tf.Variable 'layer3-conv2/weight:0' shape=(5, 5, 32, 64) dtype=float32_ref>,# <tf.Variable 'layer3-conv2/bias:0' shape=(64,) dtype=float32_ref>,# <tf.Variable 'layer5-fc1/weight:0' shape=(3136, 512) dtype=float32_ref>,# <tf.Variable 'layer5-fc1/bias:0' shape=(512,) dtype=float32_ref>,# <tf.Variable 'layer6-fc2/weight:0' shape=(512, 10) dtype=float32_ref>,# <tf.Variable 'layer6-fc2/bias:0' shape=(10,) dtype=float32_ref>]# 损失函数cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=tf.argmax(y_, 1), logits=y)cross_entropy_mean = tf.reduce_mean(cross_entropy)loss = cross_entropy_mean + tf.add_n(tf.get_collection('losses'))# print(tf.get_collection('losses'))# #[<tf.Tensor 'layer5-fc1/l2_regularizer:0' shape=() dtype=float32>,# <tf.Tensor 'layer6-fc2/l2_regularizer:0' shape=() dtype=float32>]# 学习率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()config = tf.ConfigProto()config.gpu_options.allow_growth = Truewith tf.Session(config=config) as sess:tf.global_variables_initializer().run()for i in range(TRAINING_STEPS):xs, ys = mnist.train.next_batch(BATCH_SIZE)# 调整为四维矩阵reshaped_xs = np.reshape(xs, [BATCH_SIZE,mnist_inference.IMAGE_SIZE,mnist_inference.IMAGE_SIZE,mnist_inference.NUM_CHANNELS])# 运行_, loss_valuue, step = sess.run([train_op, loss, global_step], feed_dict={x: reshaped_xs, y_: ys})# 每1000轮保存一次模型if i % 1000 == 0:print("After %d training step(s), loss on training batch is %g." % (step, loss_valuue))saver.save(sess, os.path.join(MODEL_SAVE_PATH, MODEL_NAME), global_step=global_step)def main(argv=None):mnist = input_data.read_data_sets("/tmp/data", one_hot=True)train(mnist)if __name__ == '__main__':tf.app.run()'''
运行结果:
After 1 training step(s), loss on training batch is 6.73231.
After 1001 training step(s), loss on training batch is 0.730202.
After 2001 training step(s), loss on training batch is 0.644094.
After 3001 training step(s), loss on training batch is 0.640496.
After 4001 training step(s), loss on training batch is 0.634515.
After 5001 training step(s), loss on training batch is 0.64231.
After 6001 training step(s), loss on training batch is 0.581734.
After 7001 training step(s), loss on training batch is 0.590254.
After 8001 training step(s), loss on training batch is 0.546791.
After 9001 training step(s), loss on training batch is 0.553352.
After 10001 training step(s), loss on training batch is 0.526924.
After 11001 training step(s), loss on training batch is 0.516263.
After 12001 training step(s), loss on training batch is 0.510524.
After 13001 training step(s), loss on training batch is 0.530617.
After 14001 training step(s), loss on training batch is 0.500552.
After 15001 training step(s), loss on training batch is 0.49316.
After 16001 training step(s), loss on training batch is 0.478148.
After 17001 training step(s), loss on training batch is 0.470733.
After 18001 training step(s), loss on training batch is 0.471833.
After 19001 training step(s), loss on training batch is 0.456701.
After 20001 training step(s), loss on training batch is 0.451218.
After 21001 training step(s), loss on training batch is 0.446669.
After 22001 training step(s), loss on training batch is 0.440087.
After 23001 training step(s), loss on training batch is 0.43465.
After 24001 training step(s), loss on training batch is 0.428076.
After 25001 training step(s), loss on training batch is 0.42475.
After 26001 training step(s), loss on training batch is 0.416584.
After 27001 training step(s), loss on training batch is 0.428798.
After 28001 training step(s), loss on training batch is 0.406561.
After 29001 training step(s), loss on training batch is 0.404045.
'''

cnn/mnist_eval.py

# -*- coding: utf-8 -*-
"""
@author: tz_zs卷积神经网络 测试程序 mnist_eval.py
"""
import time
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_dataimport cnn.mnist_inference
import cnn.mnist_trainimport numpy as np# 每十秒加载一次最新的模型,并在测试数据上测试最新模型的准确率
EVAL_INTERVAL_SECS = 10def evaluate(mnist):with tf.Graph().as_default() as g:# x = tf.placeholder(tf.float32, [None, mnist_inference.INPUT_NODE], name="x-input")x = tf.placeholder(tf.float32, [mnist.validation.num_examples,cnn.mnist_inference.IMAGE_SIZE,cnn.mnist_inference.IMAGE_SIZE,cnn.mnist_inference.NUM_CHANNELS],name='x-input')y_ = tf.placeholder(tf.float32, [mnist.validation.num_examples, cnn.mnist_inference.OUTPUT_NODE],name="y-input")# 数据输入调整为四维矩阵reshaped_xs = np.reshape(mnist.validation.images,[mnist.validation.num_examples,cnn.mnist_inference.IMAGE_SIZE,cnn.mnist_inference.IMAGE_SIZE,cnn.mnist_inference.NUM_CHANNELS])validate_feed = {x: reshaped_xs, y_: mnist.validation.labels}# 测试(测试时不用计算正则化损失)y = cnn.mnist_inference.inference(x, False, None)# 计算准确率correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))# 加载模型variable_averages = tf.train.ExponentialMovingAverage(cnn.mnist_train.MOVING_AVERAGE_DECAY)variables_to_restore = variable_averages.variables_to_restore()saver = tf.train.Saver(variables_to_restore)#print(variables_to_restore)# {'layer3-conv2/bias/ExponentialMovingAverage': <tf.Variable 'layer3-conv2/bias:0' shape=(64,) dtype=float32_ref>,# 'layer1-conv1/bias/ExponentialMovingAverage': <tf.Variable 'layer1-conv1/bias:0' shape=(32,) dtype=float32_ref>,# 'layer6-fc2/bias/ExponentialMovingAverage': <tf.Variable 'layer6-fc2/bias:0' shape=(10,) dtype=float32_ref>,# 'layer3-conv2/weight/ExponentialMovingAverage': <tf.Variable 'layer3-conv2/weight:0' shape=(5, 5, 32, 64) dtype=float32_ref>,# 'layer6-fc2/weight/ExponentialMovingAverage': <tf.Variable 'layer6-fc2/weight:0' shape=(512, 10) dtype=float32_ref>,# 'layer1-conv1/weight/ExponentialMovingAverage': <tf.Variable 'layer1-conv1/weight:0' shape=(5, 5, 1, 32) dtype=float32_ref>,# 'layer5-fc1/bias/ExponentialMovingAverage': <tf.Variable 'layer5-fc1/bias:0' shape=(512,) dtype=float32_ref>,# 'layer5-fc1/weight/ExponentialMovingAverage': <tf.Variable 'layer5-fc1/weight:0' shape=(3136, 512) dtype=float32_ref>}config = tf.ConfigProto()config.gpu_options.allow_growth = Truewhile True:with tf.Session(config=config) as sess:# 找到文件名ckpt = tf.train.get_checkpoint_state(cnn.mnist_train.MODEL_SAVE_PATH)# print(ckpt)# model_checkpoint_path: "/path/to/model/cnn/model.ckpt-4001"# all_model_checkpoint_paths: "/path/to/model/cnn/model.ckpt-1"# all_model_checkpoint_paths: "/path/to/model/cnn/model.ckpt-1001"# all_model_checkpoint_paths: "/path/to/model/cnn/model.ckpt-2001"# all_model_checkpoint_paths: "/path/to/model/cnn/model.ckpt-3001"# all_model_checkpoint_paths: "/path/to/model/cnn/model.ckpt-4001"if ckpt and ckpt.model_checkpoint_path:# 加载模型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 stpe(s), validation accuracy = %g" % (global_step, accuracy_score))else:print("No checkpoint file found")returntime.sleep(EVAL_INTERVAL_SECS)def main(argv=None):mnist = input_data.read_data_sets("/tmp/data", one_hot=True)evaluate(mnist)if __name__ == '__main__':tf.app.run()'''
After 1 training stpe(s), validation accuracy = 0.047
After 1001 training stpe(s), validation accuracy = 0.9848
After 2001 training stpe(s), validation accuracy = 0.9894
After 3001 training stpe(s), validation accuracy = 0.9904
...
...
After 27001 training stpe(s), validation accuracy = 0.9932
After 28001 training stpe(s), validation accuracy = 0.9926
After 29001 training stpe(s), validation accuracy = 0.993
'''


这篇关于tensorflow 卷积神经网络 LeNet-5模型 MNIST手写体数字识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/954356

相关文章

捷瑞数字业绩波动性明显:关联交易不低,募资必要性遭质疑

《港湾商业观察》施子夫 5月22日,山东捷瑞数字科技股份有限公司(以下简称,捷瑞数字)及保荐机构国新证券披露第三轮问询的回复,继续推进北交所上市进程。 从2023年6月递表开始,监管层已下发三轮审核问询函,关注到捷瑞数字存在同业竞争、关联交易、募资合理性、期后业绩波动等焦点问题。公司的上市之路多少被阴影笼罩。​ 业绩波动遭问询 捷瑞数字成立于2000年,公司是一家以数字孪生驱动的工

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

YOLOv8改进 | SPPF | 具有多尺度带孔卷积层的ASPP【CVPR2018】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40+篇内容,内含各种Head检测头、损失函数Loss、Backbone、Neck、NMS等创新点改进——点击即可跳转 Atrous Spatial Pyramid Pooling (ASPP) 是一种在深度学习框架中用于语义分割的网络结构,它旨

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在

人工和AI大语言模型成本对比 ai语音模型

这里既有AI,又有生活大道理,无数渺小的思考填满了一生。 上一专题搭建了一套GMM-HMM系统,来识别连续0123456789的英文语音。 但若不是仅针对数字,而是所有普通词汇,可能达到十几万个词,解码过程将非常复杂,识别结果组合太多,识别结果不会理想。因此只有声学模型是完全不够的,需要引入语言模型来约束识别结果。让“今天天气很好”的概率高于“今天天汽很好”的概率,得到声学模型概率高,又符合表达

智能客服到个人助理,国内AI大模型如何改变我们的生活?

引言 随着人工智能(AI)技术的高速发展,AI大模型越来越多地出现在我们的日常生活和工作中。国内的AI大模型在过去几年里取得了显著的进展,不少独创的技术点和实际应用令人瞩目。 那么,国内的AI大模型有哪些独创的技术点?它们在实际应用中又有哪些出色表现呢?此外,普通人又该如何利用这些大模型提升工作和生活的质量和效率呢?本文将为你一一解析。 一、国内AI大模型的独创技术点 多模态学习 多

python实现最简单循环神经网络(RNNs)

Recurrent Neural Networks(RNNs) 的模型: 上图中红色部分是输入向量。文本、单词、数据都是输入,在网络里都以向量的形式进行表示。 绿色部分是隐藏向量。是加工处理过程。 蓝色部分是输出向量。 python代码表示如下: rnn = RNN()y = rnn.step(x) # x为输入向量,y为输出向量 RNNs神经网络由神经元组成, python

基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别

转发来源:https://swift.ctolib.com/ooooverflow-chinese-ocr.html chinese-ocr 基于CTPN(tensorflow)+CRNN(pytorch)+CTC的不定长文本检测和识别 环境部署 sh setup.sh 使用环境: python 3.6 + tensorflow 1.10 +pytorch 0.4.1 注:CPU环境

OpenCompass:大模型测评工具

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径:AI代理工作流大模型应用开发实用开源项目汇总大模型问答项目问答性能评估方法大模型数据侧总结大模型token等基本概念及参数和内存的关系大模型应用开发-华为大模型生态规划从零开始的LLaMA-Factor