Keras 模型预测 NaN

Sam*_*kel 3 python keras tensorflow

我正在尝试为我的二元分类问题训练一个模型。

我的数据有 91 列和 50,000 行。其中一列是我的二进制目标变量,所有其他列也是数字。这是我尝试训练的方式;

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)
Run Code Online (Sandbox Code Playgroud)

经过快速训练后,我尝试用我的测试集进行预测,发现所有预测都是NaN

+ model.predict(x_test_scaled)

- array([[nan],
       [nan],
       [nan],
       ...,
       [nan],
       [nan],
       [nan]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我在训练过程中也没有看到损失分数。还写了NaN

Vid*_*esh 5

这通常是因为NaNs/infinity您的数据集中发生的。您应该考虑在预处理期间删除此类行。

True如果所有值都是有限的,下面的代码将返回。

df = df[np.isfinite(df).all(1)]
Run Code Online (Sandbox Code Playgroud)

如果它返回,False你可能不得不放弃 NaN/无穷大

# 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
Run Code Online (Sandbox Code Playgroud)

有时更改优化器来RMSprop解决问题