tensorflow简洁实现MNIST识别

人工智能实验---MNIST图像识别 完整代码 https://github.com/ChenMingK/MNIST-recognization MNIST数据集压缩包在里面,配好环境后运行CNN.py即可 实验环境 PyCharm, tensorflow(3.5), WIN10 推荐网址: http://www.tensorfly.cn/tfdoc/tutorials/mnist_pros.html  tensorflo... 阅读详情

一、MyData.py

  • 数据读取,进行了简单的归一化,即除以255.0
  • dataset_path是保存图片路径和标签的txt的路径,每行的格式是/home/lwd/data/mnist/image/59999.png 8
  • MNIST转化成图片看这里
import os
import cv2
import random
import numpy as np
import tensorflow as tf

class Dataset(object):
    def __init__(self, dataset_path, train, batch_size=1):
        self.all = []
        for line in open(dataset_path):
            self.all.append(line)
        if train == True:
            random.shuffle(self.all)
        self.bs = batch_size
        self.batch_num = len(self.all) // self.bs
        self.bid = 0
    def __iter__(self):
        return self
    def __len__(self):
        return self.batch_num
    def __next__(self):
        batch_image = np.zeros((self.bs, 28, 28, 1))
        batch_label = np.zeros((self.bs, 10))
        if self.bid < self.batch_num:
            for j in range(self.bs):
                sp=self.all[self.bid*self.bs+j].split()
                im=cv2.imread(sp[0], 0).astype(np.float32) / 255.0
                im = np.expand_dims(im, axis = 2)
                batch_image[j, :, :, :] = im
                lab=int(sp[1])
                gt=np.zeros((10))
                gt[lab]=1
                batch_label[j,:]=gt
            self.bid += 1
            return batch_image, batch_label
        else:
            self.bid = 0
            random.shuffle(self.all)
            raise StopIteration

二、mnist.py

  • 两种方式实现了两种结构的网络
  • 参考了这个github项目
import tensorflow as tf
import numpy as np
import random
import cv2,sys
import MyData


data=tf.placeholder(tf.float32, [None, 28, 28, 1],name='data')
label=tf.placeholder(tf.float32, [None, 10], name='label')
# model
x_image = tf.reshape(data, [-1, 28, 28, 1])
with tf.variable_scope('conv1'): # output is 28x28
    weight = tf.get_variable(name='weight', dtype=tf.float32, trainable=True, shape=[5,5,1,6], initializer=tf.random_normal_initializer(stddev=0.01))
    conv1 = tf.nn.conv2d(x_image, weight, [1,1,1,1], 'SAME')
    bias = tf.get_variable(name='bias', shape=6, trainable=True, dtype=tf.float32, initializer=tf.constant_initializer(0.0))
    conv1 = tf.nn.bias_add(conv1, bias)
with tf.variable_scope('pool1'):
    pool1 = tf.nn.max_pool(conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='VALID')
with tf.variable_scope('conv2'): # output is 10x10
    weight2 = tf.get_variable(name='weight', dtype=tf.float32, trainable=True, shape=[5,5,6,16], initializer=tf.random_normal_initializer(stddev=0.01))
    conv2 = tf.nn.conv2d(pool1, weight2, [1,1,1,1], 'VALID')
    bias2 = tf.get_variable(name='bias', shape=16, trainable=True, dtype=tf.float32, initializer=tf.constant_initializer(0.0))
    conv2 = tf.nn.bias_add(conv2, bias2)
with tf.variable_scope('pool2'):
    pool2 = tf.nn.max_pool(conv2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='VALID')
with tf.variable_scope('dense1'):
    flat = tf.reshape(pool2, [-1, 5*5*16])
    dense1 = tf.layers.dense(inputs=flat, units=200, activation=tf.nn.relu, use_bias=True)
with tf.variable_scope('dense2'):
    dense2 = tf.layers.dense(inputs=dense1, units=10, activation=None, use_bias=True)
