简单的分类任务

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets('data/', one_hot=True)

# to be able to rerun the model without overwriting tf variables
tf.reset_default_graph()

num_classes = 10
batch_size = 64
num_train = 10000

X = tf.placeholder(tf.float32, [None, 28,28,1])
y = tf.placeholder(tf.float32, [None, num_classes])
#CONV2D -> RELU -> MAXPOOL -> CONV2D -> RELU -> MAXPOOL -> FLATTEN -> FULLYCONNECTED
W1 = tf.Variable(tf.random_normal(shape=[5,5,1,32], stddev=0.1))
b1 = tf.Variable(tf.constant(0.1, shape=[32]))
W2 = tf.Variable(tf.random_normal(shape=[5,5,32,64], stddev=0.1))
b2 = tf.Variable(tf.constant(0.1, shape=[64]))
#卷积层
conv_1 = tf.nn.relu(tf.nn.conv2d(X, filter=W1, strides=[1,1,1,1], padding="SAME") + b1)
pool_1 = tf.nn.max_pool(conv_1, ksize=[1,2,2,1], strides=[1,2,2,1], padding="SAME")
conv_2 = tf.nn.relu(tf.nn.conv2d(pool_1, filter=W2, strides=[1,1,1,1], padding="SAME") + b2)
pool_2 = tf.nn.max_pool(conv_2, ksize=[1,2,2,1], strides=[1,2,2,1], padding="SAME")

#全连接层
W_fc1 = tf.Variable(tf.random_normal(shape=[7*7*64, 1024], stddev=0.1))
b_fc1 = tf.Variable(tf.constant(0.1, shape=[1024]))
W_fc2 = tf.Variable(tf.random_normal(shape=[1024, num_classes], stddev=0.1))
b_fc2 = tf.Variable(tf.constant(0.1, shape=[num_classes]))

pool_2 = tf.reshape(pool_2, [-1, 7*7*64])
fc1 = tf.nn.relu(tf.matmul(pool_2, W_fc1) + b_fc1)
fc2 = tf.matmul(fc1, W_fc2) + b_fc2 #the output of the last LINEAR unit

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=fc2))
train_op = tf.train.AdamOptimizer().minimize(loss)
correct_prediction = tf.equal(tf.argmax(fc2, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for step in range(num_train):
        mini_batch = mnist.train.next_batch(batch_size)
        X_temp = mini_batch[0].reshape([batch_size, 28,28,1])
        y_temp = mini_batch[1]
        sess.run(train_op, feed_dict={X:X_temp, y:y_temp})
        if step % 1000 == 0:
            loss_var, accuracy_var = sess.run([loss,accuracy], feed_dict={X:X_temp, y:y_temp})
            print("loss:", loss_var, "accuracy:", accuracy_var)