MNIST数据集的卷积神经网络训练代码具体实现示例--Tensorflow 框架

系统环境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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值