Warm tip: This article is reproduced from serverfault.com, please click

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

(python - Why am I getting an almost straight line model accuracy curve?)

发布于 2020-09-20 15:01:49

在此处输入图片说明

我已经在训练和测试数据中绘制了模型精度曲线,并且获得了以下曲线,看起来很不寻常。该曲线表示什么?是过拟合还是欠拟合?谁能帮我,我哪里出问题了?我正在处理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()
Questioner
Faria Zarin Subah 1504027
Viewed
12
Saikrishna dugyala 2020-12-07 02:57:53

精确直线的原因是该模型无法在20个纪元内学习。由于不同的要素没有相似的值范围,因此渐变可能要花费很长时间,并且可能会来回摆动并花费很长时间,才能最终找到全局/局部最小值。为了克服模型学习问题,我们将数据标准化。我们确保不同的特征取相似的值范围,以使梯度下降可以更快地收敛