为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

隔江千里 2023-08-22 16:09:51
我在训练和测试数据中绘制了模型精度曲线,并获得了以下看起来相当不寻常的曲线。这条曲线说明什么?是过拟合还是欠拟合?谁能帮帮我,我哪里出了问题?我正在研究 ABIDE 数据集。我有 871 个样本,我使用 cc400 分割生成了 76636 个特征。我提供了下面的代码片段:import tensorflow as tffrom keras.models import Sequentialfrom keras.layers import Densefrom keras.layers import Dropout#create modelmodel = Sequential()#add model layersmodel.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 performancemodel.compile(optimizer='adam', loss='binary_crossentropy', metrics='accuracy')from keras.callbacks import EarlyStoppingearly_stopping_monitor = EarlyStopping(patience=3)#train modelhistory= 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 pltprint(history.history.keys())# summarize history for accuracyplt.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()
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

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



查看完整回答
反对 回复 2023-08-22
  • 1 回答
  • 0 关注
  • 1612 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信