用卷积神经网络对mnist进行数字识别程序(tensorflow)

#下载数据集
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data",one_hot = True)

#引入tensorflow
import tensorflow as tf
#建立session对象
sess = tf.InteractiveSession()

#占位符(图像和标签)
x = tf.placeholder(tf.float32, shape=[None, 784])
y_ = tf.placeholder(tf.float32, shape=[None, 10])

#权重函数
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")

#第一层卷积
W_conv1 = weight_variable([5,5,1,32])
b_conv1 = bias_variable([32])

x_image = tf.reshape(x, [-1,28,28,1])

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)

#全连接层
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)

keep_prob = tf.placeholder(tf.float32)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)

#softmax层
W_fc2 = weight_variable([1024,10])
b_fc2 = bias_variable([10])

y_conv = tf.matmul(h_fc1_drop, W_fc2)+b_fc2

#训练和评价模型
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels = y_,logits = y_conv))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_,1), tf.argmax(y_conv,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
sess.run(tf.global_variables_initializer())

for i in range(20000):
    batch = mnist.train.next_batch(50)
    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 %0.4f"%(i,train_accuracy))
    train_step.run(feed_dict = {x:batch[0],y_:batch[1],keep_prob:0.5})

print("test accuracy %0.4f"%accuracy.eval(feed_dict = {x:mnist.test.images,y_:mnist.test.labels,keep_prob:1.0}))

运行结果:

测试集准确率:99.2%

训练集准确率(部分,不完整)

step 0,training accuracy 0.1800
step 100,training accuracy 0.8800
step 200,training accuracy 0.8800
step 300,training accuracy 0.9200
step 400,training accuracy 0.9200
step 500,training accuracy 0.9600
step 600,training accuracy 0.9000
step 700,training accuracy 1.0000
step 800,training accuracy 0.9800
step 900,training accuracy 0.9600
step 1000,training accuracy 1.0000
step 1100,training accuracy 0.9600
step 1200,training accuracy 0.9800
step 1300,training accuracy 0.9600
step 1400,training accuracy 0.9400
step 1500,training accuracy 0.9800
step 1600,training accuracy 0.9800
step 1700,training accuracy 1.0000
step 1800,training accuracy 0.9600
step 1900,training accuracy 0.9800
step 2000,training accuracy 0.9600
step 2100,training accuracy 0.9200
step 2200,training accuracy 1.0000
step 2300,training accuracy 1.0000
step 2400,training accuracy 1.0000
step 2500,training accuracy 1.0000
step 2600,training accuracy 1.0000
step 2700,training accuracy 0.9800
step 2800,training accuracy 0.9600
step 2900,training accuracy 1.0000
step 3000,training accuracy 1.0000
step 3100,training accuracy 0.9800
step 3200,training accuracy 0.9800
step 3300,training accuracy 0.9800
step 3400,training accuracy 0.9400
step 3500,training accuracy 0.9800
step 3600,training accuracy 1.0000
step 3700,training accuracy 1.0000
step 3800,training accuracy 1.0000
step 3900,training accuracy 0.9600
step 4000,training accuracy 0.9400
......
......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值