TensorFlow 从入门到放弃（一）：卷积神经网络与TensorFlow实现

IT 领域的三角不可能定律：质量编程、速度编程、廉价编程。

——麦杰克 · 索伊

importmatplotlib.pyplotasplt

importtensorflowastf

fromtensorflow.examples.tutorials.mnistimportinput_data

defdraw_fig(mnist,n,m):

fig, axes = plt.subplots(n,m,sharex=True,sharey=True)

foriinrange(n):

forjinrange(m):

temp = mnist.train.images[(i*m+j)]

image = temp.reshape(28,28)

axes[i,j].imshow(image,cmap='binary')# 黑白显示

plt.xticks([])

plt.yticks([])

plt.show()

draw_fig(mnist,10,10)

defweight_Variable(shape):

weight = tf.truncated_normal(shape=shape,stddev=0.1)

returntf.Variable(weight)

defbias_Variable(shape):

bias = tf.constant(0.1,shape=shape)

returntf.Variable(bias)

defconv2d(input,filter):

defmax_pool_2_2(input):

defconv_nn(mnist,channels_1,channels_2,full_connect,prob,n_rounds):

# 分别设置x和y占位符

x_ = tf.placeholder(tf.float32,[None,784])

x_image = tf.reshape(x_,[-1,28,28,1])

y_ = tf.placeholder(tf.float32,[None,10])

# 第一次卷积与池化

filter_1 = weight_Variable([5,5,1,channels_1])

bias_1 = bias_Variable(channels_1)

f_map_1 = tf.nn.relu(conv2d(x_image,filter_1)+bias_1)

max_pool_1 = max_pool_2_2(f_map_1)

# 第二次卷积与池化

filter_2 = weight_Variable([5,5,channels_1,channels_2])

bias_2 = bias_Variable(channels_2)

f_map_2 = tf.nn.relu(conv2d(max_pool_1,filter_2)+bias_2)

max_pool_2 = max_pool_2_2(f_map_2)

# 构建全连接层

filter_full = weight_Variable([7*7*64,full_connect])

bias_full = bias_Variable([full_connect])

filter_full_flat = tf.reshape(max_pool_2,[-1,7*7*64])

connect_flat = tf.nn.relu(tf.matmul(filter_full_flat,filter_full)+bias_full)

# 神经元选择性激活，可以减小过拟合。但是在验证阶段，要打开全部神经元

keep_prob = tf.placeholder(tf.float32)

connect_prob = tf.nn.drop(connect_flat,keep_prob)

# 搭建Softmax作为输出层

filter_out = weight_Variable([full_connect,10])

bias_out = bias_Variable([10])

y_conv = tf.nn.softmax(tf.matmul(connect_prob, filter_out) + bias_out)

# 训练模型

cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))

correct_prdiction = tf.equal(tf.arg_max(y_conv,1),tf.arg_max(y_,1))

accuracy = tf.reduce_mean(tf.cast(correct_prdiction,tf.float32))

# 设置参数保存

saver = tf.train.Saver()

withtf.Session()assess:

sess.run(tf.global_bariable_initializer())

saver.save(sess,'saved_model/model.ckpt')# 参数保存路径，如果要读取完成训练的模型参数，改为saver.restore()

foriinrange(n_rounds):

batch = mnist.train.next_batch(50)

sess.run(optimizer,feed_dict=)

ifi%100==:

train_accuracy = accuracy.eval(optimizer,feed_dict=)

print('step %d, training accuracy %g'%(i,train_accuracy))

print('test accuracy %g'%(accuracy.eval(optimizer,feed_dict=)))

if__name__ =='__main__':

conv_nn(mnist,32,64,1024,0.5,5000)

1、本文代码请在python3.x中调试

2、教程部分参考：

——完——

0 条评论

• 人人都可以做深度学习应用：入门篇

一、人工智能和新科技革命 2017年围棋界发生了一件比较重要事，Master（Alphago）以60连胜横扫天下，击败各路世界冠军，人工智能以气势如虹的姿态出现...

• 【致敬周杰伦】基于TensorFlow让机器生成周董的歌词（附源码）

? 周杰伦 深深地 影响了我们 一代人 这句话 不足为过 前言 今日推文将介绍如何使用TensorFlow一步步来搭建一个序列建模的应用——机器创作歌词，训练...

• CNN预测股票走势基于Tensorflow（思路+程序）

前言 我们希望找出跟随价格上涨的模式。通过每日收盘价，MA，KD，RSI，yearAvgPrice 本次推文研究只是展示深入学习的一个例子。 结果估计不是很好。...

系列文章（点击即可查看） 机器学习该如何应用到量化投资系列（一） 机器学习该如何应用到量化投资系列（二） 机器学习该如何应用到量化投资系列（三） 机器学习该如...

• 从Encoder到Decoder实现Seq2Seq模型（算法+代码）

知乎专栏：机器不学习 作者：天雨栗 | 蚂蚁金服 | 数据算法 已授权刊登 前言 好久没有更新专栏，今天我们来看一个简单的Seq2Seq实现，我们将使用Tens...

• 【精选】Jupyter Notebooks里的TensorFlow图可视化

前言 前提：假设你熟悉Python，TensorFlow和Jupyter notebooks。 我们的目标只是可视化计算图。 TensorFlow操作形成计算图...

• 独家 | 10分钟带你上手TensorFlow实践（附代码）

原文标题：TensorFlow Tutorial: 10 minutes Practical TensorFlow lesson for quick learn...

• 用Tensorflow搭建神经网络14：检查点训练机制

由于大型神经网络的训练往往耗费很长的时间，可能会因为机器损坏、断电或系统崩溃等各种因素无法一次性完成模型训练而导致前面所有的训练功亏一篑。本次来介绍一种检查点机...