删除BERT的微调层

时间:2019-12-25 08:30:15

标签: python tensorflow

在二进制分类数据集中进行微调后,我得到了BERT预训练模型。我想在多分类任务中使用它。因为我在最后一层使用了相同的变量名称:output_weights和output_bias,所以在BERT初始化分类最后一层的变量时出现ValueError,并且微调层的形状为[2],而我的新任务是5类分类。

ValueError: Shape of variable output_bias:0 ((5,)) doesn't match with shape of tensor output_bias ([2]) from checkpoint reader.

因此,我尝试加载检查点文件并删除最后一层的变量并保存。但是之后,我仍然遇到相同的ValueError错误。这是我的处理代码,之前我使用过Pytorch,所以我不熟悉Tensorflow及其API。谁能帮我指出我的错?谢谢〜

def remove_finetune_layer(model_path, output_dir):

    with tf.compat.v1.Session() as sess:
        new_var_list = []
        for var_name, _ in tf.train.list_variables(model_path):
            if var_name.split('/')[0] == 'bert':
                var = tf.train.load_variable(model_path, var_name)

                save_var = tf.Variable(var, name=var_name)
                new_var_list.append(save_var)

        saver = tf.train.Saver(var_list=new_var_list)
        sess.run(tf.global_variables_initializer())
        saver.save(sess, os.path.join(output_dir, "bert_model.ckpt"))

PS:我无法更改BERT run_classifier.py 代码,因为我已经使用云服务运行了预先训练的模型,所以最好不要更改我的云服务代码。

0 个答案:

没有答案