tensorflow API学习——LSTM实现

1、tf.contrib.rnn.LSTMCell
tf.contrib.rnn.LSTMCell(
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
)

初始化LSTM单元的参数。

ARGS:
num_units:int,LSTM单元中的单位数。
use_peepholes:bool,将True设置为启用对角线/窥视孔连接。
cell_clip:(可选)浮点值(如果提供的话)单元格状态在单元格输出激活之前由此值限制。
initializer:(可选)用于权重和投影矩阵的初始化程序。
num_proj:(可选)int,投影矩阵的输出维数。如果没有,则不执行投影。
proj_clip:(可选)浮点值。如果num_proj > 0和proj_clip被提供,然后投影值被剪裁到内部 [-proj_clip, proj_clip]。
num_unit_shards:已弃用,将在2017年1月之前被删除。请改用variable_scope分区器。
num_proj_shards:已弃用,将在2017年1月之前被删除。请改用variable_scope分区器。
forget_bias:忘记门的偏差默认初始化为1,以减少训练开始时的遗忘规模。必须手动将其设置为0.0从CudnnLSTM受过训练的检查点恢复时。
state_is_tuple:如果为True,接受并返回状态是的2元组c_state和m_state。如果为False,则沿列轴连接。后一种行为即将被弃用。
activation:内部状态的激活功能。默认:tanh。
reuse:(可选)描述是否在现有作用域中重用变量的Python布尔值。如果没有True,并且现有范围已经具有给定的变量,则会引发错误。

2、tf.contrib.rnn.DropoutWrapper

tf.contrib.rnn.DropoutWrapper(
cell,
input_keep_prob=1.0,
output_keep_prob=1.0,
state_keep_prob=1.0,
variational_recurrent=False,
input_size=None,
dtype=None,
seed=None,
dropout_state_filter_visitor=None
)
创建一个添加了输入,状态和/或输出丢失的单元。

ARGS:
cell:一个RNNCell,向output_size的投影被添加到它。
input_keep_prob:单位0或1之间的张量或浮动,输入保持概率; 如果它是常数和1,则不会添加输​​入丢失。
output_keep_prob:单位张量或在0和1之间浮动,输出保持概率; 如果它是常数和1,则不会添加输​​出丢失。
state_keep_prob:单位张量或在0和1之间浮动,输出保持概率; 如果它是常数和1,则不会添加输​​出丢失。状态退出在单元的输出状态上执行。 注意状态组件时,其差被施加 state_keep_prob在(0, 1)也由参数确定dropout_state_filter_visitor(例如,通过默认差从未施加到c的一个部件LSTMStateTuple)。
variational_recurrent:Python布尔。如果True,那么在每个运行调用的所有时间步骤中应用相同的退出模式。如果设置了该参数,则input_size 必须提供。
input_size:(可选)(可能是嵌套元组)TensorShape包含输入张量深度的对象,这些输入张量预计会被传入DropoutWrapper。要求和使用iff variational_recurrent = True和input_keep_prob < 1。
dtype:(可选)dtype输入,状态和输出张量。必需和使用iff variational_recurrent = True。
seed:(可选)整数,随机性种子。
dropout_state_filter_visitor:(可选),默认:(见下文)。这个函数接受状态的任何层次并返回一个标量或者深度= 1的Python布尔结构,用来描述状态中的哪些项应该被删除。另外,如果函数返回True,则在这个子层次上应用dropout。如果函数返回False,则在整个子级中不应用dropout。默认行为:对除对象的内存(c)状态以外的所有术语执行压缩LSTMCellState,并且不要尝试将压出应用到 TensorArray对象: def dropout_state_filter_visitor(s): if isinstance(s, LSTMCellState): # Never perform dropout on the c state. return LSTMCellState(c=False, h=True) elif isinstance(s, TensorArray): return False return True

3、tf.nn.bidirectional_dynamic_rnn
tf.nn.bidirectional_dynamic_rnn(
cell_fw,
cell_bw,
inputs,
sequence_length=None,
initial_state_fw=None,
initial_state_bw=None,
dtype=None,
parallel_iterations=None,
swap_memory=False,
time_major=False,
scope=None
)
采取输入建立独立的前向和后向RNN。正向和反向单元格的input_size必须匹配。默认情况下,两个方向的初始状态都是零(但可以选择设置),并且不会返回任何中间状态 - 网络完全展开为序列的给定(传入)长度或者完全展开如果没有给出长度,展开。

