mnist数据集

使用MNIST数据集训练手写数字识别模型 MNIST 数据集(手写数字数据集)是一个公开的公共数据集,任何人都可以免费获取它。目前,它已经是一个作为机器学习入门的通用性特别强的数据集之一,所以对于想要学习机器学习分类的、深度神经网络分类的、图像识别与处理的小伙伴,都可以选择MNIST数据集入门。 阅读详情

训练模型

import tensorflow as tf

import keras
from keras.models import Sequential
from keras.layers import Dense,Dropout, Flatten,Conv2D, MaxPooling2D
# from keras.optimizers import SGD
from tensorflow.keras.optimizers import Adam,Nadam, SGD


from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

print('tf',tf.__version__)
print('keras',keras.__version__)


# batch大小,每处理128个样本进行一次梯度更新
batch_size = 64
# 训练素材类别数
num_classes = 10
# 迭代次数
epochs = 5



f = np.load("mnist.npz")
x_train, y_train = f['x_train'], f['y_train']
x_test, y_test = f['x_test'], f['y_test']
f.close()
print(x_train.shape,"  ",y_train.shape)
print(x_test.shape,"  ",y_test.shape)

# im=plt.imshow(x_train[0],cmap="gray")
# plt.show()

## 维度合并784 = 28*28
x_train = x_train.reshape(60000, 784).astype('float32')
x_test = x_test.reshape(10000, 784).astype('float32')

## 归一化,像素点的值 转成 0-1 之间的数字
x_train /= 255
x_test /= 255

# print(x_train[0])

# 标签转换为独热码
y_train = tf.keras.utils.to_categorical(y_train, num_classes)
y_test = tf.keras.utils.to_categorical(y_test, num_classes)
# print(y_train[0]) ## 类似 [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]

print(x_train.shape,"  ",y_train.shape)
print(x_test.shape,"  ",y_test.shape)

# 构建模型
model = Sequential()
model.add(Dense(512, activation='relu',input_shape=(784,)))
model.add(Dense(256, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
model.summary()

# [编译模型] 配置模型,损失函数采用交叉熵,优化采用Adadelta,将识别准确率作为模型评估
model.compile(loss=tf.keras.losses.categorical_crossentropy, optimizer=tf.keras.optimizers.Adadelta(), metrics=['accuracy'])
#  validation_data为验证集
model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_test, y_test))

# 开始评估模型效果 # verbose=0为不输出日志信息
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1]) # 准确度


model.save('mnist_model_weights.h5') # 保存训练模型

训练结果

Epoch 4/5
938/938 [==============================] - 7s 7ms/step - loss: 1.5926 - accuracy: 0.7292 - val_loss: 1.4802 - val_accuracy: 0.7653
Epoch 5/5
938/938 [==============================] - 6s 6ms/step - loss: 1.4047 - accuracy: 0.7686 - val_loss: 1.2988 - val_accuracy: 0.7918
Test loss: 1.2988097667694092
Test accuracy: 0.7918000221252441

Process finished with exit code 0

测试模型


import tensorflow as tf

from PIL import Image
import numpy as np
from keras.models import load_model

# 构建模型
model = load_model('mnist_model_weights.h5') # 加载训练模型
# model.summary()

def read_image(img_name):
    im = Image.open(img_name).resize((28,28),Image.ANTIALIAS).convert('L') # 将要识别的图缩放到训练图一样的大小,并且灰度化
    data = np.array(im)
    return data

images=[]
images.append(read_image("test.png"))
# print(images)

X = np.array(images)
print(X.shape)
X=X.reshape(1, 784).astype('float32')
print(X.shape)
X /=255
# print(X[0:1])
result=model.predict(X[0:1])[0] # 识别出第一张图的结果,多张图的时候,把后面的[0] 去掉,返回的就是多张图结果
num=0 # 用来分析预测的结果
for i in range(len(result)): # result的长度是10
    # print(result[i]*255)
    if result[i]*255>result[num]*255: # 值越大,就越可能是结果
        num=i

print("预测结果",num)

将数据集转换为图片


#coding: utf-8
import os
import tensorflow as tf
import input_data
from PIL import Image

