mnist手写数字检测

# -*- coding: utf-8 -*-
"""
Created on Tue Apr 23 06:16:04 2019

@author: 92958
"""

import numpy as np
import tensorflow as tf

#下载并载入mnist(55000*28*28图片)
#from tensorflow.examples.tutorials.mnist import input_data

#创造变量mnist,用特定函数,接收
mnist = input_data.read_data_sets('F:\\python\\TensorFlow\\mnist\\mnist_data\\',one_hot=True)
#one_hot独热码,例,:0001000000

#None表示tensor的第一个维度可以是任何长度
input_x = tf.placeholder(tf.float32,[None,28*28])/255.   #除255表示255个灰度值
output_y = tf.placeholder(tf.int32,[None, 10])       #10个输出标签
input_x_images = tf.reshape(input_x, [-1,28,28,1])     #改变形状之后的输出  

#从Test选3000个数据
test_x = mnist.test.images[:3000]#图片
test_y = mnist.test.labels[:3000]#标签

#日志
path = "F:\\python\\TensorFlow\\mnist\\log"

#构建第一层神经网络
conv1 = tf.layers.conv2d(
        inputs=input_x_images,   #形状28.28.1
        filters =32,             #32个过滤器输出深度32
        kernel_size=[5,5],       #过滤器在二维的大小5*5
        strides=1,               #步长为1
        padding='same',          #same表示输出大小不变,因此外围补零两圈
        activation=tf.nn.relu    #激活函数为relu
        )
#输出得到28*28*32

#第一层池化层pooling(亚采样)
pool1 = tf.layers.max_pooling2d(
        inputs=conv1,       #形状为28*28*32
        pool_size=[2,2],     #过滤器大小2*2
        strides=2,          #步长为2
        )
#形状14*14*32

#第二层卷积层
conv2 = tf.layers.conv2d(
        inputs=pool1,            #形状14*14*32
        filters =64,             #32个过滤器输出深度64
        kernel_size=[5,5],       #过滤器在二维的大小5*5
        strides=1,               #步长为1
        padding='same',          #same表示输出大小不变,因此外围补零两圈
        activation=tf.nn.relu    #激活函数为relu
        )
#形状14*14*64

#第二层池化层pooling(亚采样)
pool2 = tf.layers.max_pooling2d(
        inputs=conv2,       #形状为14*14*64
        pool_size=[2,2],     #过滤器大小2*2
        strides=2,          #步长为2
        )
#形状7*7*64

#平坦化(flat)
flat = tf.reshape(pool2,[-1,7*7*64])   #形状7*7*64

#全连接层
dense = tf.layers.dense(inputs = flat,
                        units=1024, #有1024个神经元
                        activation=tf.nn.relu#激活函数relu
                        )

#dropout:丢弃50%,rate=0.5
dropout = tf.layers.dropout(inputs=dense, rate=0.5)

#10个神经元的全连接层,这里不用激活函数来做非线性化
logits=tf.layers.dense(inputs=dropout,units=10)#输出1*1*10

#计算误差,(计算cross entropy(交叉熵),再用softmax计算百分比概率)
loss = tf.losses.softmax_cross_entropy(onehot_labels=output_y,
                                       logits=logits)
#Adam优化器来最小化误差
train_op = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)

#精度
#返回
accuracy = tf.metrics.accuracy(
        labels=tf.argmax(output_y,axis=1),
        predictions=tf.argmax(logits,axis=1),)[1]

#创建会话
sess = tf.Session()

#初始化变量全局和局部
init = tf.group(tf.global_variables_initializer(),
                tf.local_variables_initializer())

sess.run(init)
writer =tf.summary.FileWriter(path,sess.graph)
for i in range(1000):
    batch = mnist.train.next_batch(50)
    #从train数据集里取下一个50个样本
    train_loss,train_op_= sess.run([loss,train_op],
                                   {input_x:batch[0],output_y:batch[1]})
    if i%100==0:
        test_accuracy = sess.run(accuracy,
                                 {input_x:test_x,output_y:test_y})
        print("Step=",i)
        print("Train loss=",train_loss)
        print("Test accuracy=",test_accuracy)

#测试
test_output=sess.run(logits,{input_x:test_x[:20]})
inferenced_y=np.argmax(test_output,1)
print(inferenced_y,'推测')
print(np.argmax(test_y[:20],1),'真实')

