我有一个生成对抗性网络,其中使用MSE将鉴别符最小化,并将生成器最大化。因为两者都是追求相反目标的对手。
generator = Sequential()
generator.add(Dense(units=50, activation='sigmoid', input_shape=(15,)))
generator.add(Dense(units=1, activation='sigmoid'))
generator.compile(loss='mse', optimizer='adam')
generator.train_on_batch(x_data, y_data)
要获得可从高MSE值中获利的发电机模型,我必须适应什么?
答案 0 :(得分:5)
这个问题对我来说不是很清楚。我想您想在使用MSE的标准时最大化而不是最小化。
您可以实现自己的自定义损失函数,该函数将计算-MSE;翻转损失的符号,从而实现梯度下降方向的翻转。
def negative_mse(y,yhat):
return - K.mean(K.sum(K.square(y-yhat)))
model.compile(loss=negative_mse, optimizer='adam')
另一种选择是简单地提供否定的学习步骤-但我不确定Keras是否允许您这样做。值得一试。
答案 1 :(得分:4)
更新:
原始的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:
最初,我写道,由于最优化方法的基本概念,首先想到的是简单地抵消损失的想法会不给出我们期望的结果(您可以阅读有趣的讨论here )。
在我仔细检查了两种方法在特定学习任务中的结果之后(注意:我没有进行全面测试),尽管-loss
方法收敛了一点,但两种方法都使损失最大化。快点。由于here中描述的可能问题,我不确定它是否总是提供最佳解决方案或任何解决方案。
如果有人有其他经验,请告诉我。
所以如果有人也想尝试-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 中,我们的最终目标是训练我们的两个对手方 discriminator 和 generator ,使其彼此之间表现得最好。这意味着,这两个基础学习算法具有不同的任务,但是损失函数(它们可以用来实现最优解决方案)是相同的,即binary_crossentropy
,因此模型的任务是最大程度地减少这种损失。
鉴别器模型的编译方法:
self.discriminator.compile(loss='binary_crossentropy', optimizer=optimizer)
生成器模型的编译方法:
self.generator.compile(loss='binary_crossentropy', optimizer=optimizer)
就像两个跑步者的目标一样,即使他们在这项任务中是竞争对手,也要尽可能减少达到终点的时间。
因此,“相反的目标”并不意味着相反的任务,即最大程度地减少损失(即,使跑步者示例中的时间最小化)。
希望对您有帮助。