基本概念
之前的读书笔记里面已经记录过了针对普通神经网络的各种优化方法和设计思路,而多层感知机则是对前面知识的综合应用。而多层指的是多隐含层在书中并没有直接提供复数隐含层代码,所以笔者的样板代码仅是狗尾续貂地多加了一个隐含层。这部分的代码并不复杂,基本就是在第二节的基础上稍加改动。
具体实现
引入数据和TF
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
mnist = input_data.read_data_sets("MNIST_data/",one_hot=True)
sess = tf.InteractiveSession()
定义基本参数
这一部分就是根据模型设计定义我们的权重和偏差的尺寸,但是不同以往直接用0填充权重的情况我们使用了正太分布的方法向里面填充了噪点。当然我们也可以使用Xavier的方法来增加噪点。此外我们还多了一个新参数keep_prob
,用以对数据进行dropout操作。
in_units = 784
h1_units = 300
h2_units = 200
W1 = tf.Variable(tf.truncated_normal([in_units,h1_units], stddev = 0.1))
b1 = tf.Variable(tf.zeros([h1_units]))
W2 = tf.Variable(tf.truncated_normal([h1_units,h2_units], stddev = 0.1))
b2 = tf.Variable(tf.zeros([h2_units]))
W3 = tf.Variable(tf.zeros([h2_units,10]))
b3 = tf.Variable(tf.zeros([10]))
x = tf.placeholder(tf.float32,[None,in_units])
keep_prob = tf.placeholder(tf.float32)
定义运算方法
按照我们预先设计好的公式定义两个隐含层的基本算法和输出。值得注意的是在最终输出前我们的神经网络使用的是ReLU激活函数,而在最终输出时我们仍使用softmax函数。
hidden1 = tf.nn.relu