【问题标题】:loss NAN when use keras training ANN classification使用keras训练ANN分类时损失NAN
【发布时间】:2019-02-26 19:35:58
【问题描述】:

我有一些数据,想要分类。

<class 'pandas.core.frame.DataFrame'>
Int64Index: 2474 entries, 0 to 5961
Data columns (total 4 columns):
Age                             2474 non-null int64
Pre_Hospitalization_Disposal    2474 non-null object
Injury_to_hospital_time         2474 non-null float64
Discharge_results               2474 non-null int64
dtypes: float64(1), int64(2), object(1)
memory usage: 96.6+ KB

年龄、Pre_Hospitalization_Disposal、Injury_to_hospital_time 是特征数据。

Discharge_results 想要预测。

我已检查我的数据不为空。

print(len(DataSet.index[(pd.isnull(DataSet['Age'])) | 
(pd.isnull(DataSet['Pre_Hospitalization_Disposal'])) | 
(pd.isnull(DataSet['Injury_to_hospital_time'])) | 
(pd.isnull(DataSet['Discharge_results']))]))

我的代码:

(train, test) = train_test_split(DataSet, test_size=0.2, random_state=42)
trainY = train["Discharge_results"].astype('float')
testY = test["Discharge_results"].astype('float')

cs = MinMaxScaler()
trainContinuous = cs.fit_transform(train[['Age','Injury_to_hospital_time']])
testContinuous = cs.transform(test[['Age','Injury_to_hospital_time']])

zipBinarizer = LabelBinarizer().fit(DataSet["Pre_Hospitalization_Disposal"])
trainCategorical = zipBinarizer.transform(train["Pre_Hospitalization_Disposal"])
testCategorical = zipBinarizer.transform(test["Pre_Hospitalization_Disposal"])

trainX = np.hstack([trainCategorical, trainContinuous])
testX = np.hstack([testCategorical, testContinuous])

model = Sequential()
model.add(Dense(16, input_dim=trainX.shape[1] ,activation="relu"))
model.add(Dense(8, activation="relu"))
model.add(Dense(1, activation="softmax"))
model.compile(loss="sparse_categorical_crossentropy", optimizer='Adam')

history = model.fit(trainX, trainY, validation_data=(testX, testY),epochs=200, batch_size=32)

但我在训练时得到loss NAN。

结果:

Train on 1979 samples, validate on 495 samples
Epoch 1/10
1979/1979 [==============================] - 2s 1ms/step - loss: nan - val_loss: nan
Epoch 2/10
1979/1979 [==============================] - 0s 165us/step - loss: nan - val_loss: nan
Epoch 3/10
1979/1979 [==============================] - 0s 139us/step - loss: nan - val_loss: nan
Epoch 4/10
1979/1979 [==============================] - 0s 137us/step - loss: nan - val_loss: nan
Epoch 5/10
1979/1979 [==============================] - 0s 137us/step - loss: nan - val_loss: nan
Epoch 6/10
1979/1979 [==============================] - 0s 141us/step - loss: nan - val_loss: nan
Epoch 7/10
1979/1979 [==============================] - 0s 138us/step - loss: nan - val_loss: nan
Epoch 8/10
1979/1979 [==============================] - 0s 141us/step - loss: nan - val_loss: nan
Epoch 9/10
1979/1979 [==============================] - 0s 140us/step - loss: nan - val_loss: nan
Epoch 10/10
1979/1979 [==============================] - 0s 144us/step - loss: nan - val_loss: nan

有人可以帮助我吗?非常感谢!!

【问题讨论】:

    标签: keras neural-network deep-learning


    【解决方案1】:

    您的标签和训练损失之间似乎存在不匹配。损失sparse_categorical_crossentropy 用于具有多个类别的分类模型。如果您想使用这种损失,您的标签应该是整数(正确类别的索引),但我在您的代码中看到您的标签是浮点数:

    trainY = train["Discharge_results"].astype('float')
    

    此外,模型的最后一个 Dense 层应该有 n_classes 隐藏单元,而不是只有 1 个。

    如果你的标签真的是浮动的,你可能正在处理回归问题,应该使用不同的损失函数(例如mean_squared_error)。

    【讨论】:

      猜你喜欢
      • 2022-10-12
      • 2021-06-14
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 2016-09-10
      • 1970-01-01
      相关资源
      最近更新 更多