Tensorflow卷积神经网络实现手写字符识别

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

DATA_DIR = os.path.join(‘.‘, ‘mnist_link‘)

# =======================================
#            COMMON OPERATIONS
# =======================================
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‘)

def init_weight(shape):
    init = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(init)

def init_bias(shape):
    init = tf.constant(0.1, shape=shape)
    return tf.Variable(init)

# =======================================
#              BUILD CNN
# =======================================
def build_cnn(x):
    ‘‘‘
    build the cnn model
    ‘‘‘
    x_image = tf.reshape(x, [-1,28,28,1])

    w1 = init_weight([5,5,1,32])
    b1=init_bias([32])
    conv1 = tf.nn.relu(conv2d(x_image, w1) + b1)
    pool1 = max_pool_2x2(conv1)

    w2 = init_weight([5,5,32,64])
    b2 = init_bias([64])
    conv2 = tf.nn.relu(conv2d(pool1, w2) + b2)
    pool2 = max_pool_2x2(conv2)

    # fc
    w_fc1 = init_weight([7*7*64, 1024])
    b_fc1 = init_bias([1024])
    pool2_flat = tf.reshape(pool2, [-1, 7*7*64])
    fc1 = tf.nn.relu(tf.matmul(pool2_flat, w_fc1) + b_fc1)

    # dropout
    keep_prob = tf.placeholder(tf.float32)
    fc1_dropout = tf.nn.dropout(fc1, keep_prob)

    # fc2
    w_fc2 = init_weight([1024, 10])
    b_fc2 = init_bias([10])
    y_conv = tf.matmul(fc1_dropout, w_fc2) + b_fc2
    return y_conv, keep_prob

# =======================================
#            train and test
# =======================================
def main():
    ‘‘‘
    feed data into cnn model, and train and test the model
    ‘‘‘
    # import data
    print(‘import data...‘)
    mnist = input_data.read_data_sets(DATA_DIR, one_hot=True)

    # create graph for cnn
    x = tf.placeholder(tf.float32, [None, 784])
    y_ = tf.placeholder(tf.float32, [None, 10])
    y_conv, keep_prob = build_cnn(x)

    cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels = y_, logits = y_conv))
    optimizer = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
    correct_predictions = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_predictions, tf.float32))
    init = tf.global_variables_initializer()

    print(‘start training...‘)
    with tf.Session() as sess:
        sess.run(init)
        for i in range(2000):
            batch = mnist.train.next_batch(128)
            optimizer.run(feed_dict={x:batch[0], y_:batch[1], keep_prob:0.5})
            if i%100 == 0:
                train_acc = accuracy.eval(
                    feed_dict = {x:batch[0], y_:batch[1], keep_prob:1.0})
                print(‘step {}, accuracy is {}‘.format(i, train_acc))

        test_acc = accuracy.eval(feed_dict={x:mnist.test.images, y_:mnist.test.labels, keep_prob:1.0})
        print(‘test accuracy is {}‘.format(test_acc))

if __name__ == ‘__main__‘:
    print(‘run main‘)
    main()

原文地址:https://www.cnblogs.com/jiaxblog/p/9387755.html

时间: 2024-10-09 13:19:58

Tensorflow卷积神经网络实现手写字符识别的相关文章

tensorflow 卷积神经网络预测手写 数字

# coding=utf8 import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_datafrom PIL import Image def imageprepare(file_name): """ This function returns the pixel values. The imput is a png file location. ""&quo

卷积神经网络识别手写数字实例

卷积神经网络识别手写数字实例: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 定义一个初始化权重的函数 def weight_variables(shape): w = tf.Variable(tf.random_normal(shape=shape,mean=0.0,stddev=1.0)) return w # 定义一个初始化偏置的函数 def bias_variabl

12 使用卷积神经网络识别手写数字

看代码: 1 import tensorflow as tf 2 from tensorflow.examples.tutorials.mnist import input_data 3 4 # 下载训练和测试数据 5 mnist = input_data.read_data_sets('MNIST_data/', one_hot = True) 6 7 # 创建session 8 sess = tf.Session() 9 10 # 占位符 11 x = tf.placeholder(tf.f

TensorFlow(九):卷积神经网络实现手写数字识别以及可视化

上代码: 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 // batch_size #参数概要 def vari

TensorFlow 卷积神经网络--卷积层

之前我们已经有一个卷积神经网络识别手写数字的代码,执行下来正确率可以达到96%以上. 若是再优化下结构,正确率还可以进一步提升1~2个百分点. 卷积神经网络在机器学习领域有着广泛的应用.现在我们就来深入了解下卷积神经网络的细节. 卷积层,听名字就知道,这是卷积神经网络中的重要部分. 这个部分被称为过滤器(filter)或者内核(kernel) Tensorflow的官方文档中称这个部分为过滤器(filter). 在一个卷积层总,过滤器所处理的节点矩阵的长和宽都是由人工指定的,这个节点矩阵的尺寸也

Tensorflow卷积神经网络[转]

Tensorflow卷积神经网络 卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络, 在计算机视觉等领域被广泛应用. 本文将简单介绍其原理并分析Tensorflow官方提供的示例. 关于神经网络与误差反向传播的原理可以参考作者的另一篇博文BP神经网络与Python实现. 工作原理 卷积是图像处理中一种基本方法. 卷积核是一个nxn的矩阵通常n取奇数, 这样矩阵就有了中心点和半径的概念. 对图像中每个点取以其为中心的n阶方阵, 将该方阵与卷积核中

用BP人工神经网络识别手写数字

http://wenku.baidu.com/link?url=HQ-5tZCXBQ3uwPZQECHkMCtursKIpglboBHq416N-q2WZupkNNH3Gv4vtEHyPULezDb50ZcKor41PEikwv5TfTqwrsQ4-9wmH06L7bYD04u 用BP人工神经网络识别手写数字 yzw20091201上传于2013-01-31|暂无评价|356人阅读|13次下载|暂无简介|举报文档 在手机打开 赖勇浩( http://laiyonghao.com ) 这是我读工

神经网络用于手写数字识别

一:人工神经网络 人类之所以能够思考,学习,判断,大部分都要归功于人脑中复杂的神经网络.虽然现在人脑的机理还没有完全破译,但是人脑中神经元之间的连接,信息的传递都已为人所知晓.于是人们就想能否模拟人脑的功能用于解决其他问题,这就发展出人工神经网络. 人工神经网络(artificial neural network,缩写ANN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应系统

《神经网络和深度学习》系列文章一:使用神经网络识别手写数字

出处: Michael Nielsen的<Neural Network and Deep Leraning> 本节译者:哈工大SCIR硕士生 徐梓翔 (https://github.com/endyul) 声明:我们将不定期连载该书的中文翻译,如需转载请联系[email protected],未经授权不得转载. “本文转载自[哈工大SCIR]微信公众号,转载已征得同意.” 使用神经网络识别手写数字 感知机 sigmoid神经元 神经网络的结构 用简单的网络结构解决手写数字识别 通过梯度下降法学