训练完成的Keras分类神经网络预测输出NaN问题求助
多标签分类模型训练正常但预测输出NaN的问题
我正在使用形状为(4458, 172)的数据集训练多标签分类模型,前2列表示样本是否属于两个类别(单样本可属于其中一个、两个或都不属于),模型需输出样本属于这两个类别的概率。
我的代码
dataset.shape # (4458, 172) X = dataset[:, 2:] X.shape # (4458, 170) Y = dataset[:,0:2] Y.shape # (4458, 2) scaler = MinMaxScaler().fit(X) X_scale = scaler.transform(X) X_scale X_train, X_val_and_test, Y_train, Y_val_and_test = train_test_split(X_scale, Y, test_size = 0.4) X_val, X_test, Y_val, Y_test = train_test_split(X_val_and_test, Y_val_and_test, test_size = 0.5) model = Sequential([ Dense(170, activation = 'relu', input_shape = (170,)), Dense(85, activation = 'relu'), Dense(48, activation = 'relu'), Dense(16, activation = 'relu'), Dense(8, activation = 'relu'), Dense(2, activation = 'sigmoid'), ]) model.compile(optimizer='RMSprop', loss='binary_crossentropy', metrics=['accuracy']) hist = model.fit(X_train, Y_train, batch_size=170, epochs=200, validation_data=(X_val, Y_val)) model.evaluate(X_test, Y_test) X[0:1].shape # (1, 170) prediction = model.predict(X[0:1]) prediction
模型训练最后几轮输出
Epoch 190/200 2674/2674 [==============================] - 0s 18us/step - loss: 0.0929 - accuracy: 0.9632 - val_loss: 0.1616 - val_accuracy: 0.9451 Epoch 191/200 2674/2674 [==============================] - 0s 18us/step - loss: 0.0848 - accuracy: 0.9671 - val_loss: 0.1917 - val_accuracy: 0.9333 Epoch 192/200 2674/2674 [==============================] - 0s 16us/step - loss: 0.0964 - accuracy: 0.9576 - val_loss: 0.1510 - val_accuracy: 0.9428 Epoch 193/200 2674/2674 [==============================] - 0s 18us/step - loss: 0.0959 - accuracy: 0.9662 - val_loss: 0.1576 - val_accuracy: 0.9400 Epoch 194/200 2674/2674 [==============================] - 0s 16us/step - loss: 0.0907 - accuracy: 0.9648 - val_loss: 0.1787 - val_accuracy: 0.9395 Epoch 195/200 2674/2674 [==============================] - 0s 16us/step - loss: 0.0812 - accuracy: 0.9680 - val_loss: 0.1503 - val_accuracy: 0.9479 Epoch 196/200 2674/2674 [==============================] - 0s 23us/step - loss: 0.0866 - accuracy: 0.9637 - val_loss: 0.1554 - val_accuracy: 0.9428 Epoch 197/200 2674/2674 [==============================] - 0s 17us/step - loss: 0.0939 - accuracy: 0.9605 - val_loss: 0.1512 - val_accuracy: 0.9445 Epoch 198/200 2674/2674 [==============================] - 0s 18us/step - loss: 0.0862 - accuracy: 0.9639 - val_loss: 0.1544 - val_accuracy: 0.9451 Epoch 199/200 2674/2674 [==============================] - 0s 18us/step - loss: 0.0849 - accuracy: 0.9673 - val_loss: 0.1601 - val_accuracy: 0.9428 Epoch 200/200 2674/2674 [==============================] - 0s 17us/step - loss: 0.0881 - accuracy: 0.9647 - val_loss: 0.1578 - val_accuracy: 0.9417
问题现象与排查情况
模型训练过程中各轮次的loss和accuracy数据合理,测试集评估精度也较高,但用单行原始X数据预测时,输出结果为[[nan, nan]],而非预期的概率值。
已尝试的排查与解决方案:
- 更换optimizer,无效
- 排查数据集,确认无NaN和Inf值
希望能找出问题所在。
内容的提问来源于stack exchange,提问作者Rustigator
相关产品推荐
相关产品推荐

