GÜNCELLEME:
Orijinal MSE uygulaması aşağıdaki gibi görünür:
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)
Bence doğru maksimizer kaybı fonksiyonu:
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)
Bu şekilde, MSE fonksiyonunda olduğu gibi, ancak ters etki ile her zaman pozitif bir kayıp değeri elde ederiz.
GÜNCELLEME 2:
Başlangıçta ben sezgisel ilk düşünce yalnızca kaybı olacaktır boşa olduğunu yazdı DEĞİL (ilginç bir tartışma okuyabilir biz çünkü optimize yöntemleri baz kavramının beklediğim sonuç vermek burada ). Her iki yöntemi de belirli bir öğrenme görevinde başa iki kez kontrol ettikten sonra (Not: Bir all-out testi yapmadım), her iki yöntemin de -loss
yaklaşım biraz daha hızlı bir şekilde birleşmesine rağmen, her iki yöntemin de kayıp maksimizasyonu vermesiydi . Burada açıklanan olası sorun nedeniyle her zaman en iyi çözümü mü yoksa herhangi bir çözümü mü sağladığından emin değilim . Birinin başka deneyimi varsa, lütfen bana bildirin.
Birisi -loss
de denemek isterse :
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)
Ek detaylar:
OP şunu yazdı:
Ayırıcı MSE ile küçültüldüğü ve jeneratörün maksimize edilmesi gereken üretken bir rakip ağım var. Çünkü her ikisi de karşı hedefi takip eden rakiplerdir.
Ibragil tarafından sağlanan bağlantıdan:
Bu arada jeneratör, ayırıcıya aktardığı yeni, sentetik görüntüler yaratıyor. Sahte olmalarına rağmen, onların da orijinal kabul edileceği ümidiyle bunu yapar. Jeneratörün amacı elle yazılmış rakamlar üretilebilir: yakalanmadan yalan söylemek. Ayrımcının amacı jeneratörden gelen görüntüleri sahte olarak tanımlamaktır.
Yani bu kötü bir sorun:
In GAN'ın bizim nihai hedefimiz iki karşıt tarafları yetiştirmek ayırt edici ve jeneratör birbirlerine karşı olabildiğince iyi olarak yerine getirmektir. İki taban öğrenme algorythm farklı görevler ancak sahip oldukları anlamına gelir kaybı fonksiyonunu onlar optimal çözüm elde edebilirsiniz hangi ile aynıdır yani binary_crossentropy
modellerin görevleri bu kayıp en aza indirmek için bu yüzden.
Bir ayrımcı modelin derleme yöntemi:
self.discriminator.compile(loss='binary_crossentropy', optimizer=optimizer)
Bir jeneratör modelinin derleme yöntemi:
self.generator.compile(loss='binary_crossentropy', optimizer=optimizer)
İki koşucunun hedefi, bu görevde rakip olmalarına rağmen bitişe ulaşma zamanlarını en aza indirgemekle aynıdır.
Yani "karşıt hedef" karşıt görev anlamına gelmez yani kaybı en aza indirmek (yani koşucu örneğinde zamanı en aza indirmek).
Umut ediyorum bu yardım eder.