将LSTM / GRU添加到keras张量流中的BERT嵌入中

时间:2019-06-15 13:15:26

标签: lstm word-embedding tf.keras

我正在按照此代码https://github.com/strongio/keras-bert/blob/master/keras-bert.py

尝试进行BERT嵌入

这些是代码的重要位(第265-267行):

bert_output = BertLayer(n_fine_tune_layers=3)(bert_inputs)
dense = tf.keras.layers.Dense(256, activation="relu")(bert_output)
pred = tf.keras.layers.Dense(1, activation="sigmoid")(dense)

我想在BertLayer和Dense层之间添加一个GRU

bert_output = BertLayer(n_fine_tune_layers=3)(bert_inputs)
gru_out = tf.keras.layers.GRU(100, activation='sigmoid')(bert_output)
dense = tf.keras.layers.Dense(256, activation="relu")(gru_out)
pred = tf.keras.layers.Dense(1, activation="sigmoid")(dense)

但我收到此错误TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

我不确定如何解决此问题。我需要重塑bert_output还是需要创建Embedding可以处理的GRU层?

1 个答案:

答案 0 :(得分:0)

我有同样的错误,解决方法是

embedding_size = 768

bert_output = BertLayer(n_fine_tune_layers=3)(bert_inputs)
# Reshape bert_output before passing it the GRU
bert_output_ = tf.keras.layers.Reshape((max_seq_length, embedding_size))(bert_output)

gru_out = tf.keras.layers.GRU(100, activation='sigmoid')(bert_output_)
dense = tf.keras.layers.Dense(256, activation="relu")(gru_out)
pred = tf.keras.layers.Dense(1, activation="sigmoid")(dense)

我希望它能起作用,如果需要,您可以参考my question