【发布时间】:2019-08-15 10:39:14
【问题描述】:
有人知道如何从 BERT 在 Tensorflow Hub 上托管的模型访问中间层的输出吗?
模型托管在here。我探索了元图,发现唯一可用的签名是“tokens”、“tokenization_info”和“mlm”。前两个在examples on github 中有说明,掩码语言模型签名没有多大帮助。一些模型like inception 允许您访问所有中间层,但不能访问这一层。
现在,我能想到的只有:
- 运行
[i.values() for i in tf.get_default_graph().get_operations()]获取张量的名称,然后找到我想要的(从数千个中) -
tf.get_default_graph().get_tensor_by_name(name_of_the_tensor)访问这些值并将它们拼接在一起并将它们连接到我的下游层。
有人知道使用 Tensorflow 的更清洁的解决方案吗?
【问题讨论】:
-
可能你破解的方式是读取中间层的唯一方法,因为它们没有通过集线器签名暴露。另一种选择是提出功能请求,要求在 github 上提供其他输出。
-
谢谢!我就是这么想的。我可能会提出一个功能请求。如果我错了,请纠正我,但我在 BERT 文献中阅读的越多,似乎连接这些其他层的好处就越多。
-
是的,我看到一些人(一些特定的领域/用例),使用中间层是有帮助的。但您的里程可能会有所不同。总之,值得一试。
-
您能否发布详细的代码以提取图层功能?我收到一个错误
InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder' with dtype float -
签出这个问题@sourabhxiii github.com/tensorflow/hub/issues/290
标签: python tensorflow nlp bert-language-model tensorflow-hub