가 입력이 (y_true, y_pred)
의 둘 경우를 가정합니다 keras 모델에서 사용자 정의 손실 및 통계 함수를 만드는 :Keras : 메트릭 및 다른 입력과 손실
def custom_loss(y_true, y_pred):
.
return loss
def custom_metric(y_true, y_pred):
.
return metric
그리고 y_pred
의 입력은의 출력 Model
. 예 :
model = Model(inputs = [input1,..inputN], outputs=loss)
model.compile(loss=costum_loss, metrics=costum_metric)
위의 경우 손실 및 메트릭 모두에 대해 y_pred가 손실됩니다.
다른 입력을 costum_loss
에 입력하고 costum_metric
에서 다른 입력을 원하는 경우 어떻게해야합니까? 그것을 할 수있는 방법이 있습니까?
편집 :
def warp_loss(X):
z, positive_entity, negatives_entities = X
positiveSim = Lambda(lambda x: similarity(x[0], x[1]), output_shape=(1,), name="positive_sim")([z, positive_entity])
z_reshaped = Reshape((1, z.shape[1].value))(z)
negativeSim = Lambda(lambda x: similarity(x[0], x[1]), output_shape=(negatives_titles.shape[1].value, 1,), name="negative_sim")([z_reshaped, negatives_entities])
loss = Lambda(lambda x: max_margin_loss(x[0], x[1]), output_shape=(1,), name="max_margin")([positiveSim, negativeSim])
return loss
def mean_loss(y_true, y_pred):
return K.mean(y_pred - 0 * y_true)
및 메트릭 :
이더 speciffically 내 손실이 원하는
def metric(X):
z, positive_entity, negatives_entities = X
positiveSim = Lambda(lambda x: similarity(x[0], x[1]), output_shape=(1,), name="positive_sim")([z, positive_entity])
z_reshaped = Reshape((1, z.shape[1].value))(z)
negativeSim = Lambda(lambda x: similarity(x[0], x[1]), output_shape=(negatives_titles.shape[1].value, 1,), name="negative_sim")([z_reshaped, negatives_entities])
position = K.sum(K.cast(K.greater(positiveSim, negativeSim), dtype="int32"), axis=1, keepdims=True)
accuracy = Lambda(lambda x: x/_NUMBER_OF_NEGATIVE_EXAMPLES)(position)
return accuracy
def mean_acc(y_true, y_pred):
return K.mean(y_pred - 0 * y_true)
그래서 처음 4 행은 동일하고 이후입니다 두 가지 기능이 변경됩니다. Callback
을 사용하여 mean_acc
을 인쇄 할 수 있습니까?
사용자 정의 기능이 y_pred에 종속되지 않습니까? –
나는이 두 함수에서'y_pred'를 다르게하고 싶습니다. 이 경우 손실 출력은 실제로 예측이 아닙니다. 당신은 이미 언급 한이 질문에있는 손실을 https://stackoverflow.com/questions/46447882/weights-of-cnn-model-go-to-really-small-values-and-after-nan에서 확인할 수 있습니다. –
'custom_loss'와'custom_metrics'에 대한 입력으로 무엇을하고 싶습니까? –