我为NLP实现了一个非常标准的LSTM模型,我用预训练嵌入来初始化每个单词。对于每个单词向量,我想要连接字符序列的LSTM编码(对于该单词)和字符序列的卷积编码(对于该单词)。
我的输入张量具有以下形状:[批量大小,最大字序列长度,最大字符序列长度,字母字母大小]。如果我沿着维度0解包,我得到形状的张量[最大字序列长度,最大字符序列长度,字母大小],我可以轻松地运行LSTM / 1D-Convolution。然而,这显着减慢了图形创建速度,模型训练似乎也明显变慢。
这里是LSTM编码的代码:
chars = tf.unstack(chars, axis=0)
lengths = tf.unstack(lengths, axis=0)
lstm_word_embeddings = []
for i, (char, length) in enumerate(zip(chars, lengths)):
reuse = i != 0
embedding = lstm_encoder(char, length, embed_dim, scope=scope, reuse=reuse)
lstm_word_embeddings.append(embedding)
lstm_word_embeddings = tf.stack(lstm_word_embeddings, axis=0)
有更好的方法吗?