1.placeholder机制
作用:解决多次迭代中,计算图过大的问题。
|- 如果不使用placeholder机制,多次迭代中,多个特征向量,对应多个计算图。计算图利用率低。
|- 使用placeholder机制,多次迭代中,多个特征向量,对应一个计算图。计算图利用率高。
特点:
|- 是一种张量,因此它的类型可以在声明的时候指定,一旦声明就不可改变;
|- 是一种张量,因此它的维度可以不指定,系统可以根据数据维度推导出。
使用方法:
|- 1.声明placeholder变量
x = tf.placeholder(tf.float32, shape=(1, 2), name="input")
|- 2.在用到涉及到该变量的时候,对其进行赋值
print(sess.run(y, feed_dict={x: [[0.7, 0.9]]})) # y是一个依赖于x的变量
|- feed_dict是一个字典(map),在字典中必须给出每个用到的placeholder的取值。
完整样例:
使用了placeholder的前向传播模型代码:
# 1.导入模块
import tensorflow as tf
# 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))
# 3.声明特征向量
x = tf.placeholder(tf.float32, shape=(1, 2), name="inport")
# 4.定义计算
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
# 5.创建会话
sess = tf.Session()
# 6.在会话中初始化变量
init_op = tf.global_variables_initializer()
sess.run(init_op)
# 7.给placeholder变量“x”赋值、执行计算、并输出结果
print(sess.run(y, feed_dict={x: [[0.7, 0.9]]}))
# 8.关闭会话
sess.close()
结果:
[[ 3.95757794]]
同一个placeholder变量传入多个值:
用于一次性计算多个样例
|- 1.声明placeholder变量时,指定维数
# shape(3, 2) 表示这个placeholder变量的维数为3,长度为2.也即:该矩阵为3行2列。
x = tf.placeholder(tf.float32, shape=(3, 2), name="input")
|- 2.在用到涉及到该变量的时候,对其进行赋值
所赋的值应与声明时的属性一致。
print(sess.run(y, feed_dict={x: [[0.7, 0.9], [0.1, 0.4], [0.5, 0.8]]})) # y是一个依赖于x的变量
在得到一个batch的前向传播结果之后,需要定义一个损失函数来刻画当前的预测值和真实答案之间的差距。然后通过反向传播算法来调整神经网络的取值是的差距可以被缩小。
2.损失函数的实现样例:
# 使用sigmoid函数将y转换为0~1之间的数值。转换后y代表预测是正样本的概率,1-也代表预测是负样本的概率。
y = tf.sigmoid(y)
# 定义损失函数来刻画预测值与真实值的差距,即交叉熵
cross_entropy = -tf.reduce_mean(
y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0))
+(1-y)*tf.log(tf.clip_by_value(1-y, 1e-10, 1.0)))
# 定义学习率
learning_rate = 0.001
# 定义反向传播算法来优化神经网络中的参数
train_step = tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)
|- 函数介绍:
1. tf.sigmoid():将y转换为介于0~1之间的数值。
2. tf.reduce_mean():求平均值
|- 无参:默认所有数的平均价
|- 参数为0:列的平均值
|- 参数为1:行的平均值
3. tf.log():计算对数
4. tf.clip_by_value(A, min, max):输入一个张量A,把A中的每一个元素的值都压缩在min和max之间。小于min的让它等于min,大于max的元素的值等于max。
5. tf.train.AdamOptimizer():此函数是Adam优化算法,是一个寻找全局最优点的优化算法,引入了二次方梯度校正,相比于基础SGD算法,1.不容易陷于局部优点。2.速度更快
6. minimize():计算出梯度,并将梯度作用在变量上。
3.TensorFlow中的优化方法:
最常用:
1.tf.train.MomentumOptimizer
2.tf.train.AdamOptimizer
3.tf.train.GradientDescentOptimizer
其他:
1.tf.train.AdadeltaOptimizer
2.tf.train.AdagradOptimizer
3.tf.train.AdagradDAOptimizer
4.tf.train.FtrlOptimizer
5.tf.train.ProximalGradientDescentOptimizer
6.tf.train.ProximalAdagradOptimizer
7.tf.train.RMSPropOptimizer