您的位置:首页 > 理论基础 > 计算机网络

一个最简单的三层神经网络的实现

2018-04-07 10:24 543 查看
本文描述的是一个仅有一层隐层的神经网络架构,且有前向传播和后向传播的架构,但是在后向传播的设置时,只考虑了最简单的情况——设置了不变的学习率;没有考虑指数衰减学习率法、在损失函数基础上加入正则项、加入滑动平均模型增强其robust.



#EX05 以下是一个完整的简单的神经网络的程序
import tensorflow as tf
from numpy.random import RandomState
batch_size=8 #定义训练数据batch的大小
w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=2))#初试化权重矩阵(生成相应大小的两个随机正态分布,均值为0,方差为1)
x=tf.placeholder(tf.float32,shape=(None,2),name='x-input') #在第一个维度上利用None,可以方便使用不大的batch大小
y_=tf.placeholder(tf.float32,shape=(None,1),name='y-input') #在第一个维度上利用None,可以方便使用不大的batch大小
#定义前向传播过程
a=tf.matmul(x,w1) #计算隐层的值
y=tf.matmul(a,w2) #计算输出值
#定义损失函数和反向传播算法
cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))
learning_rate=0.001
train_step=tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy) #在此神经网络中只有基础学习率的设置,没有指数衰减率,也没有正则项和滑动平均模型。
#通过随机数生成一个模拟数据集
rdm=RandomState(1)
dataset_size=128
X=rdm.rand(dataset_size,2)
#以下定义真实的样本标签(利用如下规则:所有x1+x2<1的样例被认为正样本,即合格样本,用1表示;否则不合格样本,用0表示)
Y=[[int(x1+x2<1)] for (x1,x2) in X]
#以下创建一个session会话来运行TensorFlow程序
with tf.Session() as sess:
init_op=tf.initialize_all_variables()
sess.run(init_op) #在此利用以上两行对其中涉及的参数进行统一初始化
print(sess.run(w1))
print(sess.run(w2)) #在此将会打印出训练神经网络前的参数值
#设定训练的轮数
STEPS = 5000
for i in range(STEPS):
start=(i*batch_size) %dataset_size
end=min(start+batch_size,dataset_size)#每次选取batch_size个样本进行训练
sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]})#通过选取的样本训练神经网络并更新其中的参数
if i%1000==0:
total_cross_entropy=sess.run(cross_entropy,feed_dict={x:X,y_:Y})
print("After%dtraining step(s),cross_entropy on all data is%g"%(i,total_cross_entropy))
print(sess.run(w1))
print(sess.run(w2))结果为:[[-0.8113182 1.4845988 0.06532937]
[-2.4427042 0.0992484 0.5912243 ]]
[[-0.85811085]
[-0.19662298]
[ 0.13895045]]
After0training step(s),cross_entropy on all data is0.227861
After1000training step(s),cross_entropy on all data is0.0395041
After2000training step(s),cross_entropy on all data is0.0199546
After3000training step(s),cross_entropy on all data is0.0117527
After4000training step(s),cross_entropy on all data is0.00781693
[[-1.7101479 2.2005002 1.576958 ]
[-3.6296377 1.1303781 2.4205081]]
[[-1.8791978 ]
[ 0.62330467]
[ 1.771285 ]]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: