tensorflow API

1 tf.sequence_mask(lengths, maxlen=None, dtype=tf.bool, name=None): 返回表示每个单元的前$N$个位置的mask张量。
参数:

  • lengths: 整型张量,张量的值$<=maxlen$
  • maxlen:数值型整型张量,是返回张量最后一维的大小。默认的是lengths中的最大值
  • dtype:结果张量的类型
  • name:op的名字

例1:指定maxlen

1
2
3
4
5
6
>>> ins1 = tf.sequence_mask([1, 3, 2], 5)
>>> sess.run(ins1)
array([[ True, False, False, False, False],
[ True, True, True, False, False],
[ True, True, False, False, False]])
>>>

例2:使用默认maxlen

1
2
3
4
5
6
7
8
>>> ins2 = tf.sequence_mask([[1, 3], [2, 0]])
>>> sess.run(ins2)
array([[[ True, False, False],
[ True, True, True]],

[[ True, True, False],
[False, False, False]]])
>>>

例3:改变结果张量默认的dtype=tf.booldtype=tf.float32

1
2
3
4
5
6
>>> ins3 = tf.sequence_mask([1, 3, 2], 5, tf.float32)
>>> sess.run(ins3)
array([[1., 0., 0., 0., 0.],
[1., 1., 1., 0., 0.],
[1., 1., 0., 0., 0.]], dtype=float32)
>>>

2 tf.nn.embedding_lookup(params, ids, partition_strategy=’mod’, name=None, validate_indices=True, max_norm=None):用于在params中对张量列表进行并行查找。该API是tf.gather()的泛化,其中的params解释为大型嵌入张量的一个划分。params可以是一个PartitionedVariable,通过使用带有分区器的tf.get_variable()返回。
如果len(params) > 1,则根据partition_strategyparams的元素之间划分ids的每个元素id。在所有策略中,如果id空间不均匀地划分分区数,则将为第一个(max_id + 1)%len(params)分区中的每个分配一个id。

如果partition_strategy是“mod”,我们将每个id分配给分区p = id % len(params)。例如,13个id被划分到5个分区中,如下所示:[[0,5,10],[1,6,11],[2,7,12],[3,8],[4,9]]。

如果partition_strategy是“div”,则以连续的方式将id分配给分区。在本例中,13个id被分割到5个分区,分别为:[[0,1,2],[3,4,5],[6,7,8],[9,10],[11,12]]。

查找的结果被连接成一个稠密张量。返回的张量具有shape shape(ids) + shape(params)[1:]。

参数:

  • params:一个表示完整嵌入张量的张量,或者一个除第一维外形状相同的P张量列表,表示分片嵌入张量。或者,一个PartitionedVariable,由沿着维度0分区创建。对于给定的partition_strategy,每个元素的大小必须适当。
  • ids:类型为int32或int64的张量,包含要在params中查找的id。
  • partition_strategy:指定分区策略的字符串,与len(params) > 1相关。目前支持“div”和“mod”。默认设置是“mod”。
  • name:操作的名称(可选)。
  • validate_indices:弃用。如果将此操作分配给CPU,则始终验证索引中的值是否在范围内。如果分配给GPU,超界索引会导致安全但未指定的行为,这可能包括引发错误。
  • max_norm: 如果非None,如果l2范数大于这个值,则每个嵌入都将被剪切

3 (类)tf.contrib.rnn.LSTMCell(或tf.nn.rnn_cell.LSTMCell)
注意:该LSTMCell没有针对性能进行优化。要使其在GPU上有更更好的性能,可以使用tf.contrib.cudnn_rnn.CudnnLSTM;要使其在CPU上获得更好性能,可以使用tf.contrib.rnn.LSTMBlockCelltf.contrib.rnn.LSTMBlockFusedCell

(1)init(num_units, use_peepholes=False, cell_clip=None, initializer=None, num_proj=None, proj_clip=None, num_unit_shards=None, num_proj_shards=None, forget_bias=1.0, state_is_tuple=True, activation=None, reuse=None, name=None, dtype=None, kwargs)**
参数:

  • num_units:int,LSTM Cell的单元数。
  • use_peepholes:bool,设置为True以启用对角/窥视孔连接。
  • cell_clip:(可选的),float值,如果提供了该值,Cell的状态会先于Cell的输出激活被裁剪。
  • initializer:(可选的),权重与投影矩阵的初始化器。
  • num_proj:(可选的),int,投影矩阵的输出维度。如果是None,不进行投影。
  • proj_clip:(可选的),float值,如果$num_proj>0$并且提供了$proj_clip$,那么,投影值会被逐元素裁剪到$[-proj\_clip, proj\_clip]$范围内。
  • num_unit_shards:弃用
  • num_proj_shards:弃用
  • forget_bias:为了减少训练开始时的遗忘程度,遗忘门的偏置被初始化为1。从CudnnLSTM训练过的检查点恢复时必须手动将其设置为0.0。
  • state_is_tuple:如果为True,接受状态和返回状态是c_state和m_state的2元组。如果为False,则沿着列轴连接它们。后一种行为将很快被摒弃。
  • activation:内部状态的激活函数。默认值:$\tanh$。它也可以是Keras激活函数名称中的字符串。
  • reuse:(可选)描述是否在现有范围内重用变量的Python布尔值。如果不为真,并且现有范围已经具有给定的变量,则会引发错误。
  • name:String,层的名称。具有相同名称的层将共享权重,但是为了避免错误,在这种情况下需要reuse=True。
  • dtype:层的默认dtype(默认为None意味着使用第一个输入的类型)。在调用之前call build时必需。