Tensorflow 神经网络搭建

神经网络实现过程

       1.准备数据集,提取特征,作为输入喂给神经网络

        2. 搭建NN结果, 从输入到输出(先搭建计算图,再用会话执行)

                NN前向传播算法 -> 计算输出

        3. 大量特征数据喂给NN,迭代优化NN参数

                NN反向传播算法 -> 优化参数训练模型

        4. 使用训练好的模型预测和分类


神经网络搭建八股

0.  准备

        import 相关模块

        常量定义

        有些时候需要生成数据集

1.  前向传播 :定义输入、参数和输出

        输入x = 

        标准答案 y_ = 

        第一层网络的参数 w1 = 

        第二层网络的参数 w2 = 

        a = 

        推理过程,用矩阵乘法求出 y = 

2. 反向传播 :定义损失函数、反向传播方法

        损失函数 loss = 

        反向传播方法 train_step = 

3. 生成会话,训练STEPS轮

        with tf.session() as sess

                Init_op = tf.global_variables_initializer()    初始化所有参数

                sess_run(init_op)    

                STEPS = 3000    定义循环轮数

                for i in range(STEPS)

                        start = 

                        end = 

                        sess.run(train_step,feed_dict: )    每次循环喂入batch个特性和标准答案,对反向传播过程进行运算

                常用print提示一定轮数后的损失函数,方便开发者观测loss的下降

#coding:utf-8
#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("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))
    print("w2\n", sess.run(w2))


你可能感兴趣的:(tensorflow)