TensorFlow基础(三)——反向传播

代码实现:

#coding:utf-8
#0、导入模块,生成模拟数据集
import tensorflow as tf
import numpy as np #python的科学计算模块

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] #从X提取x0,x1,把体积重量之和小于1的认为合格,值为1赋给Y,否则给0
print "X:\n", X
print "Y:\n", Y

#1、定义神经网络的输入和参数和输出,定义前向传播过程
x = tf.placeholder(tf.float32, shape=(None,2)) #用placeholder定义输入,只知道有体积和重量两个特征,所以第二维是2,不知道能拿到几组特征所以用None
y_ = tf.placeholder(tf.float32, shape=(None,1)) #表示标准答案

w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1)) #2行3列组成的随机矩阵,
w1的第一维对应输入x(2个)
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1)) #w2的第二维对应输出y(1个)

#定义前向传播过程
a = tf.matmul(x, w1) #a = x与w1的矩阵乘法
y = tf.matmul(a, w2)

#2.定义损失函数及反向传播方法
loss = tf.reduce_mean(tf.square(y-y_))#均方误差生成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 "w1:\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)) #喂入x的一组特征

结果:

猜你喜欢

转载自blog.csdn.net/qq_37764129/article/details/94359814
今日推荐