mnist数据集http://yann.lecun.com/exdb/mnist/

原文地址:https://www.cnblogs.com/nnmaitian/p/10759866.html

时间: 2024-10-13 22:24:22

mnist手写数字检测的相关文章

tensorflow 基础学习五:MNIST手写数字识别

MNIST数据集介绍: from tensorflow.examples.tutorials.mnist import input_data # 载入MNIST数据集,如果指定地址下没有已经下载好的数据,tensorflow会自动下载数据 mnist=input_data.read_data_sets('.',one_hot=True) # 打印 Training data size:55000. print("Training data size: {}".format(mnist.

简单HOG+SVM mnist手写数字分类

使用工具 :VS2013 + OpenCV 3.1 数据集:minst 训练数据:60000张 测试数据:10000张 输出模型:HOG_SVM_DATA.xml 数据准备 train-images-idx3-ubyte.gz:  training set images (9912422 bytes) train-labels-idx1-ubyte.gz:  training set labels (28881 bytes) t10k-images-idx3-ubyte.gz:   test s

学习OpenCV——SVM 手写数字检测

转自http://blog.csdn.net/firefight/article/details/6452188 是MNIST手写数字图片库:http://code.google.com/p/supplement-of-the-mnist-database-of-handwritten-digits/downloads/list 其他方法:http://blog.csdn.net/onezeros/article/details/5672192 使用OPENCV训练手写数字识别分类器 1,下载训

Tensorflow实践 mnist手写数字识别

minst数据集                                         tensorflow的文档中就自带了mnist手写数字识别的例子,是一个很经典也比较简单的入门tensorflow的例子,非常值得自己动手亲自实践一下.由于我用的不是tensorflow中自带的mnist数据集,而是从kaggle的网站下载下来的,数据集有些不太一样,所以直接按照tensorflow官方文档上的参数训练的话还是踩了一些坑,特此记录. 首先从kaggle网站下载mnist数据集,一份是

基于MNIST手写数字数据集的数字识别小程序

30行代码奉上!(MNIST手写数字的识别,识别率大约在91%,简单尝试的一个程序,小玩具而已) 1 import tensorflow.examples.tutorials.mnist.input_data as input_data 2 import tensorflow as tf 3 mnist = input_data.read_data_sets('/temp/', one_hot=True) 4 5 #设置 6 x = tf.placeholder(tf.float32,[None

MNIST手写数字数据库

手写数字库很容易建立,但是总会很浪费时间.Google实验室的Corinna Cortes和纽约大学柯朗研究所的Yann LeCun建有一个手写数字数据库,训练库有60,000张手写数字图像,测试库有10,000张. 请访问原站 http://yann.lecun.com/exdb/mnist/ 该数据库在一个文件中包含了所有图像,使用起来有所不便.如果我把每个图像分别保存,成了图像各自独立的数据库. 并在Google Code中托管. 如果你有需要,欢迎在此下载: http://yann.le

Pytorch入门实战一:LeNet神经网络实现 MNIST手写数字识别

记得第一次接触手写数字识别数据集还在学习TensorFlow,各种sess.run(),头都绕晕了.自从接触pytorch以来,一直想写点什么.曾经在2017年5月,Andrej Karpathy发表的一片Twitter,调侃道:l've been using PyTorch a few months now, l've never felt better, l've more energy.My skin is clearer. My eye sight has improved.确实,使用p

MNIST手写数字分类simple版(03-2)

simple版本nn模型 训练手写数字处理 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #载入数据集 mnist=input_data.read_data_sets("MNIST_data", one_hot=True) #每个批次的大小 batch_size=100 #计算一共有多少批次 n_batch=mnist.train.num_examples // ba

MNIST手写数字图片识别(线性回归、CNN方法的手工及框架实现)(未完待续)

0-Background 作为Deep Learning中的Hello World 项目无论如何都要做一遍的. 代码地址:Github 练习过程中将持续更新blog及代码. 第一次写博客,很多地方可能语言组织不清,请多多提出意见..谢谢~ 0.1 背景知识: Linear regression CNN LeNet-5 AlexNet ResNet VGG 各种regularization方式 0.2 Catalog 1-Prepare 2-MNIST 3-LinearRegression 1-P