mnist手写体识别

tensorflow入门学习-程序记录 1.训练一个一次函数的参数 # -*- coding: utf-8 -*- """ Created on Thu Dec 13 15:39:58 2018 @author: XXX """ import tensorflow as tf import numpy as np #creat data x_data = np.random.rand(100).astype(np.float3... 阅读详情

下载数据集 download.py

# coding:utf-8
# 从tensorflow.examples.tutorials.mnist引入模块。这是TensorFlow为了教学MNIST而提前编制的程序
from tensorflow.examples.tutorials.mnist import input_data
# 从MNIST_data/中读取MNIST数据。这条语句在数据不存在时,会自动执行下载
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

# 查看训练数据的大小
print(mnist.train.images.shape)  # (55000, 784)
print(mnist.train.labels.shape)  # (55000, 10)

# 查看验证数据的大小
print(mnist.validation.images.shape)  # (5000, 784)
print(mnist.validation.labels.shape)  # (5000, 10)

# 查看测试数据的大小
print(mnist.test.images.shape)  # (10000, 784)
print(mnist.test.labels.shape)  # (10000, 10)

# 打印出第0幅图片的向量表示
print(mnist.train.images[0, :])

将数组保存成图片 save_pic.py

#coding: utf-8
from tensorflow.examples.tutorials.mnist import input_data
import scipy.misc
import os

# 读取MNIST数据集。如果不存在会事先下载。
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

# 我们把原始图片保存在MNIST_data/raw/文件夹下
# 如果没有这个文件夹会自动创建
save_dir = 'MNIST_data/raw/'
if not os.path.exists(save_dir):
    os.makedirs(save_dir)




# 保存前20张图片
# for i in range(20):
    # 请注意,mnist.train.images[i, :]就表示第i张图片(序号从0开始)
    image_array = mnist.train.images[i, :]
    # TensorFlow中的MNIST图片是一个784维的向量,我们重新把它还原为28x28维的图像。
    image_array = image_array.reshape(28, 28)
    # 保存文件的格式为 mnist_train_0.jpg, mnist_train_1.jpg, ... ,mnist_train_19.jpg
    filename = save_dir + 'mnist_train_%d.jpg' % i
    # 将image_array保存为图片
    # 先用scipy.misc.toimage转换为图像,再调用save直接保存。
    scipy.misc.toimage(image_array, cmin=0.0, cmax=1.0).save(filename)

print('Please check: %s ' % save_dir)


显示one-hot的label
label.py

# coding: utf-8
from tensorflow.examples.tutorials.mnist import input_data
import numpy as np
# 读取mnist数据集。如果不存在会事先下载。
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)


# 看前20张训练图片的label
for i in range(20):
    # 得到one-hot表示,形如(0, 1, 0, 0, 0, 0, 0, 0, 0, 0)
    one_hot_label = mnist.train.labels[i, :]
    # 通过np.argmax我们可以直接获得原始的label
    # 因为只有1位为1,其他都是0
    label = np.argmax(one_hot_label)
    print('mnist_train_%d.jpg label: %d' % (i, label))

使用卷积神经网络的方式进行训练

# coding: utf-8
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data



# 定义权值变量
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)

# 卷积
def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

# 最大池化
def max_pool_2x2(x):
    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
                          strides=[1, 2, 2, 1], padding='SAME')


