神经网络实现过程
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))