최신 정보:
원래 MSE 구현은 다음과 같습니다.
def mean_squared_error(y_true, y_pred):
if not K.is_tensor(y_pred):
y_pred = K.constant(y_pred)
y_true = K.cast(y_true, y_pred.dtype)
return K.mean(K.square(y_pred - y_true), axis=-1)
올바른 최대 손실 기능을 생각합니다.
def mean_squared_error_max(y_true, y_pred):
if not K.is_tensor(y_pred):
y_pred = K.constant(y_pred)
y_true = K.cast(y_true, y_pred.dtype)
return K.mean(K.square(1 / (y_pred - y_true)), axis=-1)
이런 식으로 MSE 함수의 경우와 같이 항상 양의 손실 값을 얻지 만 역효과를 갖습니다.
업데이트 2 :
처음에 나는에 대한 직관적 인 첫번째 생각은 단순히 손실됩니다 부정 것을 썼다 NOT (당신이 흥미있는 토론을 읽을 수있는 우리 때문에 최적화 방법의 기본 개념의 기대했던 결과를 제공 여기에 ). 두 방법 모두를 두 번 확인한 후 특정 학습 작업의 결과 (참고 : 전체 테스트를 수행하지는 않음)는 두 방법 모두 손실 최대화를 제공했지만 -loss
접근 방식이 조금 더 빨리 수렴 되었다는 것이 었습니다 . 여기에 설명 된 가능한 문제로 인해 항상 최상의 솔루션 또는 솔루션을 제공하는지 잘 모르겠습니다 . 다른 경험이 있으면 알려주세요.
누군가 누군가 -loss
도 시도하고 싶다면 :
def mean_squared_error(y_true, y_pred):
if not K.is_tensor(y_pred):
y_pred = K.constant(y_pred)
y_true = K.cast(y_true, y_pred.dtype)
return - K.mean(K.square(y_pred - y_true), axis=-1)
추가 세부 사항:
OP는 다음과 같이 썼다.
나는 MSE로 차별자가 최소화되고 발전기가 최대화되어야하는 생성적인 적대적 네트워크를 가지고 있습니다. 둘 다 반대 목표를 추구하는 상대이기 때문입니다.
Ibragil이 제공 한 링크에서 :
한편, 발전기는 판별기에 전달되는 새로운 합성 이미지를 생성하고 있습니다. 그들이 가짜 임에도 불구하고 그들이 진실한 것으로 간주되기를 희망한다. 생성기의 목표는 손으로 쓸 수있는 숫자를 생성하는 것입니다. 판별 자의 목표는 생성기에서 나오는 이미지를 가짜로 식별하는 것입니다.
따라서 이것은 잘못된 문제입니다.
GAN 에서는 두 상대방에게 차별 자 와 발전기 가 서로에 대해 가능한 한 우수한 성능을 발휘 하도록 훈련시키는 최종 목표 입니다. 그것은 두 개의 기본 학습 algorythm가 다른 작업 만 가지고, 의미 손실 기능 들이 최적의 솔루션을 달성 할 수있는 동일 즉, binary_crossentropy
모델의 작업이 손실 최소화 할 수있는 정도.
판별 모델은 컴파일 방법입니다 :
self.discriminator.compile(loss='binary_crossentropy', optimizer=optimizer)
발전기 모델은 컴파일 방법입니다 :
self.generator.compile(loss='binary_crossentropy', optimizer=optimizer)
마무리에 도달하는 시간을 최소화하여이 작업에서 경쟁자가되는 것은 두 러너의 목표와 같습니다.
따라서 "반대 목표"는 반대 작업, 즉 손실을 최소화하는 것 (즉, 러너 예제에서 시간을 최소화하는 것)을 의미하지 않습니다.
도움이 되길 바랍니다.