簡體   English   中英

Keras 功能 API 和 TensorFlow 集線器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM