神经网络的实现过程:
1、准备数据集,提取特征,作为输入喂给神经网络(Neural Network,NN)
2、搭建 NN 结构,从输入到输出(先搭建计算图,再用会话执行)
( NN 前向传播算法 --> 计算输出)
3、大量特征数据喂给 NN,迭代优化 NN 参数
( NN 反向传播算法 --> 优化参数训练模型)
4、使用训练好的模型预测和分类

1. 前向传播

#coding:utf-8
import tensorflow as tf

print("============两层简单神经网络=========== ")
#定义输入和参数

#定义常量X
#x = tf.constant([[0.7,0.5]])
#用placeholder定义输入(sess.run可以喂多组数据)
x = tf.placeholder(tf.float32,shape=(None,2))
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)

#会话计算结果
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))
    #计算最终结果 y 值
    #x为常量值时的输出结果
    #print("两层简单网络计算结果为:\n y = ",sess.run(y))
    #用placeholder定义x作为输入,sess.run喂多组数据的输出结果
    print("喂入多组数据的结果:\n",sess.run(y,feed_dict = {x: [[0.7,0.5],[0.2,0.3],[0.3,0.4],[0.4,0.5]]}))

2. 反向传播

#coding:utf-8
#导入模块,生成模拟数据集
import tensorflow as tf
import numpy as np
#一次不可过大
BATCH_SIZE = 8
seed = 23455

#基于seed 产生随机数
rng = np.random.RandomState(seed)
#随机数返回32行2列的矩阵,特征为体积和体重 作为输入的数据集
X = rng.rand(32,2)
#伪造每组特征输入的标签
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)

#定义损失函数与反向传播方法
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 生成会话,训练 STEP 轮
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")

    # 训练模型
    STEP = 3000 #训练3000轮
    for i in range(STEP):
        start = (i*BATCH_SIZE)%32 #每组喂8组数据
        end = start + BATCH_SIZE
        sess.run(train_step,feed_dict = {x:X[start:end],y_:Y[start:end]})
        #每500次打印一次参数信息
        if i % 500 == 0:
            total_loss = sess.run(loss,feed_dict = {x:X,y_:Y})
            print("经过 %d 轮训练,损失数据为:%g" %(i,total_loss))

    #输出训练后的权重
    print("\n")
    print("w1:\n",sess.run(w1))
    print("w2:\n",sess.run(w2))

关于tensorflow学习教程均来自 mooc 课程:人工智能时间:tensorflow笔记 mooc 课程

10-06 15:24