1 tf.sequence_mask(lengths, maxlen=None, dtype=tf.bool, name=None): 返回表示每个单元的前$N$个位置的mask张量。
参数:
- lengths: 整型张量,张量的值$<=maxlen$
- maxlen:数值型整型张量,是返回张量最后一维的大小。默认的是lengths中的最大值
- dtype:结果张量的类型
- name:op的名字
例1:指定maxlen1
2
3
4
5
6ins1 = 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:使用默认maxlen1
2
3
4
5
6
7
8ins2 = 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.bool为dtype=tf.float321
2
3
4
5
6ins3 = 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_strategy在params的元素之间划分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.LSTMBlockCell和tf.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时必需。