>source

내 모델에 대한 사용자 지정 손실 함수를 정의했습니다.

def get_loss(y_hat, y):
loss = tf.keras.losses.BinaryCrossentropy(y_hat,y)  # cross entropy (but no logits)
y_hat = tf.math.sigmoid(y_hat)
tp = tf.math.reduce_sum(tf.multiply(y_hat, y),[1,2])
fn = tf.math.reduce_sum((y - tf.multiply(y_hat, y)),[1,2])
fp = tf.math.reduce_sum((y_hat -tf.multiply(y_hat,y)),[1,2])
loss = loss - ((2 * tp) / tf.math.reduce_sum((2 * tp + fp + fn + 1e-10)))  # fscore
return loss

모델을 훈련 데이터에 맞출 때 다음과 같은 오류가 발생합니다.

TypeError: Expected float32, got <tensorflow.python.keras.losses.BinaryCrossentropy object at 0x7feca46d0d30> of type 'BinaryCrossentropy' instead.

이 문제를 어떻게 해결할 수 있습니까?나는 이미 사용하려고 시도했습니다.

loss=tf.int32(tf.keras.losses.BinaryCrossentropy(y_hat,y)

그러나 이것은 또 다른 오류를 내뿜으며 내가 필요한 해결책이 아닌 것 같습니다.

  • 답변 # 1

    입력을 인수로 전달하는 대신 인스턴스화 된 객체를 호출해야합니다. 이와 같이 :

    loss = tf.keras.losses.BinaryCrossentropy()(y_hat,y)
    
    

    여분의 괄호 세트를 확인하십시오. 또는 다음과 같이하십시오.

    loss = tf.keras.losses.binary_crossentropy(y_hat, y)
    
    

관련 자료

  • 이전 python - dic 목록에서 하위 목록 제거
  • 다음 javascript - CSS 너비 속성을 수학 표현식의 결과와 동일하게 만드는 방법