if __name__ == '__main__':
    # 读入数据
    mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
    # x为训练图像的占位符、y_为训练图像标签的占位符
    x = tf.placeholder(tf.float32, [None, 784])
    y_ = tf.placeholder(tf.float32, [None, 10])

    # 将单张图片从784维向量重新还原为28x28的矩阵图片
    x_image = tf.reshape(x, [-1, 28, 28, 1])

    # 第一层卷积层
    W_conv1 = weight_variable([5, 5, 1, 32])
    b_conv1 = bias_variable([32])
    h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
    h_pool1 = max_pool_2x2(h_conv1)

    # 第二层卷积层
    W_conv2 = weight_variable([5, 5, 32, 64])
    b_conv2 = bias_variable([64])
    h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
    h_pool2 = max_pool_2x2(h_conv2)

    # 全连接层,输出为1024维的向量
    W_fc1 = weight_variable([7 * 7 * 64, 1024])
    b_fc1 = bias_variable([1024])
    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,keep_prob是一个占位符,训练时为0.5,测试时为1
    keep_prob = tf.placeholder(tf.float32)
    h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)

    # 把1024维的向量转换成10维,对应10个类别
    W_fc2 = weight_variable([1024, 10])
    b_fc2 = bias_variable([10])
    y_conv = tf.matmul(h_fc1_drop, W_fc2) + b_fc2

    # 我们不采用先Softmax再计算交叉熵的方法,而是直接用tf.nn.softmax_cross_entropy_with_logits直接计算
    cross_entropy = tf.reduce_mean(
        tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv))
    # 同样定义train_step
    train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)

    # 定义测试的准确率
    correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

    # 创建Session和变量初始化
    sess = tf.InteractiveSession()
    sess.run(tf.global_variables_initializer())

    # 训练20000步
    for i in range(20000):
        batch = mnist.train.next_batch(50)
        # 每100步报告一次在验证集上的准确度
        if i % 100 == 0:
            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}))


使用机器学习的方式进行训练

# coding:utf-8
# 导入tensorflow。
# 这句import tensorflow as tf是导入TensorFlow约定俗成的做法,请大家记住。
import tensorflow as tf
# 导入MNIST教学的模块
from tensorflow.examples.tutorials.mnist import input_data
# 与之前一样,读入MNIST数据
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

# 创建x,x是一个占位符(placeholder),代表待识别的图片
x = tf.placeholder(tf.float32, [None, 784])

# W是Softmax模型的参数,将一个784维的输入转换为一个10维的输出
# 在TensorFlow中,变量的参数用tf.Variable表示
W = tf.Variable(tf.zeros([784, 10]))
# b是又一个Softmax模型的参数,我们一般叫做“偏置项”(bias)。
b = tf.Variable(tf.zeros([10]))

# y=softmax(Wx + b),y表示模型的输出
y = tf.nn.softmax(tf.matmul(x, W) + b)

# y_是实际的图像标签,同样以占位符表示。
y_ = tf.placeholder(tf.float32, [None, 10])

# 至此,我们得到了两个重要的Tensor:y和y_。
# y是模型的输出,y_是实际的图像标签,不要忘了y_是独热表示的
# 下面我们就会根据y和y_构造损失

# 根据y, y_构造交叉熵损失
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y)))

# 有了损失,我们就可以用随机梯度下降针对模型的参数(W和b)进行优化
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

# 创建一个Session。只有在Session中才能运行优化步骤train_step。
sess = tf.InteractiveSession()
# 运行之前必须要初始化所有变量,分配内存。
tf.global_variables_initializer().run()
print('start training...')

# 进行1000步梯度下降
for _ in range(1000):
    # 在mnist.train中取100个训练数据
    # batch_xs是形状为(100, 784)的图像数据,batch_ys是形如(100, 10)的实际标签
    # batch_xs, batch_ys对应着两个占位符x和y_
    batch_xs, batch_ys = mnist.train.next_batch(100)
    # 在Session中运行train_step,运行时要传入占位符的值
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

# 正确的预测结果
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
# 计算预测准确率,它们都是Tensor
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
# 在Session中运行Tensor可以得到Tensor的值
# 这里是获取最终模型的正确率
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))  # 0.9185
MNIST数据集下载与保存为图片格式 阅读详情

相关推荐

基于卷积神经网络的mnist手写体识别

基于卷积神经网络的mnist手写体识别 1、卷积神经网络 1.1、什么是卷积神经网络 首先,卷积神经网络的概念,百度是这么给出解释的——卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 。卷积神经网络...

weixin_44037639的博客 9020

单隐层前馈神经网络tensorflow实现

# -*- coding: utf-8 -*- import tensorflow as tf # 模拟一个 M-P 神经元 class neuron(object): def __init__(self, weight, threshold): self.weight = weight # weight为本神经元的权重,tf.constant self.threshold = threshold # threshold 是这个神经元的阈值,tf.con...

一只在cv道路上爬行的小乌龟~ 1033

重磅分享:使用PyTorch实现MNIST手写体识别代码

@本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 今天小编就为大家分享一篇使用PyTorch实现MNIST手写体识别代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 文章目录实验环境MNIST数据集介绍导入包定义超参数数据集定义网络实例化网络定义训练函数定义测试函数开始训练实验结果 实验环境 win10 + anaconda + jupyter notebo...

