具有RMSE/RMSLE损失函数的训练模型

2024-04-26 13:01:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道已经有很多人问过类似的问题,我试过那里提到的一切,如果它适用于我的情况,但没有任何帮助。回归训练模型如下:

from keras.models import Sequential
from keras.layers.core import Dense , Dropout
from keras import backend as K

model = Sequential()
model.add(Dense(units = 128, kernel_initializer = "uniform", activation = "relu", input_dim = 28))
model.add(Dropout(rate = 0.2))
model.add(Dense(units = 128, kernel_initializer = "uniform", activation = "relu"))
model.add(Dropout(rate = 0.2))
model.add(Dense(units = 1, kernel_initializer = "uniform", activation = "relu"))
model.compile(optimizer = "rmsprop", loss = root_mean_squared_logarithmic_error)

model.fit(train_set, labels, batch_size = 32, epochs = 30)

根据下面定义的损失函数,这将导致:

^{pr2}$

如果我使用标准的mean_squared_error丢失函数loss = nan就不会发生。如果使用以下两个自定义loss functions中的任何一个(当然,这是我正在尝试运行的)loss = nan在某个时刻发生。在

def root_mean_squared_error(y_true, y_pred):
        return K.sqrt(K.mean(K.square(y_pred - y_true), axis=-1))

def root_mean_squared_logarithmic_error(y_true, y_pred):
    y_pred_log = K.log(K.clip(y_pred, K.epsilon(), None) + 1.)
    y_true_log = K.log(K.clip(y_true, K.epsilon(), None) + 1.)
    return K.sqrt(K.mean(K.square(y_pred_log - y_true_log), axis = -1))

root_mean_squared_logarithmic_error损失函数进行10倍交叉验证loss = nan经常出现在中间,有些褶皱只出现在最后一个纪元(总共发生了5次)。在一倍的时间里,损失集中到15.6132,并在所有剩余的时代保持在那里。完成4次折叠,没有发生loss = nan。在

nans和离群值更正输入数据。我尝试了几种不同的缩放方法,但都没有对问题产生影响

from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import Normalizer

我还改变了输入数据(用数据的子集进行测试),在这种情况下,loss = nan出现在每个子集(甚至每两列组合中)。我还改变了neuronsdropoutoptimizer(改为'adam')和{}。在

谢谢你的建议,我很感激你的帮助!在


Tags: fromimportlogaddtruemodelerrorroot
1条回答
网友
1楼 · 发布于 2024-04-26 13:01:09

在loss函数中添加abs()可以帮助我解决这个问题。在

def root_mean_squared_error(y_true, y_pred):
        return np.abs(K.sqrt(K.mean(K.square(y_pred - y_true), axis=-1)))

相关问题 更多 >