你好?谢谢您阅读我的问题。
我正在尝试在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