1 回答

TA貢獻1777條經驗 獲得超3個贊
None意味著它接受可變大小。
因此,您的自定義損失可以非常靈活。
實際大小自然是傳遞給 的數據批的大小。
如果您的數據具有形狀,則無需擔心。fit(samples, 128,256,3)
但是你的代碼中有很多不必要的東西,你可以:
def keras_customized_loss(lambda1 = 1.0, lambda2 = 0.05):
def grad_x(image):
return K.abs(image[:, 1:] - image[:, :-1])
def grad_y(image):
return K.abs(image[:, :, 1:] - image[:, :, :-1])
def compute_loss(y_true, y_pred):
pred_grad_x = grad_x(y_pred)
pred_grad_y = grad_y(y_pred)
true_grad_x = grad_x(y_true)
true_grad_y = grad_y(y_true)
loss1 = K.mean(K.square(y_pred-y_true))
loss2 = K.mean(K.square(pred_grad_x-true_grad_x))
loss3 = K.mean(K.square(pred_grad_y-true_grad_y))
return (lambda1*loss1+lambda2*loss2+lambda2*loss3)
return compute_loss
添加回答
舉報