说明:本代码来自于北京大学曹健老师的MOOC人工智能实践:Tensorflow笔记第五讲
I 前向传播网络搭建
在mnist_forward.py中搭建两层全连接网络,这里面就是定义层数,节点数,激活函数这些。
输入节点数目就是mnist数据集的图片28*28大小,用784行的向量作为输入。
第一层y1=relu(x*w1+b1 )其中y1为500行的向量。那么w1里面就有784*500个变量啦~~b1是500个变量。然后经过一个relu激活函数。
第二层就是从500节点变换到10个节点的输出,输出为标签,表示0-9手写数字出现的概率。y=y1*w2+b2。w2就是500*10的矩阵。b2是10行的向量。没有激活函数。
这里面w1 b1 w2 b2就是要训练的参数
采用了正则化
正则化就是在损失函数中给每个参数w加上权重,引入模型复杂度指标,从而抑制模型噪声,减少过拟合。这里使用的是L2正则化,即w的L2范数也是loss的一部分,也就是说在求解最优w的过程中,要使得w的值尽量在0附近。
import tensorflow as tf
INPUT_NODE = 784
OUTPUT_NODE = 10
LAYER1_NODE = 500
def get_weight(shape,regularizer):
w = tf.Variable(tf.truncated_normal(shape,stddev=0.1))
# 截断正态分布
if reg