系统环境win10, 数据集是MNIST 数据集,运行环境 PyCharm
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
# loading data
mnist = input_data.read_data_sets('MNIST_data/', one_hot =True)
trX = mnist.train.images
trY = mnist.train.labels
teX = mnist.test.images
teY = mnist.test.labels
trX = trX.reshape(-1, 28, 28, 1)
teX = teX.reshape(-1, 28, 28, 1)
X = tf.placeholder('float', [None, 28, 28, 1])
Y = tf.placeholder('float', [None, 10])
def init_weights(shape) :
return tf.Variable(tf.random_normal(shape, stddev=0.01))
w = init_weights([3, 3, 1, 32])
w2 = init_weights([3, 3, 32, 64])
w3 = init_weights([3, 3, 64, 128])
w4 = init_weights([128*4*4, 625])
w_o = init_weights([625, 10])
def model(X, w, w2, w3, w4, w_o, p_keep_conv, p_keep_hidden) :
a11 = tf.nn.relu(tf.nn.conv2d(X, w, strides=[1, 1, 1, 1], padding='SAME'))
b11 = tf.nn.max_pool(a11, ksize=[1,2,2,1],strides=[1,2,2,1], padding='SAME' )
b11 = tf.nn.dropout(b11,p_keep_conv)
a12 = tf.nn.relu(tf.nn.conv2d(b11, w2, strides=[1,1,1,1], padding='SAME'))
b12 = tf.nn.max_pool(a12, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME')
b12 = tf.nn.dropout(b12, p_keep_conv)
a13 = tf.nn.relu(tf.nn.conv2d(b12, w3, strides=[1,1,1,1], padding='SAME'))
b13 = tf.nn.max_pool(a13, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME')
b13 = tf.reshape(b13, [-1, w4.get_shape().as_list()[0]])
b13 = tf.nn.dropout(b13, p_keep_conv)
b14 = tf.nn.relu(tf.matmul(b13,w4))
b14 = tf.nn.dropout(b14, p_keep_hidden)
pyx = tf.matmul(b14, w_o)
return pyx
p_keep_conv = tf.placeholder('float')
p_keep_hidden = tf.placeholder('float')
py_x = model(X, w, w2, w3, w4, w_o, p_keep_conv, p_keep_hidden)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=py_x, labels=Y))
train_op = tf.train.RMSPropOptimizer(0.001, 0.9).minimize(cost)
predict_op =tf.argmax(py_x, 1)
batch_size = 128
test_size = 256
with tf.Session() as sess:
tf.global_variables_initializer().run()
for i in range(100) :
training_batch = zip (range(0, len(trX), batch_size), range(batch_size, len(trX)+1))
for start, end in training_batch :
sess.run(train_op, feed_dict={X: trX[start: end], Y: trY[start: end], p_keep_conv : 0.8, p_keep_hidden: 0.5})
test_indices = np.arange(len(teX))
np.random.shuffle(test_indices)
test_indices = test_indices[0:test_size]
print(i, np.mean(np.argmax(teY[test_indices], axis=1) == sess.run(predict_op, feed_dict={X: teX[test_indices], p_keep_conv: 1.0, p_keep_hidden: 1.0})))
运行结果有所省略,具体如下:
C:\Python\Python35\python.exe "D:/PythonCharm/test/CNN trianing.py"
2.535013
0.0052793045
0.0040864
0.0036919245
0.0033842134
0.003149121
0.0029950226
...
0.0023926625
0.0023915628
0.0023904943
0.0023894513
0.002388434
0.0023874328
Process finished with exit code 0