我正在尝试为我的二元分类问题训练一个模型。
我的数据有91列和5万行。其中一列是我的二进制目标变量,其他都是数字。以下是我尝试训练的方法;
model = Sequential()
model.add(Dense(20, input_dim=90, kernel_initializer='normal', activation='relu'))
model.add(Dense(20, kernel_initializer='normal', activation='relu'))
model.add(Dense(20, kernel_initializer='normal', activation='relu'))
model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train_scaled, y_train, epochs=20)
经过快速训练后,我尝试用我的测试集进行预测,发现所有的预测都是NaN
+ model.predict(x_test_scaled)
- array([[nan],
[nan],
[nan],
...,
[nan],
[nan],
[nan]], dtype=float32)
顺便说一下,我在训练中也没有看到loss score。还写着NaN
这通常是因为数据集中的NaNs/infinity
。您应该考虑在预处理过程中删除这些行。
如果所有的值都是有限的,下面的代码将返回True
。
df = df[np.isfinite(df).all(1)]
如果它返回False
,你可能需要删除NaN/infinity
# Replacing infinite with nan
df.replace([np.inf, -np.inf], np.nan, inplace=True)
# Dropping all the rows with nan values
df.dropna(inplace=True)
# Printing df
df
有时将优化器更改为RMSprop
可以解决问题