Bi-LSTM-CRF(一)--tensorflow源码解析

1.1.核心代码:

cell_fw = tf.contrib.rnn.LSTMCell(num_units=100)

cell_bw = tf.contrib.rnn.LSTMCell(num_units=100)

(outputs, output_states) = tf.nn.bidirectional_dynamic_rnn(cell_fw, cell_bw, inputs, sequence_length=300)

1.2.LSTMCell

其实LSTM使用起来很简单,就是输入一排的向量,然后输出一排的向量。构建时只要设定两个超参数:num_units和sequence_length。

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 Cell只有一个超参数需要设定,num_units,即输出向量的维度。

1.3.bidirectional_dynamic_rnn

这个函数唯一需要设定的超参数就是序列长度sequence_length。

(outputs, output_states) = 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

)

输入:
inputs的shape通常是[batch_size, sequence_length, dim_embedding]。

输出:
outputs是一个(output_fw, output_bw)元组,output_fw和output_bw的shape都是[batch_size, sequence_length, num_units]

output_states是一个(output_state_fw, output_state_bw) 元组,分别是前向和后向最后一个Cell的Output,output_state_fw和output_state_bw的类型都是LSTMStateTuple,这个类有两个属性c和h,分别表示Memory Cell和Hidden State

你可能感兴趣的:(项目技术)