y = tf.nn.softmax(dense2)
# loss
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=label, logits=dense2)
loss=tf.reduce_sum(cross_entropy)
train_step = tf.train.GradientDescentOptimizer(1e-4).minimize(loss)
# accuracy
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(label, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

'''
data = tf.placeholder(tf.float32, [None, 28, 28, 1])
label = tf.placeholder(tf.float32, [None, 10])
# model
K = 4  
L = 8  
M = 12  
N = 200
W1 = tf.Variable(tf.truncated_normal([5, 5, 1, K], stddev=0.1))  
B1 = tf.Variable(tf.ones([K])/10)
W2 = tf.Variable(tf.truncated_normal([5, 5, K, L], stddev=0.1))
B2 = tf.Variable(tf.ones([L])/10)
W3 = tf.Variable(tf.truncated_normal([4, 4, L, M], stddev=0.1))
B3 = tf.Variable(tf.ones([M])/10)
W4 = tf.Variable(tf.truncated_normal([7 * 7 * M, N], stddev=0.1))
B4 = tf.Variable(tf.ones([N])/10)
W5 = tf.Variable(tf.truncated_normal([N, 10], stddev=0.1))
B5 = tf.Variable(tf.ones([10])/10)
stride = 1  # output is 28x28
Y1 = tf.nn.relu(tf.nn.conv2d(data, W1, strides=[1, stride, stride, 1], padding='SAME') + B1)
stride = 2  # output is 14x14
Y2 = tf.nn.relu(tf.nn.conv2d(Y1, W2, strides=[1, stride, stride, 1], padding='SAME') + B2)
stride = 2  # output is 7x7
Y3 = tf.nn.relu(tf.nn.conv2d(Y2, W3, strides=[1, stride, stride, 1], padding='SAME') + B3)
YY = tf.reshape(Y3, shape=[-1, 7 * 7 * M])
Y4 = tf.nn.relu(tf.matmul(YY, W4) + B4)
Ylogits = tf.matmul(Y4, W5) + B5
y = tf.nn.softmax(Ylogits)
# loss
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=Ylogits, labels=label)
loss = tf.reduce_mean(cross_entropy)*100
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(label, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
#lr = 0.0001 +  tf.train.exponential_decay(0.003, step, 2000, 1/math.e)
train_step = tf.train.AdamOptimizer(1e-4).minimize(loss)
'''


gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.1)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))
sess.run(tf.global_variables_initializer())
input_data = MyData.Dataset('/home/lwd/data/mnist/train.txt', True, 32)
test_data = MyData.Dataset('/home/lwd/data/mnist/test.txt', False, 32)
# save ckpt model
saver = tf.train.Saver()
# for tensorboard
summary_writer = tf.summary.FileWriter('./log/', sess.graph)

# load
# saver = tf.train.import_meta_graph('./checkpoint/my.meta')
# saver.restore(sess,tf.train.latest_checkpoint('./checkpoint'))
# xh = 1
# acc = 0
# for item in test_data:
#     yy = sess.run(y, feed_dict={data:item[0], label:item[1]})
#     for k in range(yy.shape[0]):
#         # print(xh, np.argmax(yy[k]))
#         if(np.argmax(yy[k]) == np.argmax(item[1][k])) : acc += 1
#         xh += 1
#     #summary_writer.add_summary(summary, xh)
# print(acc * 1.0 / (xh - 1))
# sys.exit(0)

for i in range(100):
    total = 0
    cnt = 0
    tl = 0
    for item in input_data:
        _, acc, lo = sess.run([train_step, accuracy, loss], feed_dict={data:item[0], label:item[1]})
        total += acc
        cnt += 1.0
        tl += lo
    print(total/cnt, tl / cnt)
    if total/cnt > 0.98:
        xh = 1
        for item in test_data:
            yy = sess.run(y, feed_dict={data:item[0]})
            for k in range(yy.shape[0]):
                print(xh, np.where(yy[k]==np.max(yy[k])))
                xh += 1
        # save ckpt model
        saver.save(sess, './checkpoint/my')
        sys.exit(0)

三、ckpt转pb

import tensorflow as tf
from tensorflow.python.framework import graph_util

with tf.Graph().as_default() as graph_old:
    isess = tf.InteractiveSession()
    ckpt_filename = './checkpoint/my'
    isess.run(tf.global_variables_initializer())
    saver = tf.train.import_meta_graph(ckpt_filename+'.meta', clear_devices=True)
    saver.restore(isess, ckpt_filename)
    
    constant_graph = graph_util.convert_variables_to_constants(isess, isess.graph_def, ["Softmax"])
    constant_graph = graph_util.remove_training_nodes(constant_graph)
    with tf.gfile.GFile('./pb_model/model.pb', mode='wb') as f:
        f.write(constant_graph.SerializeToString())
