【发布时间】:2019-05-17 23:17:06
【问题描述】:
我使用 Keras 和 Tensorflow 的 LSTM 模型给出了loss: nan 值。
我尝试降低学习率,但仍然得到 nan 并降低整体准确度,并且还使用 np.any(np.isnan(x_train)) 检查我可能介绍自己的 nan 值(未找到 nan)。我还阅读了有关爆炸梯度的信息,但似乎找不到任何可以帮助解决我的具体问题的信息。
我想我知道问题可能出在哪里,但不太确定。这是我为构建x_train而实施的过程
例如:
a = [[1,0,..0], [0,1,..0], [0,0,..1]]
a.shape() # (3, 20)
b = [[0,0,..1], [0,1,..0], [1,0,..0], [0,1,..0]]
b.shape() # (4, 20)
为确保形状相同,我将向量 [0,0,..0](全为零)附加到 a,因此形状现在为 (4,20)。
a 和 b 被附加以给出 3D 数组形状 (2,4,20),这形成 x_train。但我认为附加 0 的空向量是出于某种原因在训练我的模型时给了我一个loss: nan。这是我可能出错的地方吗?
n.b. a+b 是一个 numpy 数组,而我的实际 x_train.shape 是 (1228, 1452, 20)
•编辑•model.summary() 添加在下面:
x_train shape: (1228, 1452, 20)
y_train shape: (1228, 1452, 8)
x_val shape: (223, 1452, 20)
x_val shape: (223, 1452, 8)
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
unified_lstm (UnifiedLSTM) (None, 1452, 128) 76288
_________________________________________________________________
batch_normalization_v2 (Batc (None, 1452, 128) 512
_________________________________________________________________
unified_lstm_1 (UnifiedLSTM) (None, 1452, 128) 131584
_________________________________________________________________
batch_normalization_v2_1 (Ba (None, 1452, 128) 512
_________________________________________________________________
dense (Dense) (None, 1452, 32) 4128
_________________________________________________________________
dense_1 (Dense) (None, 1452, 8) 264
=================================================================
Total params: 213,288
Trainable params: 212,776
Non-trainable params: 512
【问题讨论】:
-
这似乎是梯度爆炸的问题。您可以尝试在密集层之间添加一些 Dropout 层。另外,尝试使用 RMS prop 优化器。
标签: tensorflow machine-learning keras neural-network lstm