[英]Keras functional API and TensorFlow Hub
我正在尝试以功能方式使用来自 TF Hub 的通用句子编码器作为 keras 层。 我想将hub.KerasLayer
与 Keras 功能 API 一起使用,但我不确定如何实现这一点,到目前为止,我只看到了 hub.KerasLayer 与序列 ZDB974238714CA8ACE14D604 的示例
import tensorflow_hub as hub
import tensorflow as tf
from tensorflow.keras import layers
import tf_sentencepiece
use_url = 'https://tfhub.dev/google/universal-sentence-encoder-multilingual-large/1'
english_sentences = ["dog", "Puppies are nice.", "I enjoy taking long walks along the beach with my dog."]
english_sentences = np.array(english_sentences, dtype=object)[:, np.newaxis]
seq = layers.Input(shape=(None, ), name='sentence', dtype=tf.string)
module = hub.KerasLayer(hub.Module(use_url))(seq)
model = tf.keras.models.Model(inputs=[seq], outputs=[module])
model.summary()
x = model.predict(english_sentences)
print(x)
将输入层传递给嵌入时,上面的代码遇到此错误: TypeError: Can't convert 'inputs': Shape TensorShape([Dimension(None), Dimension(None)]) is incompatible with TensorShape([Dimension(None)])
是否可以在 TensorFlow 1.x 中将 hub.KerasLayer 与 keras 功能 API 一起使用? 如果可以,怎么做?
如果您使用与 tf 1.15 相同的通用句子编码器的v3 ,您可以通过替换行来做这样的事情
import tf_sentencepiece
use_url = 'https://tfhub.dev/google/universal-sentence-encoder-multilingual-large/1'
module = hub.KerasLayer(hub.Module(use_url))(seq)
至
import tensorflow_text
use_url = 'https://tfhub.dev/google/universal-sentence-encoder-multilingual-large/3'
module = hub.KerasLayer(use_url)(seq)
第一个形状是您传递给 model, Shape TensorShape([Dimension(None), Dimension(None)])
的形状。 第二种形状是您所期望的, TensorShape([Dimension(None)])
。 所以在这个错误中,它告诉你它期待一个()的形状......
或者
如果您希望做批量文本,也许做TimeDistributed层,像这样......
module = tf.keras.layers.TimeDistributed(hub.KerasLayer(hub.Module(use_url)))(seq)
但是,您可能被迫为文本长度执行特定大小...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.