我已经在训练和测试数据中绘制了模型精度曲线,并且获得了以下曲线,看起来很不寻常。该曲线表示什么?是过拟合还是欠拟合?谁能帮我,我哪里出问题了?我正在处理ABIDE数据集。我有871个样本,我使用cc400分解生成了76636个特征。
我提供了以下代码片段:
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
#create model
model = Sequential()
#add model layers
model.add(Dropout(0.2))
initializer_relu = tf.keras.initializers.HeUniform()
model.add(Dense(128, activation='relu',
kernel_initializer=initializer_relu,
kernel_regularizer=tf.keras.regularizers.l1(0.0001), input_shape=
(76636,)))
model.add(Dropout(0.2))
model.add(Dense(64, activation='relu',
kernel_initializer=initializer_relu,
kernel_regularizer=tf.keras.regularizers.l1(0.0001)))
model.add(Dropout(0.2))
initializer_sigmoid = tf.keras.initializers.GlorotUniform()
model.add(Dense(1, activation='sigmoid',
kernel_initializer=initializer_sigmoid))
#compile model using mse as a measure of model performance
model.compile(optimizer='adam', loss='binary_crossentropy',
metrics='accuracy')
from keras.callbacks import EarlyStopping
early_stopping_monitor = EarlyStopping(patience=3)
#train model
history= model.fit(X_train, y_train, validation_data=(X_test, y_test),
batch_size=64 , epochs=20, callbacks=[early_stopping_monitor])
import matplotlib.pyplot as plt
print(history.history.keys())
# summarize history for accuracy
plt.plot(history.history[ 'accuracy' ])
plt.plot(history.history[ 'val_accuracy' ])
plt.title( 'model accuracy' )
plt.ylabel( 'accuracy' )
plt.xlabel( 'epoch' )
plt.legend([ 'train' , 'test' ], loc= 'lower right' )
plt.show()
精确直线的原因是该模型无法在20个纪元内学习。由于不同的要素没有相似的值范围,因此渐变可能要花费很长时间,并且可能会来回摆动并花费很长时间,才能最终找到全局/局部最小值。为了克服模型学习问题,我们将数据标准化。我们确保不同的特征取相似的值范围,以使梯度下降可以更快地收敛