如何在本地的tf集线器中运行elmo模型?

时间:2020-10-12 11:34:17

标签: tensorflow

你好?谢谢您阅读我的问题。

我正在尝试在Tensorflow 2.0环境中的tf hub中运行elmo模型。 所以我在本地下载了elmo模型。

elmo
  |
  |-variables
  |-saved_model.pb
  |-tfhub_module.pb

我使用了hub.load和hub.module函数,它们是Internet上可用的方法。 但是,elmo模型不起作用,因为它是在tf 1.x版本中制成的。

下面的代码到目前为止已经奏效了。

import tensorflow as tf
import tensorflow_hub as hub

elmo_path = './elmo'
model = tf.saved_model.load(elmo_path)
print(model)
print(list(model.signatures.keys()))

输出是

<tensorflow.python.training.tracking.tracking.AutoTrackable object at 0x000001B59757CF60>
['tokens', 'word_emb', 'default']

从模型中导入“默认”签名并嵌入句子将得到很好的结果。 (实际上,当您键入句子时,我不确定这是否真的是elmo矢量)。

load = model.signatures["default"]
embeds = load(tf.constant(["the cat is on the mat",
                       "dogs are in the fog"]))['elmo']
print(embeds)

tf.Tensor(
 [[[ 3.08154464e-01  2.66303837e-01  2.35613048e-01 ... -3.70857030e-01
  1.64904684e-01 -7.24598020e-02]
 [ 5.14287591e-01 -1.35323271e-01  1.10904068e-01 ...  4.04683724e-02
 -4.78972793e-02  7.36595869e-01]
 [-2.58803405e-02 -7.28363544e-02 -7.93558732e-02 ... -2.90724397e-01
  7.24213958e-01  4.38634723e-01]...

但是我想像tf hub homepage所示进行单词嵌入。 所以我在下面写了代码

tokens_input = ["hi", "hello", "my", "name", "is"]
tokens_len = 5

load = model.signatures["tokens"]
elmo = load(tokens=tf.constant(tokens_input),sequence_len=tf.constant(5))['elmo']

但是出现以下错误。 我该怎么办?

InvalidArgumentError: 2 root error(s) found.
(0) Invalid argument:  Tried to expand dim index 1 for tensor with 0 dimensions.
 [[node ExpandDims_1 (defined at <ipython-input-60-b216fd7bb28b>:7) ]]
 [[map/TensorArrayUnstack/strided_slice/_11]]
(1) Invalid argument:  Tried to expand dim index 1 for tensor with 0 dimensions.
 [[node ExpandDims_1 (defined at <ipython-input-60-b216fd7bb28b>:7) ]]
0 successful operations.
0 derived errors ignored. [Op:__inference_pruned_53304]

Function call stack:
pruned -> pruned

 

0 个答案:

没有答案