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得到的結果,說明設置正確。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章