clvsit / bert-simple-use

关于 Google Bert 框架训练、验证、推断和导出的简单说明
9 stars 3 forks source link

请问一下关于蒸馏的问题 #2

Open fffyyy415 opened 4 years ago

fffyyy415 commented 4 years ago

学生模型的4层是从bert的哪几层蒸馏出来的? 如何控制蒸馏哪几层

clvsit commented 4 years ago
  1. 这个取决于你的方案,这个模型是运用了《Distilling the Knowledge in a Neural Network》这篇论文的想法,用学生模型去拟合教师模型的 soft-laber(预测),相当于老师告诉你这道题目的答案,至于如何思考并没有一一细讲,因此我们也不知道学生模型是从教师模型的哪几层学到的。
  2. 基于第一个回答,后续就有人想到,只让学生模型学习教师模型的输出难度还是有点大,如果教师模型能够将它的思考过程也告诉学生模型岂不是更好,于是就有了这篇论文《Patient Knowledge Distillation for BERT Model Compression》,推荐去看一下,里面的模型图挺清楚的。这篇论文的方法我还没有实现。
fffyyy415 commented 4 years ago
  1. 这个取决于你的方案,这个模型是运用了《Distilling the Knowledge in a Neural Network》这篇论文的想法,用学生模型去拟合教师模型的 soft-laber(预测),相当于老师告诉你这道题目的答案,至于如何思考并没有一一细讲,因此我们也不知道学生模型是从教师模型的哪几层学到的。

  2. 基于第一个回答,后续就有人想到,只让学生模型学习教师模型的输出难度还是有点大,如果教师模型能够将它的思考过程也告诉学生模型岂不是更好,于是就有了这篇论文《Patient Knowledge Distillation for BERT Model Compression》,推荐去看一下,里面的模型图挺清楚的。这篇论文的方法我还没有实现。

  3. 这个取决于你的方案,这个模型是运用了《Distilling the Knowledge in a Neural Network》这篇论文的想法,用学生模型去拟合教师模型的 soft-laber(预测),相当于老师告诉你这道题目的答案,至于如何思考并没有一一细讲,因此我们也不知道学生模型是从教师模型的哪几层学到的。

  4. 基于第一个回答,后续就有人想到,只让学生模型学习教师模型的输出难度还是有点大,如果教师模型能够将它的思考过程也告诉学生模型岂不是更好,于是就有了这篇论文《Patient Knowledge Distillation for BERT Model Compression》,推荐去看一下,里面的模型图挺清楚的。这篇论文的方法我还没有实现。

还有个问题是 distill.sh里是run_classifier.py,而你的说明写的是 distill.sh是运行run_classifier_distill.py的脚本,请问需不需要改呢?

clvsit commented 4 years ago

是我这边的问题,需要修改成 run_classifier_distill.py,不好意思...

fffyyy415 commented 4 years ago

是我这边的问题,需要修改成 run_classifier_distill.py,不好意思...

但是run_classifier_distill.py里419行 features["soft_label"] = create_float_feature(feature.soft_target),soft_target会报错。应该怎么解决呢

clvsit commented 4 years ago

是我这边的问题,需要修改成 run_classifier_distill.py,不好意思...

但是run_classifier_distill.py里419行 features["soft_label"] = create_float_feature(feature.soft_target),soft_target会报错。应该怎么解决呢

具体报了什么错误?在 convert_single_example() 这个函数中有对 soft_target 进行打印,可以看下打印的内容是什么

fffyyy415 commented 4 years ago

是我这边的问题,需要修改成 run_classifier_distill.py,不好意思...

但是run_classifier_distill.py里419行 features["soft_label"] = create_float_feature(feature.soft_target),soft_target会报错。应该怎么解决呢

具体报了什么错误?在 convert_single_example() 这个函数中有对 soft_target 进行打印,可以看下打印的内容是什么

报错是:AttributeError: 'InputFeatures' object has no attribute 'soft_target' 应该是Features里没有soft_target这个参数

