1.多层感知机简介
多层感知机(Multi-Layer Perceptron, MLP),又叫做多层神经网络。如果使用的是没有隐含层的神经网络,那么这样的神经网络只能解决一些线性可分的问题,但是在实际的生活中,很多问题并不是线性可分的,例如XOR函数问题,在这个特征空间中,这就是一个线性不可分问题,我们可以使用曲线来划分这两类样本。在通常情况下,神经网络的隐含层越多,就可以对原有的特征进行越抽象的变换,模型的拟合能力就越强。这个就是多层感知机的功能所在。
2.多层感知机的代码构建
加载MNIST数据集,并创建默认的Interactive Session
fromtensorflow.examples.tutorials.mnistimportinput_dataimporttensorflowastf mnist=input_data.read_data_sets(“MNIST_data”,one_hot=True)sess=tf.InteractiveSession()定义隐含层的参数并进行初始化。这里的初始化使用的是截断的正态分布,其标准差为0.1。
in_units=784h1_units=300w1=tf.Variable(tf.truncated_normal([in_units,h1_units],stddev=0.1))b1=tf.Variable(tf.zeros([h1_units]))w2=tf.Variable(tf.zeros([h1_units,10]))b2=tf.Variable(tf.zeros([10]))定义placeholder
x=tf.placeholder(tf.float32,[None,in_units])keep_prob=tf.placeholder(tf.float32)定义模型结构,dropout相当于是随机的把一些节点置0,这样相当于是把一些图片中的像素点变成黑色,增加网络结构的泛化能力
hidden1=tf.nn.relu(tf.matmul(x,w1)+b1)hidden1_drop=tf.nn.dropout(hidden1,keep_prob)y=tf.nn.softmax(tf.matmul(hidden1_drop,w2)+b2)定义损失函数和优化器
y_=tf.placeholder(tf.float32,[None,10])cross_entropy=tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y),reduction_indices=[1]))train_step=tf.train.AdagradOptimizer(0.3).minimize(cross_entropy)初始化数据,并设置训练次数。
tf.global_variables_initializer().run()foriinrange(3000):batch_xs,batch_ys=mnist.train.next_batch(100)train_step.run({x:batch_xs,_y:batch_ys,keep_prob:0.75})对模型进行预测
correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1))accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))print(accuracy.eval({x:mnist.test.images,y_:mnist.test.labels,keep_prob:1.0})这篇博客真是命途多舛,写了整整三遍,保存的时候各种报错,还被我不小心删掉了,真是绝了~~好歹坚持不懈,又写了一遍O(∩_∩)O