gpt4 book ai didi

machine-learning - 损失计算中的Keras组件选择

转载 作者:行者123 更新时间:2023-11-30 08:46:30 25 4
gpt4 key购买 nike

我有这个简单的模型(5 个 channel ),我希望它返回第二个

import keras
import numpy as np
import keras.backend as K

data = np.random.normal(size = (1000, 5))

model = keras.models.Sequential()
model.add(keras.layers.Dense(10, activation = 'linear',input_shape = (5,)))
model.add(keras.layers.Dense(1, activation = 'linear'))

def loss(x, y):
return K.mean(K.square(x - y))

model.compile('adam', loss)
model.fit(data, data[:, 1], epochs = 100)

效果很好,我得到了完美的零损失。

当我稍微调整一下(我在输出中添加一个额外的 channel )时,我决定不关心第二个 channel 。

我把它改成这样:

import keras
import numpy as np
import keras.backend as K

data = np.random.normal(size = (1000, 5))

model = keras.models.Sequential()
model.add(keras.layers.Dense(10, activation = 'linear',input_shape = (5,)))
model.add(keras.layers.Dense(2, activation = 'linear'))

def loss(x, y):
return K.mean(K.square(x - y[:, 0]))

model.compile('adam', loss)
model.fit(data, data[:, 1], epochs = 100)

现在不可能训练了。我觉得这很疯狂。有谁知道发生了什么事吗?

PS:这个示例可能看起来很愚蠢,但对于更复杂的问题,我需要计算自定义损失,并将问题简化为这个简单的示例。

感谢您的帮助

最佳答案

经过几个小时的努力,我终于找到了解决方案(以及可能的解释)。

此示例中的问题(也是唯一的区别)是索引选择。尽管它似乎受 Tensorflow 支持。它的行为不正确。 (有问题的代码片段在 Theano 后端下失败)。尽管损失计算正确,但导数似乎是错误的。误导优化器。这就是神经网络不进行训练的原因。我发现的一个老套但完美工作的解决方案是替换

y[:, 0]

tensorflow.matmul(y, [[1.0], [0.0]])

我没有尝试,但如果您正在寻找多后端的东西,那么 keras.backend.dot 也应该没问题。请小心在权重中放入 float 而不是整数,否则它将无法进行类型检查。

希望对其他人有帮助。

关于machine-learning - 损失计算中的Keras组件选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43507944/

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