ARGS:
cell_fw:RNNCell的一个实例,用于正向。
cell_bw:RNNCell的一个实例,用于反向。
inputs:RNN输入。如果time_major == False(默认),则它必须是形状的张量 [batch_size, max_time, …],或者这些元素的嵌套元组。如果time_major == True,则它必须是shape的张量 [max_time, batch_size, …],或者是这些元素的嵌套元组。
sequence_length:(可选)一个int32 / int64向量,大小[batch_size],包含批处理中每个序列的实际长度。如果未提供,则所有批次条目均假定为完整序列; 并且时间反转从时间0到max_time每个序列被应用。
initial_state_fw:(可选)前向RNN的初始状态。这必须是适当类型和形状的张量 [batch_size, cell_fw.state_size]。如果cell_fw.state_size是一个元组,这应该是一个具有形状的张量的元组[batch_size, s] for s in cell_fw.state_size。
initial_state_bw:(可选)与之相同initial_state_fw,但使用相应的属性cell_bw。
dtype:(可选)初始状态和预期输出的数据类型。如果未提供initial_states或者RNN状态具有异构dtype,则为必需。
parallel_iterations:(默认:32)。并行运行的迭代次数。那些没有任何时间依赖性并且可以并行运行的操作将会是。此参数用于空间换算时间。值>> 1使用更多的内存,但花费更少的时间,而更小的值使用更少的内存,但计算需要更长的时间。
swap_memory:透明地交换前向推理中产生的张量,但是从GPU到后端支持所需的张量。这允许训练通常不适合单个GPU的RNN,而且性能损失非常小(或不)。
time_major:inputs和outputs张量的形状格式。如果为真,这些Tensors必须形[max_time, batch_size, depth]。如果错误的话,这些Tensors必须被塑造[batch_size, max_time, depth]。使用time_major = True更有效一些,因为它避免了RNN计算开始和结束时的转置。但是,大多数TensorFlow数据是批处理主要的,所以默认情况下这个函数接受输入并以批处理形式发出输出。
scope:创建子图的VariableScope; 默认为“bidirectional_rnn”
返回:
元组(outputs,output_states)其中:: 包含正向和反向rnn输出的元组(output_fw,output_bw)。如果time_major == False(默认值),则output_fw将是一个shape: 并且output_bw将被定形: 。如果time_major == True,则output_fw将为一个整形: output_bw将为一个整形: 。它返回一个元组,而不是单个连接,不像在。如果连接的是首选,则前向和后向输出可以连接为 。 outputsTensorTensor
[batch_size, max_time, cell_fw.output_size]Tensor
[batch_size, max_time, cell_bw.output_size]Tensor
[max_time, batch_size, cell_fw.output_size]Tensor
[max_time, batch_size, cell_bw.output_size]Tensorbidirectional_rnn

tf.concat(outputs, 2) output_states:包含双向rnn的正向和反向最终状态的元组(output_state_fw,output_state_bw)。

4、tf.contrib.seq2seq.TrainingHelper

tf.contrib.seq2seq.TrainingHelper(
inputs,
sequence_length,
time_major=False,
name=None
)
初始化程序。

ARGS:
inputs:输入张量的(结构)。
sequence_length:一个int32向量张量。
time_major:Python布尔。张量是否inputs是时间主要的。如果False(默认),他们被认为是批次专业。
name:为任何创建的操作命名作用域。

训练期间使用的助手。只读取输入。

返回的sample_id是RNN输出逻辑的argmax。

5、tf.contrib.seq2seq.dynamic_decode

tf.contrib.seq2seq.dynamic_decode(
decoder,
output_time_major=False,
impute_finished=False,
maximum_iterations=None,
parallel_iterations=32,
swap_memory=False,
scope=None
)

执行动态解码decoder。

在解码器对象上重复调用initialize()once和step()。

ARGS:
decoder:一个Decoder实例。
output_time_major:Python布尔值。默认:( False批次专业)。如果 True输出作为时间主张量返回(这种模式更快)。否则,输出作为批量主张量返回(这增加了计算的额外时间)。
impute_finished:Python布尔值。如果True,那么标记为完成的批处理条目的状态被复制通过,并且相应的输出被清零。这会在每个时间步骤中导致一些减速,但确保最终状态和输出具有正确的值,并且backprop忽略标记为已完成的时间步骤。
maximum_iterations:int32标量,解码步骤的最大允许数量。默认是None(解码直到解码器完全完成)。
parallel_iterations:传递给的论据tf.while_loop。
swap_memory:传递给的论据tf.while_loop。
scope:可选变量作用域。
返回:
(final_outputs, final_state, final_sequence_lengths)。

6、

你可能感兴趣的:(深度学习)