'''
函数功能:按照bmp格式提取mnist数据集中的图片
参数介绍:
    mnist_dir   mnist数据集存储的路径
    save_dir    提取结果存储的目录
'''

mint=tf.keras.datasets.mnist

def extract_mnist(mnist_dir, save_dir):
    rows = 28
    cols = 28

    # 加载mnist数据集
    # one_hot = True为默认打开"独热编码"
    mnist = input_data.read_data_sets(mnist_dir, one_hot=False)
    # 获取训练图片数量
    shape = mnist.train.images.shape
    images_train_count = shape[0]
    pixels_count_per_image = shape[1]
    # 获取训练标签数量=训练图片数量
    # 关闭"独热编码"后,labels的类型为[7 3 4 ... 5 6 8]
    labels = mnist.train.labels
    print(labels)
    exit(0)
    labels_train_count = labels.shape[0]

    if (images_train_count == labels_train_count):
        print("训练集共包含%d张图片,%d个标签" % (images_train_count, labels_train_count))
        print("每张图片包含%d个像素" % (pixels_count_per_image))
        print("数据类型为", mnist.train.images.dtype)

        # mnist图像数值的范围为[0,1], 需将其转换为[0,255]
        for current_image_id in range(images_train_count):
            for i in range(pixels_count_per_image):
                if mnist.train.images[current_image_id][i] != 0:
                    mnist.train.images[current_image_id][i] = 255

            if ((current_image_id + 1) % 50) == 0:
                print("已转换%d张,共需转换%d张" %
                      (current_image_id + 1, images_train_count))

        # 创建train images的保存目录, 按标签保存
        for i in range(10):
            dir = "%s/%s" % (save_dir, i)
            print(dir)
            if not os.path.exists(dir):
                os.mkdir(dir)

        # indices = [0, 0, 0, ..., 0]用来记录每个标签对应的图片数量
        indices = [0 for x in range(0, 10)]
        for i in range(images_train_count):
            new_image = Image.new("L", (cols, rows))
            # 遍历new_image 进行赋值
            for r in range(rows):
                for c in range(cols):
                    new_image.putpixel(
                        (r, c), int(mnist.train.images[i][c + r * cols]))

            # 获取第i张训练图片对应的标签
            label = labels[i]
            image_save_path = "%s/%s/%s.bmp" % (save_dir, label,
                                                indices[label])
            indices[label] += 1
            new_image.save(image_save_path)

            # 打印保存进度
            if ((i + 1) % 50) == 0:
                print("图片保存进度: 已保存%d张,共需保存%d张" % (i + 1, images_train_count))
    else:
        print("图片数量与标签数量不一致!")


if __name__ == '__main__':
    mnist_dir = "Mnist_Data"
    save_dir = "Mnist_Data_TrainImages"
    extract_mnist(mnist_dir, save_dir)


利用图片制作mnist格式数据集

import os
from PIL import Image
from array import *
from random import shuffle

# # 文件组织架构:
# ├──training-images
# │   └──0(类别为0的图像)
# │   ├──1(类别为1的图像)
# │   ├──2(类别为2的图像)
# │   ├──3(类别为3的图像)
# │   └──4(类别为4的图像)
# ├──test-images
# │   └──0(类别为0的图像)
# │   ├──1(类别为1的图像)
# │   ├──2(类别为2的图像)
# │   ├──3(类别为3的图像)
# │   └──4(类别为4的图像)
# └── mnist数据集制作.py(本脚本)

# Load from and save to
Names = [['./training-images', 'train'], ['./test-images', 'test']]

