![](/img/trans.png)
[英]InvalidArgumentError: required broadcastable shapes at loc(unknown)
[英]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.