我是TensorFlow新手
我尝试在LSTM模型中使用BERT嵌入,这是我的模型函数
def bert_tweets_model():
Bertmodel = TFAutoModel.from_pretrained(model_name,output_hidden_states=True)
input_word_ids = tf.keras.Input(shape=(max_length,), dtype=tf.int32, name="input_ids")
input_masks_in = tf.keras.Input(shape=(max_length,), name='masked_token', dtype='int32')
with torch.no_grad():
last_hidden_states = Bertmodel(input_word_ids, attention_mask=input_masks_in)[0]
x = tf.keras.layers.LSTM(100, dropout=0.1, activation='relu',recurrent_dropout=0.3,return_sequences = True)(last_hidden_states)
x = tf.keras.layers.LSTM(50, dropout=0.1,activation='relu', recurrent_dropout=0.3,return_sequences = True)(x)
x=tf.keras.layers.Flatten()(x)
output = tf.keras.layers.Dense(units = 2, activation='sigmoid')(x)
model = tf.keras.Model(inputs=[input_word_ids, input_masks_in], outputs = output)
return model
with strategy.scope():
model = bert_tweets_model()
adam_optimizer = tf.keras.optimizers.Adam(learning_rate=1e-5)
model.compile(loss='binary_crossentropy',optimizer=adam_optimizer,metrics=['accuracy'])
model.summary()
validation_data=[dev_encoded, y_val]
train2=[input_id, attention_mask]
history = model.fit(
x=train2, y=y_train, batch_size=batch_size,
epochs=3,
validation_data=validation_data,
verbose=2)
当我尝试输入数据时,在拟合函数中收到此错误
“值错误:层“model_1”需要2个输入,但它接收到1个输入Tensor。[〈tf.Tensor'迭代器获取下一个:0'形状=(无,512)数据类型=int32〉]”
还有,我收到了这些警告消息,我不知道是什么意思。
警告:tensorflow:层lstm_2将不使用cuDNN内核,因为它不符合条件。在GPU上运行时,它将使用通用GPU内核作为后备。警告:tensorflow:层lstm_3将不使用cuDNN内核,因为它不符合条件。在GPU上运行时,它将使用通用GPU内核作为后备。
有人能帮我吗,先谢了。
1条答案
按热度按时间sczxawaw1#
运行此代码后,我得到相同的错误...
x一个一个一个一个x一个一个二个一个x一个一个三个一个
tf.data.Dataset
,则在创建数据集时将其包含在集合中,如下所示tf.data.Dataset.from_tensor_slices((words_id, words_mask))
您收到警告的原因是,您应该知道LSTM不运行在 * CUDA GPU * 中,它只使用 * CPU *,因此速度很慢,因此 * TensorFlow * 只是告诉您LSTM不会在GPU或并行计算下运行。