我将在这里描述我的意图。我想通过tf hub函数hub.module(BERT_url,trainable=True(导入BERT预训练模型,并将其用于文本分类任务。我计划使用一个大型语料库来微调BERT的权重,以及一些输入为BERT输出的密集层。然后我想冻结BERT的层,只训练BERT之后的密集层。我如何才能有效地做到这一点?
您提到Hub的TF1 APIhub.Module
,所以我假设您正在编写TF1代码并使用与TF1兼容的Hub资产google/bert/。。。,例如https://tfhub.dev/google/bert_cased_L-12_H-768_A-12/1
在两个阶段的训练中,你会单独进行你的项目吗?如果是这样,也许您可以在第二次运行时从hub.Module
调用中删除trainable=True
。这不会影响变量名称,因此您可以恢复第一次跑步的训练结果,包括BERT调整后的权重。(需要明确的是:集线器附带的预训练重量。模块仅用于训练一开始的初始化;恢复检查点会覆盖它们。(