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