首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Keras自定义损失(chi2)线性回归

Keras自定义损失(chi2)线性回归
EN

Stack Overflow用户
提问于 2017-05-15 18:45:05
回答 1查看 762关注 0票数 1

我试图使用自定义损失函数在Keras中实现一个简单的线性回归。假设错误为函数值的1%,我正在计算chi2。我将1%高斯噪声加到线性模型中。当我使用均方误差损失函数('mse')时,我可以添加custom_loss()函数作为度量,并且我看到它收敛到非常接近1 (chi2/ndf)。如果我直接使用custom_loss()作为损失函数,如下面的片段所示,神经元的重量根本不会移动。

我做错了什么?

代码语言:javascript
运行
复制
from keras.models import Sequential
from keras.layers import Dense
from keras import optimizers
from keras import backend as K
import numpy as np

def custom_loss(y_true, y_pred):
    return K.mean(K.square(y_pred-y_true)/K.clip(K.square(0.01*y_pred), K.epsilon(), None), axis=-1)

def build_model():
    model = Sequential()
    model.add(Dense(1, input_dim=1, activation='linear'))

    sgd = optimizers.SGD(lr=0.01, momentum=0.01, nesterov=False)
    model.compile(optimizer=sgd, loss=custom_loss, metrics=['mape', 'mse', custom_loss])
    return model

if __name__ == '__main__':

    model = build_model()

    x_train = np.linspace(0.0, 1.0, 500)
    y_train = np.array(map(lambda x: x + 0.01*x*np.random.randn(1), x_train))

    model.fit(x_train, y_train, shuffle=True, epochs=1000, batch_size=10)
EN

回答 1

Stack Overflow用户

发布于 2017-05-15 19:15:21

我不确定您试图用这个损失计算什么,但是当我在-1、1和y_pred中绘制y_true=0.5时,我看到了这样的情况:

海关损失

很明显,它得到了2个极小值,一个在0附近非常陡峭的坡度(当y_pred=0时没有定义),而其他地方的坡度很低。请注意,对于网络来说,在这里很容易走错丢失函数的“手臂”。

将此损失与平方错误进行比较:

MSE

我会重温你的损失函数:你想让网络在这里学到什么?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43986699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档