TF:
单个RNN单元可以调用:
rnn_cell = tf.nn.rnn_cell.BasicLSTMCell(num_units=128) # num_units是隐藏状态的特征维数,如果直接将h当作输出,则输出特征的维数是128
(也可以调用tf.nn.rnn_cell.BasicRNNCell(num_units=128)或tf.nn.rnn_cell.GRUCell(num_units=128)等rnn_cell_impl.py里的类)
RNN单元纵向堆叠(多层RNN网络):
multi_cell = tf.nn.rnn_cell.MultiRNNCell(
[rnn, rnn, rnn])
RNN单元横向扩展(时间维度上):
lstm_outputs, final_state = tf.nn.dynamic_rnn(multi_cell, lstm_inputs, initial_state=initial_state)
# inputs是输入x: shape=(batch_size, 序列长度/时间步/句子长度, embedding_size(可能没有embedding))
# initial_state是初始隐藏状态h0: shape=(batch_size, multi_cell.state_size)
# lstm_outputs是 序列长度/时间步/句子长度 所有步的输出: shape=(batch_size, 序列长度/时间步/句子长度, cell.output_size),如果对hidden_state没有做特殊输出处理,那么output_size=hidden_size
Pytorch:
单个RNN单元可以调用torch.nn.RNNCell(), LSTMCell(), GRUCell()