AllenNLP实践——fine-tune

AllenNLP的commands命令中有一个fine-tune命令,可以在新的数据集上训练模型,或者在原来的模型上继续训练。
fine-tune命令跳过配置文件的model部分,即网络结构是要固定下来的,其他参数可以变。
比如可以在配置文件设置trainer的no_grad,冻结一些层,让他们不进行参数更新,而其他层的参数正常更新。

以qanet.jsonnet为例

  1. 在windows中首先要去掉//的注释和变量,使它成为json的格式
  2. 执行dry-run命令,可以打印输出哪些层是可训练的,哪些层是冻结的
  3. 修改配置文件,在trainer中添加no_grad,其中用一个List的正则表达式,定义哪些层是需要冻结的
  4. 执行dry-run命令,验证是否设置成功

正则表达式

以下是我添加的no_grad,目的是冻结前面所有层,只训练最后的两个Linear。(“.”表示任意字符,“*”表示前面的字符可以重复多个,. * layer. *表示找到所有名字中带有layer的层)

"no_grad":
	    [".*text_field_embedder.*", ".*layer.*", ".*matrix.*"]

dry-run得到的结果,说明设置正确。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_38133212/article/details/88615209