Tensorflow第T1周:Tensorflow实现mnist手写数字识别 MNIST手写数字数据集来源于是美国国家标准与技术研究所,是著名的公开数据集之一。数据集中的数字图片是由250个不同职业的人纯手写绘制,数据集获取的网址为:http://yann.lecun.com/exdb/mnist/(下载后需解压)。我们一般会采用这行代码直接调用,这样就比较简单MNIST手写数字数据集中包含了70000张图片,其中60000张为训练数据,10000为测试数据,70000张图片均是28*28,数据集样本如下:如果我们把每一张图片中的像素转换为向量,则得到长度为28*28=784。 阅读详情

相关推荐

tensorflow实现MNIST手写数字识别演示

一、加载数据 import tensorflow as tf #导入tensorflow库 mnist=tf.keras.datasets.mnist (x_train,y_train),(x_test,y_test)=mnist.load_data() #加载数据 如果无法加载数据的话,如类似出现如下图所示问题,则可以根据下载地址,将mnist.npz文件下载到本地。 然后通过以下代码加载本地数据文件 import tensorflow as tf import numpy as.

dusin的专栏 5728

TensorFlow2学习七、使用MNIST手写体识别数据集识别自己手写图片

一、说明 本示例使用mnist数据集。mnist来自美国国家标准与技术研究所,训练集来自 250 个不同人手写的数字构成。不过这些数据集与中国书写习惯略有差别,所以直接训练好的模型识别中国手写数字准确度并不高。 二、步骤 1. 加载mnist数据集: mnist = tf.keras.datasets.mnist (train_images, train_labels), (test_image...

猿来这样-谢厂节的博客 2679

Tensorflow | MNIST手写字识别

这次对最近学习tensorflow的总结,以理解MNIST手写字识别案例为例来说明 原始的网址:https://www.tensorflow.org/versions/r0.12/tutorials/mnist/beginners/index.html#mnist-for-ml-beginners0、数据解释数据为图片,每个图片是28像素*28像素,带有标签,类似于X和Y,X为28像素*28像素的数

求知:数据科学家之路 5556

TensorFlow经典入门示例MNIST(识别手写的数字图片)

文章目录MNIST是什么?MNIST的组成MNIST存储方式使用Keras编码 TensorFlow是流行的AI框架之一, 那么使用TensorFlow究竟能达成哪些人工智能的工作呢? 官方曾经提供了一个经典的演示示例,就是使用该框架实现对手写的阿拉伯数字图片的识别,该项目称为MNIST。这里的“经典”有两层意思: MNIST是最典型也是最早的演示示例, 通俗易懂,具有代表性 经典也代表了过时,...

oscar999的专栏 3910

【TensorFlow】T1:实现mnist手写数字识别

此处所需数据直接联网下载,故无需数据集。固定模板,直接调用即可。

CH3_CH2_CHO的博客 1374

使用GDScript(godot)生成仿杀戮尖塔地图

使用GDScript(godot)生成仿杀戮尖塔地图 extends Node2D export (PackedScene) var Ball var 被连接数 = {} # 每个怪物被下层怪物连接的数量 最多为2 var 连接1 = {} # 第一次连接的上层怪物位置 var 连接2 = {} # 第二次连接的上层怪物位置 var 怪物数量 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0] # 每层怪物的数量 var 总层数 =8 # 总层数 var 怪物坐标行 = {} #

weixin_45038716的博客 3010

【小白也可做】pytorch实现普通CNN的MNIST手写数字分类,含t-SNE聚类图、混淆矩阵图绘制,内含通用代码,可根据自己的项目需要进行修改

config类中定义了项目所有需要的参数,可以在里面修改训练参数。

weixin_44829487的博客 3011

ROS入门必学导航算法——Navigation

该平台集成了多款无人车底盘,包括履带式、四轮差速、阿克曼、麦克纳姆轮底盘等,以满足不同形式和配置的需求,并搭载了RTK定位系统、双目相机、深度相机和激光雷达等多种传感器,以满足开发者的科研需求。amcl节点接收里程计数据(通过"odom"话题)和激光雷达数据(通常通过"scan"话题),结合已知的地图,实时地估计出机器人在该地图上的位置。在ROS中,这是通过"tf库"变换实现的,通过将传感器数据转换到共同的参考系中,系统可以更容易地集成来自不同传感器的数据,并确保它们在相同的空间和时间范围内可用。

AMOVLAB(阿木实验室) 2908

MNIST 手写数字图像集 python实现图像识别

MNIST 手写数字图像集,机器学习领域最有名的数据集之一,由0-9的数字图像构成

多头注意力探索Now 395

Unity URP炫彩干涉效果:从薄膜干涉原理到Shader Graph实现

薄膜干涉是一种常见的光学现象,指光在透明薄膜上下表面反射后产生干涉,形成彩虹色条纹。其原理基于光程差导致的相长与相消干涉,不同波长的光被选择性增强或削弱。在计算机图形学中,这一物理现象被抽象为高效的数学模型,通过Shader编程实现动态色彩变化,为游戏和实时渲染带来独特的视觉表现力。技术实现上,常采用正弦函数结合噪声纹理来模拟色彩循环,利用法线与视角点积作为基础变量,加入噪声扰动模拟厚度不均,实现随视角变化的虹彩效果。在Unity URP渲染管线中,可通过Shader Graph可视化工具或手写HLSL代码

weixin_34026997的博客 294

手把手式介绍 ADNI 影像数据下载

1.搜索 1.1登录 打开ADNI的官网:http://adni.loni.usc.edu/,进入下面的界面。 点击 DATA&SMPLES 下的 ACCESS DATA AND SAMPLES,如下图。 页面跳转以后点击中间的“LOGIN”,这时会跳出一个新的界面,然后在右上角输入自己的帐号、密码即可。如果没有权限可以跳转到第2部分看看如何申请权限。 登录以后选择DOWNLOAD下的 Image Collections就是搜索下载影像数据,其他还有一些学习测试数据和遗传数据。 1.2 sea

永远想不起来更新的博客 1万+

简洁明了的tensorflow2.0教程——用keras实现mnist数字识别

通过本文你可以快速学会使用keras搭建神经网络,只需40行代码构建神经网络实现mnist数据集手写数字的识别。MNIST数据集(Mixed National Institute of Standards and Technology database)是美国国家标准与技术研究院收集整理的大型手写数字数据库,包含60,000个示例的训练集以及10,000个示例的测试集.,图片大小为28*28。完整代码在我的github,链接:https://github.com/JohnLeek/Tensorflow-st

JohnLeeK的博客 2926

YOLOv8轻量化模型瘦身术:深度解析与实战LAMP剪枝 YOLOv8(2021)

YOLOv8模型LAMP剪枝技术解析与实战 本文深入探讨了LAMP剪枝技术在YOLOv8目标检测模型中的应用。针对深度学习模型部署面临的资源限制问题,LAMP剪枝通过最小化L2失真和层自适应稀疏度分配,实现了高效模型压缩。相比传统幅度剪枝的"一刀切"方法,LAMP创新性地将剪枝建模为优化问题,定义LAMP分数来衡量权重重要性,自动确定各层最佳剪枝率。文章从理论基础出发,详细解析了LAMP的核心数学公式和算法流程,并提供了完整的YOLOv8移植实战指南,包括代码结构、剪枝步骤和微调策略。通

FJN110的博客 2422

tensorflow1和2的mnist代码

描述 tensorflow1和2的具体代码是有显著差异的,这篇文章会分别写出两个版本的mnist手写体识别代码 这里先记录一句命令 当你安装了tensorflow2却仍想按照tensorflow1的API来编写的话,最开始加上这样一句 import tensorflow.compat.v1 as tf tensorflow 1 代码 #encoding: utf-8 import tenso...

weixin_42156097的博客 671

【AUTOSAR实战】:CAN发送邮箱忙导致报文发送丢帧的问题调试

本文档主要讨论了CAN总线通信中可能出现的TC377传输错误的分析和解决方案。文章提供了如何通过检查CAN传输和接收过程、识别传输缓冲区的类型和状态以及选择适当的内存保护功能来检测和解决此类错误的见解。经过多次尝试和分析,得出的结论是,修改CANIF缓冲的尺寸并重新分配报文给各个buffer并不能解决问题。此外,发送中断被抢占可能导致报文无法发送,最终也将此因素排除。本文档还提到了一些可能导致发送流程调度出现问题的因素,例如CANIF中报文引用Buffer不合理。

weixin_46481662的博客 3137

10|Git Diff 与增量代码识别:本次到底改了哪些代码?

本文介绍 Git Diff 和增量代码识别,帮助你理解精准测试如何先找到本次真正变化的代码。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 160

tensorflow2.0-mnist手写数字识别代码实例:轻松入门深度学习

tensorflow2.0-mnist手写数字识别代码实例:轻松入门深度学习 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 tensorflow2.0-mnist手写数字识别代码实例是一个基于TensorFlow 2.0框架的开源项目,它提供了一个简单直观的神经网络构建示例,用于识别MNIST数据集中的手写数字。该项目非常适合深度学习初学者,帮助他们在实践中快速掌握T...

gitblog_06718的博客 275

Natural Language Processing

作者:禅与计算机程序设计艺术 1.简介 自然语言处理(NLP)是研究如何使计算机理解和处理自然语言的理论和方法,目的是让电脑更好的理解、获取、生成、存储和沟通人类语言。20世纪80年代末,IBM的三位博士陈天奇、周博磊和王力雄在贝尔实验室创建了首个自然语言处理系统——“布莱克多·艾森豪威尔”(Bletc

AI天才研究院 724

mnist手写数字分类的python实现_TensorFlow的MNIST手写数字分类问题 基础篇

本章节的阅读对象是对机器学习和 TensorFlow 都不太了解的新手.就像我们学习编程的第一步往往是学习敲出 "Hello World" 一样,机器学习的入门就要知道 MNIST.MNIST 是一个入门级的计算机视觉数据集,它包含各种手写数字图片:它也包含每一张图片对应的标签,告诉我们这个是数字几;比如,上面这四张图片的标签分别是 5, 0, 4, 1。在此教程中,我们将训练一个机器学习模型用于...

weixin_39952182的博客 459

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

别再抄四年前的代码了!用TensorFlow 2.9+Python 3.9搞定MNIST手写识别(附完整代码)

本文介绍如何使用TensorFlow 2.9和Python 3.9构建高精度MNIST手写识别系统,涵盖现代CNN架构设计、数据增强、混合精度训练等关键技术,帮助开发者摆脱过时代码,实现超过99%的准确率。附完整代码和实战技巧,适合深度学习初学者和进阶者。

weixin_30352191的博客 632

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

使用Tensorflow和MNIST识别自己手写的数字

最近在学习神经网络相关的东西,发现有很多资料是Tensorflow教程上的内容,但是教程很多只是一个验证官方程序的过程。如何将官方程序变成自己可以利用的程序,网上似乎资料比较少,所以我就来介绍一下如何使用Tensorflow和MNIST搭建自己的手写识别算法,识别自己写的数字。

鸡蛋灌饼小菜鸟的博客 6万+

Tensorflow 实现 MNIST 手写数字识别

本节笔记作为 Tensorflow 的 Hello World,用 MNIST 手写数字识别来探索 Tensorflow。笔记的内容来自 Tensorflow 中文社区和黄文坚的《Tensorflow 实战》,只作为自己复习总结。

Gler.的博客 3万+

基于tensorflow的MNIST数字识别

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

weixin_36670529的博客 2162

TensorFlow——CNN实现MNIST手写体识别

文章目录TensorFlowCNN实现MNIST1,数据集2,回归模型——Softmax3,CNN4,具体实现以及相关函数 TensorFlowCNN实现MNIST 官方文档 —— MNIST 入门 | Softmax 相关 官方文档 —— MNIST 进阶 | CNN 相关 1,数据集 这份Python代码是官方网站上提供给我们下载和安装数据集的,然后可以使用下面的代码导入到你的项目里面: i...

还是应该要努力的(12点前睡觉!!!!! 3342

TensorFlow | 实现mnist手写数字识别

这段代码构建了一个典型的卷积神经网络,适合处理图像数据,通过卷积层和池化层提取特征,最终通过全连接层进行分类。使用ReLU激活函数可以加快训练速度,同时保持较好的泛化能力。通过调用,设置了模型训练时的基本参数。这些配置将直接影响模型的训练效果和收敛速度。选择合适的优化器、损失函数和评估指标是成功训练深度学习模型的重要步骤。确保这些配置适合具体任务的特点,能够提升模型的性能通过调用方法,开始了模型的训练过程。

weixin_52390875的博客 1921
上一篇: tensorflow知识点
下一篇: Model Garden for TensorFlow问题集锦
刀么克瑟拉莫
博客等级 码龄14年 68粉丝 268原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刀么克瑟拉莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值