for name in Names:

    data_image = array('B')
    data_label = array('B')

    print(os.listdir(name[0]))
    FileList = []
    for dirname in os.listdir(name[0])[0:]:  # [1:] Excludes .DS_Store from Mac OS
        # print(dirname)
        path = os.path.join(name[0], dirname)
        # print(path)
        for filename in os.listdir(path):
            # print(filename)
            if filename.endswith(".png"):
                FileList.append(os.path.join(name[0] + '/', dirname + '/', filename))
        print(FileList)
    shuffle(FileList)  # Usefull for further segmenting the validation set

    for filename in FileList:

        label = int(filename.split('/')[2])
        print(filename)
        Im = Image.open(filename)
        # print(Im)

        pixel = Im.load()

        width, height = Im.size

        for x in range(0, width):
            for y in range(0, height):
                data_image.append(pixel[y, x])

        data_label.append(label)  # labels start (one unsigned byte each)

    hexval = "{0:#0{1}x}".format(len(FileList), 6)  # number of files in HEX

    # header for label array

    header = array('B')
    header.extend([0, 0, 8, 1, 0, 0])
    header.append(int('0x' + hexval[2:][:2], 16))
    header.append(int('0x' + hexval[2:][2:], 16))

    data_label = header + data_label

    # additional header for images array

    if max([width, height]) <= 256:
        header.extend([0, 0, 0, width, 0, 0, 0, height])
    else:
        raise ValueError('Image exceeds maximum size: 256x256 pixels');

    header[3] = 3  # Changing MSB for image data (0x00000803)

    data_image = header + data_image

    output_file = open(name[1] + '-images-idx3-ubyte', 'wb')
    data_image.tofile(output_file)
    output_file.close()

    output_file = open(name[1] + '-labels-idx1-ubyte', 'wb')
    data_label.tofile(output_file)
    output_file.close()

# 运行脚本得到四个文件test-images-idx3-ubyte、test-labels-idx1-ubyte、train-images-idx3-ubyte、train-labels-idx1-ubyte
# 在cmd中利用gzip -c train-labels-idx1-ubyte > train-labels-idx1-ubyte.gz命令对上述四个文件压缩得到最终的mnist格式数据集

神经网络应用: 手写数字识别(MNIST数据集) 神经网络应用: 手写数字识别(MNIST数据集) tensorflow 版 阅读详情

相关推荐

Pytorch 之 MNIST 数据集实现

