为了账号安全,请及时绑定邮箱和手机立即绑定

Keras 模型损失函数返回 nan

Keras 模型损失函数返回 nan

慕尼黑的夜晚无繁华 2022-09-06 19:44:34
我正在keras中训练一个自动编码器,其定义如下:model = Sequential()model.add(LSTM(100, activation='relu', input_shape=(430, 3)))model.add(RepeatVector(430))model.add(LSTM(100, activation='relu', return_sequences=True))model.add(TimeDistributed(Dense(3)))model.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy'])print(model.summary())context_paths = loadFile()X_train, X_test = train_test_split(context_paths, test_size=0.20)print('Fitting model.')history = model.fit(X_train, X_train, epochs=1, batch_size=8, verbose=1, shuffle=True, validation_data=(X_test, X_test))predict_sample = X_train[0].reshape((1, 430, 3))predict_output = model.predict(predict_sample, verbose=0)print(predict_output[0, :, 0])这段代码没有给出任何错误,但是当我运行它时,损失是nan。我已经检查了有关SO的一些问题,发现在以下情况下会出现此问题:nan或无限值存在 -->我检查了我的输入数据,哪个返回,所以我也做了哪个返回,所以我假设我的数据是正确的numpy.isnan(myarray).any()Falsenumpy.isfinite(myarray).any()True批量太大-->我从32个减少到8个,没有多大帮助层大小太大-->我从100减少到24,没有多大帮助以下是前几批的图片:在这里,损失是巨大的,但我不确定是什么原因造成的。我的数据集中的数字范围已达到 int32 的极限。此外,我的数据也用0填充。
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

您显然拥有庞大的范围数据。你正在溢出万物,正如你自己在你的范围内观察到的那样:


我的数据集中的数字范围已达到 int32 的极限


在模型中使用数据之前对其进行规范化。


对无限值的正确验证应为:


numpy.isfinite(myarray).all()

您可以尝试对 0 到 1 的范围进行转换(需要先转换为浮点型):


xMax = x_train.max()

xMin = x_train.min()

xRange = xMax - xMin


x_train = (x_train - xMin) / xRange

x_test = (x_test - xMin) / xRange

对 y 执行相同的操作。


您也可以尝试 Z 变换:


xMean = x_train.mean()

xStd = x_train.std()


x_train = (x_train - xMean) / xStd

x_test = (x_test - xMean) / xStd


查看完整回答
反对 回复 2022-09-06
  • 1 回答
  • 0 关注
  • 62 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信