TensorFlow常用函数(二)

tf.nn.dropout

1
2
3
4
5
6
7
dropout(
x,
keep_prob,
noise_shape=None,
seed=None,
name=None
)
  • 函数名称:tf.nn.dropout
  • 输入参数:
    • x:一个tensor量,通常为一个全连接层
    • keep_prob:一个tensor标量,表示神经元保持活性的概率
    • noise_shape:一个1维的int32 tensor,作用没搞明白
  • 返回值:与x的shape相同的tensor
  • Dropout 的作用是使部分神经元失去活性,不参与前馈和反向传播,使用dropout后计算梯度时需要根据神经元失活的比例对原梯度公式进行比例变换,在tf.nn.dropout中,比例变换已在内部完成,无需操心。

tf.nn.softmax_cross_entropy_with_logits

1
2
3
4
5
6
7
softmax_cross_entropy_with_logits(
_sentinel=None,
labels=None,
logits=None,
dim=-1,
name=None
)
  • 函数名称:tf.nn.softmax_cross_entropy_with_logits
  • 输入参数:
    • _sentinel:内部参数,不要使用
    • labels:实际的label
    • logits:神经网络的最后一层
    • logits和labels的shape和dtype要相同,例如[batch_size, num_classes],dtype=tf.float32
  • 返回值:一维的tensor,长度为batch_size
  • 函数内包含对数计算和corss entropy的计算,通常对返回值使用tf.reduce_mean()函数之后可以得到loss

tf.equal

1
2
3
4
5
equal(
x,
y,
name=None
)
  • 函数名称:tf.equal
  • 输入参数:
    • x:tensor
    • y:tensor
  • 返回值:bool类型的tensor

tf.train.AdamOptimizer.minimize

1
2
3
4
5
6
7
8
9
10
minimize(
loss,
global_step=None,
var_list=None,
gate_gradients=GATE_OP,
aggregation_method=None,
colocate_gradients_with_ops=False,
name=None,
grad_loss=None
)
  • AdamOptimizer是tf.train下的一个类,继承 Optimizer类,可在创建实例时初始化设置learning rate,例如
    train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
  • Adam是一种最优化方法,结合了Momentum和RMSProp算法,通常被认为鲁棒性较好

tf.argmax

1
2
3
4
5
6
argmax(
input,
axis=None,
name=None,
dimension=None
)
  • 函数名称:tf.argmax
  • 输入参数:
    • input:一个tensor量
    • axis:运算的方向,对于一维向量axis=0
  • 返回值:沿axis方向最大值的下标,类型是int64的tensor

tf.cast

1
2
3
4
5
cast(
x,
dtype,
name=None
)
  • 函数名称:tf.cast
  • 函数作用:将x转变为dtype所规定的类型
  • 返回值:tensor,与x的shape相同

tf.Tensor.eval

1
2
3
4
eval(
feed_dict=None,
session=None
)
  • 设有一个tensor t,则以下两条语句等价:
    t.eval()
    tf.get_default_session().run(t)
  • eval()和sess()的区别主要有两点:

    • eval一条语句获取一个tensor值,sess可以同时获取多个tensor值,例如:

      1
      2
      3
      4
      5
      6
      7
      8
          t = tf.constant(42.0)
      u = tf.constant(37.0)
      tu = tf.mul(t, u)
      ut = tf.mul(u, t)
      with sess.as_default():
      tu.eval() # runs one step
      ut.eval() # runs one step
      sess.run([tu, ut]) # evaluates both tensors in a single step
    • 执行eval时必须有明确的session,可以通过以下两种方式实现:

      • 在参数中指定session=sess
      • 使用with关键词
        1
        2
        3
        with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        train_accuracy = accuracy.eval(feed_dict={x: batch[0], y_: batch[1], keep_prob: 1.0})