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

反相传播 学习神经网络实例 完全解析(tensorflow笔记

2018-10-31 23:33 555 查看
# -*- coding: utf-8 -*-
#反相传播   学习神经网络实例  完全解析(tensorflow笔记)
#0导入模块,生成模拟数据集
import tensorflow as tf
import numpy as np
BATCH_SIZE=8
seed=23455

#基于seed产生随机数
rng=np.random.RandomState(seed)
#随机数返回32行2列的矩阵表示32组体积和重量作为输入数据集
X=rng.rand(32,2)
#从X这个32行2列的矩阵中取出一行判断如果和小于1给Y赋值1如果和不小于1给Y赋值0
#作为输入数据集的标签(正确答案
Y=[[int(x0+x1<1)] for (x0, x1) in X]
print("X:\n",X)
print("Y:\n",Y)
#1定义神经明络的输入、参数和输出,定义前向传播过程
x =tf.placeholder(tf.float32, shape=(None,2))
y_=tf.placeholder(tf.float32,shape=(None,1))

W1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
W2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))

a=tf.matmul(x,W1)
y=tf.matmul(a,W2)

#2定义损失函数及反向传播方法
loss=tf.reduce_mean(tf.square(y-y_))
train_step=tf.train.GradientDescentOptimizer(0.001).minimize(loss)
#train step= tf. train. MomentumOptimizer(0.001,0.9).minimize(loss)
#train step=tf. train. Adamoptimizer(0.001).minimize(loss)

#3生成会话,训练STEPS轮
with tf.Session() as sess:
init_op = tf.global_variables_initializer()
sess.run(init_op)
#输出目前(未经训练)的参数取值。
print("wl:\n",sess.run(W1))
print("w2:\n",sess.run(W2))
print("\n")

#训练模型。
STEPS=3000
for i in range(STEPS):
start=(i*BATCH_SIZE)%32
end=start+BATCH_SIZE
sess.run(train_step, feed_dict={x: X[start:end], y_:Y[start:end]})
if i%500==0:
total_loss= sess.run(loss, feed_dict={x:X,y_:Y})
print("After %d training step(s), loss on all data is %g"%(i,total_loss))

#输出训练后的参数取值
print("\n")
print("W1:\n",sess.run(W1))
print("W2:\n",sess.run(W2))
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