keras BERT嵌入LSTM模型拟合函数误差

l7wslrjt  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(160)

我是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内核作为后备。
有人能帮我吗,先谢了。

sczxawaw

sczxawaw1#

    • 重新生成错误**
_input1 = tf.random.uniform((1,100), 0 , 10)
_input2 = tf.random.uniform((1,100), 0 , 10)
model(_input1, _input2)

运行此代码后,我得到相同的错误...
x一个一个一个一个x一个一个二个一个x一个一个三个一个

    • 请记住:**如果您使用tf.data.Dataset,则在创建数据集时将其包含在集合中,如下所示tf.data.Dataset.from_tensor_slices((words_id, words_mask))
    • 第二个问题**

您收到警告的原因是,您应该知道LSTM不运行在 * CUDA GPU * 中,它只使用 * CPU *,因此速度很慢,因此 * TensorFlow * 只是告诉您LSTM不会在GPU或并行计算下运行。

相关问题