tensorflow笔记(北大网课实战)
1、
tf.multiply(x,y1) # 对应元素相乘 tf.matmul(x,y2) # 矩阵相乘
2、会话:执行计算图中的节点运算的。
with tf.Session() as sess:
print sess.run(y)
3、参数:就是权重w,用变量表示。随机给初值。
w=tf.Variable(tf.random_normal([2,3],stddev=2,mean=0,seed=1))
正态分布, 标准差为2 均值是0
tf.truncated_normal() 去掉过大偏离点的正态分布
4、前向传播:搭建模型,实现推理
输入层,隐藏层,输出层
5、变量初始化、计算图节点运算,都要用会话实现:
变量初始化:
init_op=tf.global_variables_initializer()
sess.run(init_op)
计算图节点运算:在sess.run函数中用feed_dict喂数据
6、用tf.placeholder占位,在sess.run函数中用feed_dict喂数据
喂一组数据:
x=tf.placeholder(tf.float32,shape=(1,2)) 多组数据的话,把1改成None
sess.run(y,feed_dict={x:[[0.5,0.6]]})
import tensorflow as tf 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(sess.run(y,feed_dict={x: [[0.7, 0.5],[0.2,0.3], [0.3,0.4],[0.4,0.5]]})) print(sess.run(w1)) print(sess.run(w2))
7、反向传播:训练模型参数,在所有参数上用梯度下降,使NN模型在训练数据对上的
损失函数最小。
损失函数(loss):预测值y与已知答案y_的差距
均方误差MSE
loss=tf.reduce_mean(tf.square(y_-y))
反向传播训练方法:以减小loss值为优化目标
学习率 :决定参数每次更新的幅度
import tensorflow as tf import numpy as np BATCH_SIZE = 8 #一次喂入的数据 seed = 23455 rng = np.random.RandomState(seed) X=rng.rand(32,2) Y=[[int(x0 + x1 < 1)] for (x0,x1) in X] print(X) print(Y) x = tf.placeholder(tf.float32, shape=(None,2))#体积和重量两个特征 yy= 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(yy-y)) train_step=tf.train.GradientDescentOptimizer(0.001).minimize(loss)#学习率为0.001 with tf.Session() as sess: init_op=tf.global_variables_initializer() sess.run(init_op) print(sess.run(w1)) print(sess.run(w2)) #训练模型 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],yy: Y[start: end]}) if i % 500 == 0: #每500轮打印一次loss值 total_loss = sess.run(loss,feed_dict={x: X, yy: Y}) print(i,total_loss) print(sess.run(w1)) print(sess.run(w2))
8、搭建神经网络的八股:准备、前传、反传、迭代
(1)准备:import ;常量定义;生成数据集
(2)前向传播:定义输入、参数和输出
(3)反向传播:定义损失函数,反向传播方法
loss = train_step =
(4)生成会话,训练STEPS轮
9、损失函数
NN复杂度:多用NN层数和NN参数的个数表示
层数=隐藏层的层数+1个输出层
总参数=总w+总b
自定义损失函数:
交叉熵:表征两个概率分布之间的距离
10、学习率:每次参数更新的幅度
学习率设置多少合适?指数衰减率
11、滑动平均(影子值)
记录了每个参数一段时间内过往值得平均,增加了模型的泛化性。
针对所有参数:w、b