fffyyy415 commented 4 years ago

是我这边的问题,需要修改成 run_classifier_distill.py,不好意思...

但是run_classifier_distill.py里419行 features["soft_label"] = create_float_feature(feature.soft_target),soft_target会报错。应该怎么解决呢

具体报了什么错误?在 convert_single_example() 这个函数中有对 soft_target 进行打印,可以看下打印的内容是什么

image

clvsit commented 4 years ago

是我这边的问题,需要修改成 run_classifier_distill.py,不好意思...

但是run_classifier_distill.py里419行 features["soft_label"] = create_float_feature(feature.soft_target),soft_target会报错。应该怎么解决呢

具体报了什么错误?在 convert_single_example() 这个函数中有对 soft_target 进行打印,可以看下打印的内容是什么

image

在 419 行修改成 soft_label 试一下,我刚看了下是变量名调用错了,前面传递的是 soft_label。

fffyyy415 commented 4 years ago

是我这边的问题,需要修改成 run_classifier_distill.py,不好意思...

但是run_classifier_distill.py里419行 features["soft_label"] = create_float_feature(feature.soft_target),soft_target会报错。应该怎么解决呢

具体报了什么错误?在 convert_single_example() 这个函数中有对 soft_target 进行打印,可以看下打印的内容是什么

image

在 419 行修改成 soft_label 试一下,我刚看了下是变量名调用错了,前面传递的是 soft_label。

image image 还是有点问题 在读取tfrecord后

clvsit commented 4 years ago

是我这边的问题,需要修改成 run_classifier_distill.py,不好意思...

但是run_classifier_distill.py里419行 features["soft_label"] = create_float_feature(feature.soft_target),soft_target会报错。应该怎么解决呢

具体报了什么错误?在 convert_single_example() 这个函数中有对 soft_target 进行打印,可以看下打印的内容是什么

image

在 419 行修改成 soft_label 试一下,我刚看了下是变量名调用错了,前面传递的是 soft_label。

image image 还是有点问题 在读取tfrecord后

tfrecord 是新创建的吗?在你训练前有没有把之前训练过程中生成的 tfrecord 删除?

fffyyy415 commented 4 years ago

是我这边的问题,需要修改成 run_classifier_distill.py,不好意思...

但是run_classifier_distill.py里419行 features["soft_label"] = create_float_feature(feature.soft_target),soft_target会报错。应该怎么解决呢

具体报了什么错误?在 convert_single_example() 这个函数中有对 soft_target 进行打印,可以看下打印的内容是什么

image

在 419 行修改成 soft_label 试一下,我刚看了下是变量名调用错了,前面传递的是 soft_label。

image image 还是有点问题 在读取tfrecord后

tfrecord 是新创建的吗?在你训练前有没有把之前训练过程中生成的 tfrecord 删除?

你是说distill.sh的output里的tfrecord吗?这个是自动新建生成的啊

clvsit commented 4 years ago

我在想是不是因为之前 soft_label 的问题,导致生成的 tfrecord 文件有问题,然后你没有把之前生成的 tfrecord 删除,而是继续使用了,所以会出现这个问题?

clvsit commented 4 years ago

是我这边的问题,需要修改成 run_classifier_distill.py,不好意思...

但是run_classifier_distill.py里419行 features["soft_label"] = create_float_feature(feature.soft_target),soft_target会报错。应该怎么解决呢

具体报了什么错误?在 convert_single_example() 这个函数中有对 soft_target 进行打印,可以看下打印的内容是什么

image

在 419 行修改成 soft_label 试一下,我刚看了下是变量名调用错了,前面传递的是 soft_label。

image image 还是有点问题 在读取tfrecord后

tfrecord 是新创建的吗?在你训练前有没有把之前训练过程中生成的 tfrecord 删除?

你是说distill.sh的output里的tfrecord吗?这个是自动新建生成的啊

我这边完整地跑了一下没有问题,稍后我把修改后的 sh 上传一下,再和你说一下步骤,或者你加我 QQ 879646529