python基础学习教程 3388

tensorflow 测试

#-*- coding:utf-8 -*- import tensorflow as tf hello = tf.constant('Hello,TensorFlow!') sess=tf.Session() print(sess.run(hello))

长门有希的博客 193

基于TensorFlow实现MNIST手写体数字识别

1. 背景描述 1.1 数据源介绍 数据源说明:60000训练集 + 10000测试集 图中的每个数字都是[28,28]的二阶数组表示,每个位点上的值是颜色的深度[0-255] ~ [白色-黑色]。根据规范化处理,我们后面会将灰度值缩放到[0,1]。 使用程序获取数据 from keras.datasets import mnist # 注意keras的默认路径是~/.keras/dataset...

阿尔卑斯LOVE 1072

【TensorFlow】线性加权法-mnist手写体识别实践 笔记

〇、前情提要 在b站跟着up主 白手起家的百万富翁 学mnist手写体识别实践。 参考: 【mnist手写体识别实践】想知道手写体识别如何做吗?跟美女算法专家一起了解mnist数据集 并用python实践手写体识别吧 https://www.bilibili.com/video/BV1YJ41137jy/?spm_id_from=333.788.videocard.0 minist数据集 - THE MNIST DATABASE of handwritten digits http://yann.lecu

weixin_43210113的博客 891

CNN-MNIST手写体识别

import tensorflow as tf import random import matplotlib.pyplot as plt from tensorflow.examples.tutorials.mnist import input_data import numpy as np #设置随机种子 tf.set_random_seed(777) #获取数据集 mnist = inpu...

weixin_43696515的博客 254

基于MNIST的手写体数字识别

MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片。它也包含每一张图片对应的标签,告诉我们这个是数字几。作为kaggle上机器学习入门级别比赛,手写体数字识别是最基本的一个。这里所用的数据为MNIST提供的0-9的手写体数字,kaggle上提供了csv格式的数据文件,可以直接读取。手写体数字识别采用监督学习的方式。监督学习是通过已有的训练样本(即已知数据及其对应的输出)去训练得到一个最优模型,再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的。

m0_54772292的博客 1009

Keras中使用CNN来完成MNIST手写体识别

     在上一篇文章中,使用了传统的多层感知机神经网络来实现手写体识别,具体参见这里,最终获得了大概97%的神经网络,还能不能得到更高的准确率的,答案当然是肯定的,那就是卷积神经网络CNN。在这里我们使用keras的CNN网络来实现MNIST手写体识别任务。具体的步骤与之前类似,直接贴代码吧:import numpy as np f = np.load('mnist.npz') x_train...

人如墨的博客 2515

深入探究手写体数字识别数据库:MNIST及其实战应用

本文还有配套的精品资源,点击获取 简介:手写体数字数据库是计算机视觉领域用于字符识别研究的核心资源,其中MNIST数据集被广泛应用于训练和测试手写数字识别模型。该数据库包含经过预处理的60,000个训练样本和10,000个测试样本,每个样本都是28x28像素的灰度图像。这些图像经过标准化处理,便于机器学习模型学习数字特征并实现高精度识别。该领域常用算法包括支持向量机、决策树...

weixin_30765637的博客 2386

train-labels-idx1-ubyte.gz

train-labels-idx1-ubyte.gz

Tensorflow学习实战之mnist手写体识别

Tensorflow学习实战之mnist手写体识别数据准备构建模型训练模型预测结果可视化显示 Tensorflow继续学习,今天是入门级的mnist手写体识别,改变前两次的线性回归,这次是逻辑回归,这样随之改变的是损失函数等 Tensorflow里面有一个examples的MNIST的手写,直接运行会自动下载。 数据准备 import tensorflow as tf import matplot...

爆炒小肥牛 710

mnist数据集ubyte文件打包

mnist数据集中train-images.idx3-ubyte,train-labels.idx1-ubyte,t10k-images.idx3-ubyte,t10k-labels.idx1-ubyte文件而非文件夹

MNIST手写体识别学习记录

