tensorflow+python flask进行手写识别_使用tensorflow进行手写数字识别

本文介绍如何使用TensorFlow和Python的Flask框架进行手写数字识别。通过MNIST数据集训练神经网络,比较了二次代价函数和交叉熵代价函数在20次迭代后的测试准确率,结果显示两者表现接近。
摘要由CSDN通过智能技术生成

首先要在对应的目录下安装好手写数字识别数据集。

编写代码如下所示:

import tensorflow as tf

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("F:/anaconda/workspace/Data/MNIST_data",one_hot=True)

#设置每个批次的大小,一次运算100张图片

batch_size = 100

#计算共有多少批次

n_batch = mnist.train.num_examples // batch_size

#创建两个placeholder

x = tf.placeholder(tf.float32,[None,784])

y = tf.placeholder(tf.float32,[None,10])

#创建简单的神经网络

W = tf.Variable(tf.zeros([784,10]))

b = tf.Variable(tf.zeros([10]))

prediction = tf.nn.sigmoid(tf.matmul(x,W)+b)

#二次代价函数

# loss = tf.reduce_mean(tf.square(y-prediction))

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))

#使用梯度下降法

train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)

# train_step = tf.train.AdamOptimizer(0.01).minimize(loss)

#初始化变量

init = tf.global_variables_initializer()

#结果存放在一个布尔类型列表中 argmax:返回一位张量中的最大值所在的位置(概率最大的位置)

correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))

#计算准确率 cast:把true转化为1.0,false转化为0.0

accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

with tf.Session() as sess:

sess.run(init)

for epoch in range(21):

for bach in range(n_batch):

batch_xs,batch_ys = mnist.train.next_batch(batch_size)

sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys})

#计算准确率

acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})

print("Iter "+ str(epoch) + "Testing Accuracy "+ str(acc))

代价 函数可以更换,本文使用了两种代价函数,一个是二次代价函数另一个是交叉熵代价函数,进行20次训练后的准确率为:

#交叉熵

Iter 0Testing Accuracy 0.8666

Iter 1Testing Accuracy 0.8774

Iter 2Testing Accuracy 0.8841

Iter 3Testing Accuracy 0.8874

Iter 4Testing Accuracy 0.8895

Iter 5Testing Accuracy 0.893

Iter 6Testing Accuracy 0.8944

Iter 7Testing Accuracy 0.8971

Iter 8Testing Accuracy 0.8972

Iter 9Testing Accuracy 0.8968

Iter 10Testing Accuracy 0.8996

Iter 11Testing Accuracy 0.8998

Iter 12Testing Accuracy 0.9011

Iter 13Testing Accuracy 0.9014

Iter 14Testing Accuracy 0.9009

Iter 15Testing Accuracy 0.9014

Iter 16Testing Accuracy 0.9016

Iter 17Testing Accuracy 0.9021

Iter 18Testing Accuracy 0.9032

Iter 19Testing Accuracy 0.9034

Iter 20Testing Accuracy 0.903

#二次代价函数

Iter 0Testing Accuracy 0.8175

Iter 1Testing Accuracy 0.8515

Iter 2Testing Accuracy 0.8639

Iter 3Testing Accuracy 0.8709

Iter 4Testing Accuracy 0.8769

Iter 5Testing Accuracy 0.8809

Iter 6Testing Accuracy 0.8844

Iter 7Testing Accuracy 0.8865

Iter 8Testing Accuracy 0.8896

Iter 9Testing Accuracy 0.8907

Iter 10Testing Accuracy 0.8921

Iter 11Testing Accuracy 0.8933

Iter 12Testing Accuracy 0.8947

Iter 13Testing Accuracy 0.8962

Iter 14Testing Accuracy 0.8965

Iter 15Testing Accuracy 0.897

Iter 16Testing Accuracy 0.8985

Iter 17Testing Accuracy 0.8989

Iter 18Testing Accuracy 0.8994

Iter 19Testing Accuracy 0.8999

Iter 20Testing Accuracy 0.9005

看起来两者的差距并不是很大。在这里的代价函数和优化器自己可以调整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值