在二进制分类数据集中进行微调后,我得到了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 代码,因为我已经使用云服务运行了预先训练的模型,所以最好不要更改我的云服务代码。