对于负输入,输出为零。该项目使用包含60,000张训练图像和10,000张测试图像的MNIST数据集,每张图像为28×28像素的灰度手写数字(0-9)。本人在学习时对于Dropout的时机问题进行了思考,其在Linear与RELU激活函数之间,如果Dropout放在ReLU之后,被ReLU置0的神经元已经“死亡”,Dropout再屏蔽它们就没意义了。对于其使用的时机,一般情况下是线性之后,下一层之前,来添加非线性特性,Conv2d →。:6个5×5卷积核,步长为1,输出28×28×6的特征图。

qq_73038863的博客 995

python对Minist数据集读取

使用python对Minist数据集中图片集读取,并保存成图片集合,读取label数据集并保存在label.txt文件中。

Rope DFM一键整合包AI脸部替换教程:使用DeepFaceLab模型实现专业级视频和直播脸部替换

在AI脸部替换工具中,Rope凭借其出色的自动遮罩处理拔得头筹,结合DFM模型中的DFL XSeg遮罩处理,效果更是提升了一个台阶。因为在训练模型时,它已经通过大量的侧脸图片进行训练,达到了单张图片无法企及的效果。然而,想要通过DeepFaceLab获得专业级的效果,不仅难度大,时间成本也相当高,训练模型也是个不小的挑战。举个简单的例子,使用图片脸部替换时,如果佩戴眼镜,脸部替换后的可能会显得很假。另外,在视频中,比如歌手演唱时,话筒遮挡住脸部,这种场景也可以通过遮罩训练后的模型来处理,呈现出更逼真的效果。

m0_72580657的博客 8165

SwanLab入门深度学习:PyTorch MNIST手写体识别

SwanLab - MNIST手写体识别任务是一个经典的计算机视觉问题,SwanLab入门深度学习、PyTorch MNIST手写体识别、MNIST数据集、PyTorch教程、手写数字识别、深度学习入门、机器学习训练、可视化深度学习、PyTorch实例、神经网络模型、Python深度学习、机器学习项目、SwanLab教程、手写体识别算法、PyTorch基础

SoulmateY的博客 1031

ubuntu恢复分区表——testdisk

testdisk恢复ubuntu分区表testdisk介绍安装testdisk使用testdisk恢复分区表 testdisk介绍 testdisk 具有广泛的功能,包括恢复丢失或损坏的分区和使不能启动磁盘可以重新启动,也经常被用来恢复被误删的文件。 安装testdisk 如果系统分区表被删除,需要使用ubuntu的启动盘,选择try ubnutu模式进入试用系统。 1、可以直接在终端安装testdisk: sudo apt-get install testdisk 通过命令直接打开testdisk: t

ZNestor的博客 6460

【卷积神经网络】MNIST 手写体识别

LeNet-5 是经典卷积神经网络之一,于 1998 年由 Yann LeCun 等人提出。LeNet-5 网络使用了卷积层、池化层和全连接层,实现可以应用于手写体识别的卷积神经网络。TensorFlow 内置了MNIST 手写体数据集,可以很方便地读取数据集,并应用于后续的模型训练过程中。本文主要记录了如何使用 TensorFlow 2.0 实现 MNIST 手写体识别模型。

洋洋Young的博客 2000

Label Studio + SAM2分割半自动标注与yolo11训练

Label Studio + SAM2分割半自动标注与yolo11训练

schFallingCloud 1408

innovus:streamOut gds中pg text带有冒号(:)解决办法

streamOut后查看layout,发现部分PG text后面加了冒号,比如VDD: / VSS:。当然,这个问题还有另一种解决办法,就是通过脚本给terminal打text再streamOut。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1192

TensorFlow--(四)MNIST手写体数字识别问题

from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("../datasets/MNIST_data/", one_hot=True) Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes....

Mikowoo007的博客 325

Python爬虫教程:如何爬取多平台电商商品信息(价格、评价、库存)

本文介绍了如何编写一个跨平台电商商品爬虫,爬取多个平台的商品信息,包括商品名称、价格、评价等数据。通过Python的爬虫库(如requestsSelenium)和数据处理库(如pandasmatplotlib)的结合,我们可以高效地获取和分析电商平台上的商品信息。

2201_76125261的博客 918
上一篇: tf.einsum
下一篇: 把某个文件夹下的图片名称写入txt文件
jeffery0628
博客等级 码龄11年 39粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值