我知道已经有很多人问过类似的问题,我试过那里提到的一切,如果它适用于我的情况,但没有任何帮助。回归训练模型如下:
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
出现在每个子集(甚至每两列组合中)。我还改变了neurons
、dropout
、optimizer
(改为'adam'
)和{
谢谢你的建议,我很感激你的帮助!在
在loss函数中添加abs()可以帮助我解决这个问题。在
相关问题 更多 >
编程相关推荐