簡體   English   中英

keras model with tf.contrib.losses.metric_learning.triplet_semihard_loss斷言錯誤

[英]keras model with tf.contrib.losses.metric_learning.triplet_semihard_loss Assertion error

我正在使用帶有anaconda的python 3,並嘗試使用帶有Keras模型的tf.contrib損失函數。

代碼如下

from keras.layers import Dense, Flatten
from keras.optimizers import Adam
from keras.models import Sequential
from tensorflow.contrib.losses import metric_learning
model = Sequential()
model.add(Flatten(input_shape=input_shape))
model.add(Dense(50,  activation="relu"))
model.compile(loss=metric_learning.triplet_semihard_loss, optimizer=Adam())

我收到以下錯誤:

文件“/home/user/.local/lib/python3.6/site-packages/keras/engine/training_utils.py”,第404行,加權score_array = fn(y_true,y_pred)文件“/ home / user / anaconda3 /envs/siamese/lib/python3.6/site-packages/tensorflow/contrib/losses/python/metric_learning/metric_loss_ops.py“,第179行,在triplet_semihard_loss斷言lshape.shape == 1 AssertionError

當我使用具有keras損失功能的相同網絡時它工作正常,我試圖將tf loss函數包裝在一個像這樣的函數中

def func(y_true, y_pred): 
    import tensorflow as tf
    return tf.contrib.losses.metric_learning.triplet_semihard_loss(y_true, y_pred) 

仍然得到同樣的錯誤

我在這做錯了什么?

更新:更改func時返回以下內容

return K.categorical_crossentropy(y_true, y_pred)

一切正常! 但是我無法使用特定的tf損失函數...

當我進入tf.contrib.losses.metric_learning.triplet_semihard_loss並刪除這行代碼時: assert lshape.shape == 1它運行正常

謝謝

問題是您將錯誤的輸入傳遞給損失函數。

根據triplet_semihard_loss docstring,您需要傳遞labelsembeddings

所以你的代碼必須是:

def func(y, embeddings): 
    return tf.contrib.losses.metric_learning.triplet_semihard_loss(labels=y, embeddings=embeddings) 

還有兩個關於嵌入網絡的注釋:

  1. 最后的密集層必須沒有激活

  2. 不要忘記規范化輸出矢量model.add(Lambda(lambda x: K.l2_normalize(x, axis=1)))

看來您的問題來自丟失函數中的錯誤輸入。 事實上,三重態損失需要參數:

Args:
labels: 1-D tf.int32 `Tensor` with shape [batch_size] of
  multiclass integer labels.
embeddings: 2-D float `Tensor` of embedding vectors. Embeddings should
  be l2 normalized.

你確定y_true有正確的形狀嗎? 您能否提供有關您正在使用的張量的更多詳細信息?

暫無
暫無

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

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