去掉一层薄纱

2024-04-27 22:14:34 发布

您现在位置:Python中文网/ 问答频道 /正文

在一个二进制分类数据集中经过微调后,我得到了一个BERT预训练模型。我想在多分类任务中使用它。因为我在最后一层使用了相同的变量名:output\u weights和output\u bias,所以在初始化最后一层分类的变量时有一个ValueError,finetunning层的形状是[2],而我的新任务是5类分类

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

所以我尝试加载checkpoint文件,删除最后一层的变量并保存它。但在它之后,我仍然得到相同的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:我不能更改我的BERTrun\u classifier.py代码,因为我使用云服务运行预训练模型,所以最好不要更改我的云服务代码


Tags: path代码namenewoutputmodelvarsave