1. mnist数据集的获取和使用
1.1获取mnist
from tensorflow.contrib.learn.python.learn.datasets.mnist import read_data_sets
mnist = read_data_sets("MNIST_data/", one_hot=True) # "MNIST_data/"是数据保存的位置,one-hot是否把label变成one-hot编码
1.2使用mnist
mnist.train.next_batch(50) #batch的方式获取
mnist.test.images,mnist.test.labels #全部获取
2.使用tf.layers搭建cnn识别模型
x = tf.placeholder('float', [None, 28*28]) #输入,mnist读入的数据是28*28的,而非一个矩阵
y_ = tf.placeholder('float', [None, 10])
# cnn model
x_image = tf.reshape(x, [-1,28,28,1]) #转输入为图片格式
w_init = tf.truncated_normal_initializer(stddev=0.1, seed=9)#参数初始化器
b_init = tf.constant_initializer(0.1)
# 第一层cnn和max_pooling
cnn1 = tf.layers.conv2d(x_image, 32, (5,5), padding='same', activation=tf.nn.relu, \
kernel_initializer=w_init, bias_initializer=b_init)
mxpl1 = tf.layers.max_pooling2d(cnn1, 2, strides=2, padding='same')
# 第二层cnn和max_pooling
cnn2 = tf.layers.conv2d(mxpl1, 64, (5,5), padding='same', activation=tf.nn.relu, \
kernel_initializer=w_init, bias_initializer=b_init)
mxpl2 = tf.layers.max_pooling2d(cnn2, 2, strides=2, padding='same')
mxpl2_flat = tf.reshape(mxpl2, [-1,7*7*64])
#全连接1和dropout
fc1 = tf.layers.dense(mxpl2_flat, 1024, activation=tf.nn.relu, \
kernel_initializer=w_init, bias_initializer=b_init)
keep_prob = tf.placeholder('float')
fc1_drop = tf.nn.dropout(fc1, keep_prob)
logits = tf.layers.dense(fc1_drop, 10, kernel_initializer=w_init, bias_initializer=b_init)
3.损失函数loss和优化器