当我使用Keras API运行基本的神经网络时,验证准确性正在提高,但是准确性,损失和 val_loss 主要是 nan
运行环境和其他信息
import tensorflow as tf
from tensorflow import *
from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras.utils import to_categorical
### data
tnc_data = pd.read_csv('https://www.dropbox.com/s/3mqdgfkz7fjtlf8/titanic_all_numeric.csv?dl=1')
### data prep
X = tnc_data.drop( 'survived', axis= 1 ).to_numpy()
X = np.asarray(X).astype(np.float32)
Y = to_categorical( tnc_data['survived'] )
tf.keras.backend.clear_session()
e_stop_monitor = EarlyStopping(patience= 10)
### model
model1 = keras.Sequential()
model1.add( keras.layers.Dense( units= 10, activation= 'relu', input_shape= (X.shape[1],) ) )
model1.add( keras.layers.Dense( units= 10, activation= 'relu' ) )
model1.add( keras.layers.Dense( units= 2, activation= 'softmax' ) )
model1.compile( optimizer= 'adam', loss= 'categorical_crossentropy', metrics= ['accuracy'] )
model1_training = model1.fit( x= X, y= Y, epochs= 15,
validation_split = 20./100,
callbacks= [e_stop_monitor],
verbose= 2 )
我观察到的结果是:
Epoch 1/15
23/23 - 0s - accuracy: 0.4823 - loss: nan - val_accuracy: 0.4637 - val_loss: nan
Epoch 2/15
23/23 - 0s - accuracy: nan - loss: nan - val_accuracy: 0.6425 - val_loss: nan
Epoch 3/15
23/23 - 0s - accuracy: nan - loss: 0.0000e+00 - val_accuracy: 0.6425 - val_loss: nan
Epoch 4/15
23/23 - 0s - accuracy: nan - loss: nan - val_accuracy: 0.6425 - val_loss: nan
Epoch 5/15
23/23 - 0s - accuracy: 0.5471 - loss: nan - val_accuracy: 0.6425 - val_loss: nan
Epoch 6/15
23/23 - 0s - accuracy: nan - loss: nan - val_accuracy: 0.6425 - val_loss: nan
Epoch 7/15
23/23 - 0s - accuracy: nan - loss: nan - val_accuracy: 0.6425 - val_loss: nan
Epoch 8/15
23/23 - 0s - accuracy: 0.5941 - loss: nan - val_accuracy: 0.5307 - val_loss: nan
Epoch 9/15
23/23 - 0s - accuracy: nan - loss: nan - val_accuracy: 0.5196 - val_loss: nan
Epoch 10/15
23/23 - 0s - accuracy: 0.6296 - loss: nan - val_accuracy: 0.5978 - val_loss: nan
谢谢大家的帮助...
答案 0 :(得分:0)
首先,您应该比较培训,验证和测试数据的准确性。 如果训练精度低,则模型不会处理数据的复杂性,那么您应该调整参数。 如果验证准确性低,则表明您的模型过度拟合 如果测试准确性低,则意味着您需要更多的培训数据
答案 1 :(得分:0)
您的网络存在的问题是您有2个类别(0和1),但是您使用的类别交叉熵损失适用于两个以上类别。您可能应该使用二进制交叉熵损失。而且我不确定softmax在这种情况下的性能如何,请尝试添加Sigmoid函数而不是softmax。理想情况下,两者应给出相同的结果。