目录1. 数据集介绍2. 代码2. 读代码(个人喜欢的顺序)2.1. 导入模块部分:2.2. Main 函数: 1. 数据集介绍 一般而言,MNIST 数据集测试就是机器学习和深度学习当中的"Hello World"工程。几乎是所有的教程都会把它放在最开始的地方。这是因为,这个简单的工程包含了大致的机器学习流程,通过练习这个工程有助于读者加深理解机器学习或者是深度学习的大致流程。 MNIST(Mi...

CaoChengtai的博客 2万+

从手写数字识别入门深度学习丨MNIST数据集详解

就像无数人从敲下“Hello World”开始代码之旅一样,许多研究员从“MNIST数据集”开启了人工智能的探索之路。

OpenDataLab的博客 4万+

pytorch进行fashion mnist数据集分类

标题1.数据集介绍 (1)MNIST MNIST是深度学习最基本的数据集之一,由CNN鼻祖yann lecun建立的一个手写字符数据集,包含60000张训练图像和10000张测试图像,包含数字0-9共10个类别. (2)FASHION MNIST 由于MNIST数据集太简单,简单的网络就可以达到99.7%的top one准确率,也就是说在这个数据集上表现较好的网络,在别的任务上表现不一定好。因此...

lemonHe的博客 2万+

MNIST数据集

MNIST数据集

Iron802的博客 6万+

tensorflow2.0下载mnist数据集出错,从本地导入mnist数据集

1.一开始采用官网上利用input_data来加载本地数据集的方法,但会报出下面的错误 No module named 'tensorflow.examples.tutorials' 2.后面采用 keras加载mnist数据集,又会报出如下错误 URL fetch fail:http://googelsourc…………………………………… 解决办法:先将mnist数据集下载到本地,放到自己想...

胡图图的博客 7248

MNIST数据集学习

目录一、MNIST数据介绍首先,我们使用sklearn的函数来获取MNIST数据集(主要是代码)二、训练一个二分类器三、性能考核使用交叉验证测量精度混淆矩阵精度和召回率精度/召回率权衡ROC曲线 一、MNIST 数据介绍 本章使用MNIST数据集,这是一组由美国高中生和人口调查局员工手写的70000个数字的图片。每张图像都用其代表的数字标记。这个数据集被广为使用,因此也被称作是机器学习领域的“He...

weixin_43869980的博客 6775

详解MNIST数据集下载、解析及显示的Python实现

MNIST(modified national institute of standard and technology)数据集由Yann LeCun等人于1994年创建一个大型手写数字数据库(包含0~9十个数字)。MNIST数据集是深度学习和计算机视觉领域入门级的数据集,类似于编程语言的Hello Word。本篇博客完整地给出了多种下载、解析及可视化方案,以供参考和学习。

KRISNAT 16万+

MNIST 数据集下载及图片可视化

MNIST 数据集下载及可视化 MNIST 介绍 下载数据集并保存成图片 MNIST 数据集下载及可视化 最近用到了 MNIST 训练神经网络,但是下载下来的数据集默认是 `*-ubyte.gz` 的压缩包。 无法直观的看到数据本身的图片是什么样子,训练的神经网络达到99% 的正确率还是觉的一头雾水, 想看一下自己到底用的什么图片。 但是网上关于 MNIST数据集可视化 的文章有些比较繁琐,特在此记录将MNIST数据集下载下来,并以图片形式保存到本地的操作步骤。 MNIST 介绍 MNIST .

二代红鱼的博客 7101

详解 MNIST 数据集

MNIST 数据集已经是一个被”嚼烂”了的数据集, 很多教程都会对它”下手”, 几乎成为一个 “典范”. 不过有些人可能对它还不是很了解, 下面来介绍一下.MNIST 数据集可在 http://yann.lecun.com/exdb/mnist/ 获取, 它包含了四个部分: Training set images: train-images-idx3-ubyte.gz (9.9 MB, 解压后 47

Liu-Cheng Xu 32万+

MNIST数据集导出

MNIST手写字符数据集的下载、格式解析、数据提取和保存。

freehawkzk的专栏 1319

【论文+CAD图纸】光储充一体化微电网设计

近些年来,我国的经济发展迅速,对能源的需求不断增长,也加重了对环境的破坏,违背了我国的可持续发展战略。所以迫切需要寻找新型能源。由于太阳能在使用时不会产生污染,所以太阳能逐渐受到人们的重视。我国的太阳能资源丰富,具有的开发利用潜力。特别是近些年“光储充”一体化充电站为高科技绿色充电模式,“以光养桩”使光伏、储能、智能充电协同,智能微电网与公共电网互动,本设计对探索清洁可再生能源在民用场合的应用,有着重大的理论和工程价值。本文综述国内外相关光伏发电的成果和发展现状;

weixin_761237174的博客 925

模仿mnist数据集制作自己的数据集

模仿mnist数据集制作自己的数据集 最近看深度学习,用TensorFlow跑教程里的模型,发现教程里大多都是用mnist和cifar这两个数据集来演示的。想测试自己的数据集看看初步效果,于是就想套用现有的模型,将自己的数据集做成和mnist或cifar数据集格式一模一样的格式。然后就发现Tensorflow里没有现成的方法可以将图片转换成类似于mnist和cifar数据集格式的方法。于是就百度

YF_Li123的博客 4万+

深度学习暑期科研项目(两个月发EI论文)

对本科生而言,越早接触系统的科研训练开始上手科研项目,就越能在未来的升学求职中占据很大的优势。暑假是提升个人简历、丰富科研经历的最佳时期!哈尔滨工业大学博士师兄也会在8月1日开始带大家上手科研项目,并撰写发表EI会议论文。

Magnolia_He的博客 1443

Mnist数据集介绍

Mnist数据集已经是一个被"嚼烂"了的数据集了,很多关于神经网络的教程都会对它下手。因此在开始深度学习之前,先对这个数据集介绍一下。 Mnist数据集图片格式介绍 Mnist数据集分为两部分,分别含有60000张训练图片和10000张测试图片。 每一张图片包含28*28个像素。Mnist数据集把代表一张图片的二维数据转开成一个向量,长度为28*28=784。因此在Mnist的训练数据集中mnis...

llfjcmx的博客 2万+

Autoware1.14-摄像头目标检测YOLO-V3

在Autoware1.14中部署YOLOV3

weixin_43687753的博客 3139

校招总结—FPGA从入门到放弃

校招总结—FPGA从入门到放弃 感谢咸鱼FPGA的授权转发,原文地址为https://www.cnblogs.com/xianyufpga/ 其实 offer 早就定下来了,最近忙着入党考试,现在才腾出时间来写个总结。我校招开始于 7 月底,算是比较晚了,后面加了各大校招交流群,发现很多同学都是过完年后就开始打磨项目、复习基础、寻找实习。对比之下我这准备确实仓促,不过结果还算满意。 ...

qq_31515205的博客 8606

什么是 MNIST数据集

MNIST(Modified National Institute of Standards and Technology)数据集是机器学习和深度学习中最常用的经典数据集之一。它包含 28×28 的灰度手写数字图片,涵盖了从 0 到 9 的 10 个类别。MNIST 数据集广泛用于图像分类、机器学习算法的验证和深度学习模型的初学训练。

彬彬侠的博客 2569

手把手教你用三菱PLC控制JET伺服原点:从硬件接线到GXWORKS3程序调试

本文详细介绍了如何使用三菱PLC控制JET伺服系统实现原点回归功能,涵盖硬件接线、参数配置到GX Works3程序调试的全流程。通过实战指南,帮助工程师快速掌握伺服控制技术,提升工业自动化项目的实施效率。

weixin_30642561的博客 535

MNIST——手写数字识别数据集

MNIST数据集由Yann LeCun搜集,是一个大型的手写体数字数据库,通常用于训练各种图像处理系统,也被广泛用于机器学习领域的训练和测试。MNIST数字文字识别数据集数据量不会太多,而且是单色的图像,较简单,适合深度学习初学者练习建立模型、训练、预测。MNIST数据库中的图像集是NIST(National Institute of Standards and Technology)的两个数据库...

魔筝炼药师 3万+

HTML满屏跳动的爱心(完整代码)

HTML语言实现满屏跳动爱心的完整代码。

AIGC 12万+

基于 YOLOv26 的 PCB 板缺陷检测:工业级视觉实战

本文提出了一种基于YOLOv26的PCB板缺陷检测系统,通过深度学习技术实现对PCB板缺陷的自动化检测。系统能够识别短路、开路、焊点不良等8种常见缺陷,具有高精度、多类别分类和实时推理等优势。文章详细介绍了系统架构,包括数据采集、预处理、YOLOv26模型检测和后处理模块。在代码实现部分,给出了环境配置、数据预处理与增强的具体方法,使用Albumentations库进行图像增强处理。该系统为电子制造业提供了高效、准确的PCB质量检测解决方案,显著提升了检测效率和准确性。

一键难忘的博客 339

Mnist数据集简介

MNIST是一个手写体数字的图片数据集,该数据集来由美国国家标准与技术研究所(National Institute of Standards and Technology (NIST))发起整理,一共统计了来自250个不同的人手写数字图片,其中50%是高中生,50%来自人口普查局的工作人员。该数据集的收集目的是希望通过算法,实现对手写数字的识别。 1998年,Yan LeCun 等人发表了论文《Gradient-Based Learning Applied to Document Recognition》

查理王的博客 6万+

用python画年度和月度的日历图

用python画各种日历图,可以区分月份来画也可以画一整年的,日历图中可以体现自己的信息

weixin_44853840的博客 2138

MNIST导入图片数据集

一 MNIST简介MNIST是一个入门级的计算机视觉数据集。当我们开始学习编程时,第一件事往往是学习打印Hello World。在机器学习入门的领域里,我们会用MNIST数据集来实验各种模型。MNIST里包含各种手写数字图片。也包含每张图片对应的标签,告诉我们这个数字几。MNIST数据集合的官网是http://yann.lecun.com/exdb/mnist/二 MNIST编程一般步骤1 导入M...

实践求真知 1万+

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

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

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

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

如何加载mnist和fashion-mnist数据集

mnist手写体数据集是人工智能中最简单, 数据集下载的连接是: mnist数据集下载 fashion-mnist数据集的存储和mnist数据集的存储形式一样,数据集下载的连接是: fashion-mnist数据集下载 程序讲解:程序分成两个部分 首先使用load_mnist() 是加载mnist数据集或者是fashion-mnist数据集,两者格式完全相同,所以建议是将其保存到不同...

YYLin 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: python图片去重
下一篇: 训练语音识别模型
vive921
博客等级 码龄8年 10粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值