簡體   English   中英

InvalidArgumentError:需要可廣播的形狀 [Op:Add] tensorflow model

[英]InvalidArgumentError: required broadcastable shapes [Op:Add] tensorflow model

我是使用 CLIP model 的人。 我有兩個模型。 一個 model output 是(20, 128, 256) ,另一個 output 是(20, 256)

image_model_output = (20, 256)
text_model_output = (20, 128, 256)

我使用以下來計算這個

logits = (tf.matmul(caption_embeddings, image_embeddings, transpose_b=True))
so it will be like `(20, 256) * (256, 128, 20)`
it's ouput will be `(20, 128, 20)`

同樣我這樣計算

images_similarity = tf.matmul(
        image_embeddings, image_embeddings, transpose_b=True
    )
(Output)--> (20, 256) * (256, 20) = (20,20) 

和這個

captions_similarity = tf.matmul(
        caption_embeddings, caption_embeddings, transpose_b=True
    )
(Output)--> (20, 128, 256) * (256, 128, 20) = (20, 128, 128) 

問題就出現在這里

targets = keras.activations.softmax(
        (captions_similarity + images_similarity) / (2 * self.temperature)
    )

那么我是否需要更改激活 function 或者有什么方法可以添加這些具有不同形狀的 3d 矩陣? 很抱歉在技術上這樣解釋,但是有扎實的深度學習和機器學習背景的人會理解的。

注意:像這樣tf.expand_dims(image_embeddings, axis=1)添加axis 1后,以下部分成功運行

targets = keras.activations.softmax(
    (captions_similarity + images_similarity) / (2 * self.temperature)
)

然而,在此之后有一個如下所示的損失函數

captions_loss = keras.losses.categorical_crossentropy(
        y_true=targets, y_pred=logits, from_logits=True
    )

產生此錯誤

ValueError: Shapes (2, 128, 128) and (2, 128, 1) are incompatible

有可能解決這個錯誤嗎?

為了處理上述錯誤,我使用了不同的損失函數。 我更改了如下代碼。

captions_loss = keras.losses.categorical_crossentropy(
    y_true=targets, y_pred=logits, from_logits=True
)

captions_loss = keras.losses.kl_divergence(
    y_true=targets, y_pred=logits
)

為了節省開發人員的時間,我已經回答了我自己的問題。 如果有人感興趣,我可以進一步討論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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