首页 > 解决方案 > 微调 Bert 模型中的 fit() 函数错误

问题描述

我使用 TFBertModel 进行文本相似性任务,2 个月前工作的代码现在出现错误并且无法正常工作,可能是因为 colab 库的版本随着时间的推移而变化。他给出的错误是针对 Bert,他说使用了 keras.tensor 而不是 tf.tensor。我使用了这个命令: tf.compat.v1.disable_eager_execution() 来解决这个问题。问题已解决,但现在它给 fit() 函数提供了此错误: ValueError: Variable <tf.Variable 'tf_bert_model/bert/pooler/dense/kernel:0' shape=(768, 768) dtype=float32> hasNone为渐变。请确保您的所有操作都定义了渐变(即可微分)。没有梯度的常见操作:K.argmax、K.round、K.eval。 我该如何解决这个错误?

    tf.compat.v1.disable_eager_execution()
    bert = TFBertModel.from_pretrained('bert-base-multilingual-cased')
    input_ids_1 = keras.layers.Input(shape=(300,), name='input_ids_1', dtype=tf.int32)
    input_masks_ids_1 =  keras.layers.Input(shape=(300,), name='masked_token_1', dtype=tf.int32)
    input_token_ids_1 = keras.layers.Input(shape=(300,), name='token_ids_1', dtype=tf.int32)
    bert_1 = bert(input_ids_1, input_masks_ids_1,input_token_ids_1 )
    bert_1 = bert_1[0]
    bert_1=keras.layers.Dropout(0.2)(bert_1)
    bert_1 = keras.layers.GlobalAveragePooling1D()(bert_1)
    input_ids_2 = keras.layers.Input(shape=(300,), name='input_ids_2', dtype='int32')
    input_masks_ids_2 = keras.layers.Input(shape=(300,), name='masked_token_2', dtype='int32')
    input_token_ids_2 = keras.layers.Input(shape=(300,), name='token_ids_2', dtype='int32')
    bert_2 = bert(input_ids_2,input_masks_ids_2,input_token_ids_2)
    bert_2 = bert_2[0]
    bert_2=keras.layers.Dropout(0.2)(bert_2)  
    bert_2 = keras.layers.GlobalAveragePooling1D()(bert_2)
    concat=keras.layers.concatenate([bert_1,bert_2])
    dense = keras.layers.Dense(256,activation='relu')(concat)
    classifier = keras.layers.Dense(1,activation='sigmoid')(dense)
    model = keras.Model(inputs=[[input_ids_1,input_masks_ids_1,input_token_ids_1,input_ids_2,input_masks_ids_2,input_token_ids_2]], outputs=classifier)
    model.summary()
    optimizer = tf.keras.optimizers.Adam(learning_rate=1e-5)
    loss = tf.keras.losses.mse
    metric = tf.keras.metrics.mae
    model.compile(optimizer=optimizer, loss=loss, metrics=[metric])
    model_fit = model.fit([x_train_1[0],x_train_1[1],x_train_1[2],x_train_2[0],x_train_2[1],x_train_2[2]], y_train_1, batch_size=8, epochs=1,validation_data=([x_val_1[0],x_val_1[1],x_val_1[2],x_val_2[0],x_val_2[1],x_val_2[2]], y_val_1))

标签: tensorflowkerasbert-language-modelhuggingface-transformers

解决方案


推荐阅读