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

TensorFlow—实现简单神经网络

2018-10-14 13:12 267 查看
#该神经网络有x1,x2两个输入
#隐藏层有3个神经元   所以w1为2*3矩阵
#输出只有一个y    所以w2为3*1 矩阵

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import numpy as np
BATCH_SIZE = 8
seed=23455
#基于seed产生随机数
rng =np.random.RandomState(seed)
#随机数返回32行2列的矩阵 表示32组数据
X=rng.rand(32,2)
Y=[[int(x0+x1 < 1)] for (x0,x1) in X]                    #x,y代表数据集的data和label

#定义神经网络的输入、参数和输出,定义前向传播过程
x=tf.placeholder(tf.float32,shape=(None,2))       #placeholder 占位
y_=tf.placeholder(tf.float32,shape=(None,1))

w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))                         # 2*3
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))#随机生产w值      3*1

a=tf.matmul(x,w1)          #隐藏层神经元a
y=tf.matmul(a,w2)          #最终输出y值,只有一个1*1矩阵

#定义损失函数及反向传播方法
loss=tf.reduce_mean(tf.square(y-y_))   #loss函数     均方误差y-y_(预测值和训练集的差值)
train_step=tf.train.GradientDescentOptimizer(0.001).minimize(loss)    #选择梯度下降,定义学习率  优化 最小化损失函数

#生成会话,训练STEPS轮
with tf.Session() as sess:
init_op=tf.global_variables_initializer()
sess.run(init_op)

#训练模型
STEPS=3000         #迭代次数,每500次打印一次loss值,loss会逐渐减小
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(i)
print(total_loss)
#得到优化后的参数
print(sess.run(w1))

#用训练集训练得到最好的w后,再输入需要预测的x1,x2数据

TensorFlow中:
张量、计算图、生成会话(三个步骤)

最后的神经网络实现需要一个迭代循环

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: