TensorFlow—实现简单神经网络

#该神经网络有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中:
张量、计算图、生成会话(三个步骤)

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

猜你喜欢

转载自blog.csdn.net/qq_40602790/article/details/83046379