资源简介

CNN实现MNIST分类,在测试集上实现准确率0.99,TensorFlow实现,容易上手

资源截图

代码片段和文件信息

# Lab 11 MNIST and Convolutional Neural Network
import tensorflow as tf
import random
import scipy.io as scio
# import matplotlib.pyplot as plt


from tensorflow.examples.tutorials.mnist import input_data

tf.set_random_seed(777)  # reproducibility

mnist = input_data.read_data_sets(“MNIST_data/“ one_hot=True)
# Check out https://www.tensorflow.org/get_started/mnist/beginners for
# more information about the mnist dataset

# hyper parameters
learning_rate = 0.002
training_epochs = 3
batch_size = 50

# input place holders
X = tf.placeholder(tf.float32 [None 784])
X_img = tf.reshape(X [-1 28 28 1])   # img 28x28x1 (black/white)
Y = tf.placeholder(tf.float32 [None 10])

# L1 ImgIn shape=(? 28 28 1)
W1 = tf.Variable(tf.random_normal([5 5 1 6] stddev=0.01))
b1 = tf.Variable(tf.random_normal([6]))
#    Conv     -> (? 24 24 6)
#    Pool     -> (? 12 12 6)
L1 = tf.nn.conv2d(X_img W1 strides=[1 1 1 1] padding=‘VALID‘)
L1 = tf.nn.relu(L1 + b1)
L1 = tf.nn.avg_pool(L1 ksize=[1 2 2 1]
                    strides=[1 2 2 1] padding=‘SAME‘)
‘‘‘
Tensor(“Conv2D:0“ shape=(? 24 24 6) dtype=float32)
Tensor(“Relu:0“ shape=(? 24 24 6) dtype=float32)
Tensor(“avgPool:0“ shape=(? 12 12 6) dtype=float32)
‘‘‘

# L2 ImgIn shape=(? 12 12 6)
W2 = tf.Variable(tf.random_normal([5 5 6 16] stddev=0.01))
b2 = tf.Variable(tf.random_normal([16]))
#    Conv      ->(? 8 8 16)
#    Pool      ->(? 4 4 16)
L2 = tf.nn.conv2d(L1 W2 strides=[1 1 1 1] padding=‘VALID‘)
L2 = tf.nn.relu(L2 + b2)
L2 = tf.nn.avg_pool(L2 ksize=[1 2 2 1]
                    strides=[1 2 2 1] padding=‘SAME‘)
L2_flat = tf.reshape(L2 [-1 4 * 4 * 16])
#L2_flat = tf.nn.relu(L2_flat)
‘‘‘
Tensor(“Conv2D_1:0“ shape=(? 14 14 64) dtype=float32)
Tensor(“Relu_1:0“ shape=(? 14 14 64) dtype=float32)
Tensor(“MaxPool_1:0“ shape=(? 7 7 64) dtype=float32)
Tensor(“Reshape_1:0“ shape=(? 3136) dtype=float32)
‘‘‘

# Final FC 7x7x64 inputs -> 10 outputs
W3 = tf.Variable(tf.random_normal([4*4*16 10] stddev=0.01))

#W3 = tf.get_variable(“W3“ shape=[4 * 4 * 16 10]
#                    initializer=tf.contrib.layers.xavier_initializer())
b3 = tf.Variable(tf.random_normal([10]))
logits = tf.matmul(L2_flat W3) + b3
#logits = tf.nn.relu(logits)
# define cost/loss & optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(
    logits=logits labels=Y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

#creat a saver
saver = tf.train.Saver()

# initialize
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

# train my model
    print(‘Learning started. It takes sometime.‘)
    for epoch in range(training_epochs):
        avg_cost = 0
        total_batch = int(mnist.train.num_examples / batch_size)

        for i in range(total_batch):
            batch_xs batch_ys = mnist.train.next_batch(batc

评论

共有 条评论