gpt4 book ai didi

python - 最大化 keras 模型的 MSE

转载 作者:行者123 更新时间:2023-12-04 03:55:41 25 4
gpt4 key购买 nike

我有一个生成对抗网络,其中鉴别器通过 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 值中获利的生成器模型?

最佳答案

更新:

原版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 写道:

I have a generative adversarial networks, where the discriminator gets minimized with the MSE and the generator should get maximized. Because both are opponents who pursue the opposite goal.



来自 Ibragil 提供的链接:

Meanwhile, the generator is creating new, synthetic images that it passes to the discriminator. It does so in the hopes that they, too, will be deemed authentic, even though they are fake. The goal of the generator is to generate passable hand-written digits: to lie without being caught. The goal of the discriminator is to identify images coming from the generator as fake.



所以这是一个不适定的问题:

我们的最终目标是训练我们的两个对手 鉴别器 发电机尽可能表现得更好。这意味着,两个基础学习算法有不同的任务,但 损失函数 他们可以用它来获得最佳解决方案 是一样的binary_crossentropy ,所以模型的任务是尽量减少这种损失。

A 鉴别器 模型的编译方法:
self.discriminator.compile(loss='binary_crossentropy', optimizer=optimizer)

A 发电机模型的编译方法:
self.generator.compile(loss='binary_crossentropy', optimizer=optimizer)

这就像两个运行者的目标一样,即使他们是这项任务的竞争者,也要尽量缩短到达终点的时间。

所以“相反的目标”并不意味着相反的任务,即最小化损失(即最小化运行者示例中的时间)。

我希望它有帮助。

关于python - 最大化 keras 模型的 MSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59303939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com