为什么我会得到几乎直线的模型精度曲线?

https://img4.mukewang.com/64e46d6c00018aab04680296.jpg

我在训练和测试数据中绘制了模型精度曲线,并获得了以下看起来相当不寻常的曲线。这条曲线说明什么?是过拟合还是欠拟合?谁能帮帮我,我哪里出了问题?我正在研究 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()


隔江千里
浏览 1614回答 1
1回答

尚方宝剑之说

准确率线呈直线的原因是模型无法在 20 个 epoch 内学习。因为不同的特征没有相似的值范围,因此梯度可能最终需要很长时间,并且可能会来回振荡,并且需要很长时间才能最终找到全局/局部最小值。为了克服模型学习问题,我们对数据进行标准化。我们确保不同的特征具有相似的值范围,以便梯度下降可以更快地收敛
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python