簡體   English   中英

為什么我得到一條幾乎是直線的 model 精度曲線?

[英]Why am I getting an almost straight line model accuracy curve?

在此處輸入圖像描述

我在訓練和測試數據中有 plot 我的 model 精度曲線,我得到了以下看起來很不尋常的曲線。 這條曲線說明了什么? 是過擬合還是欠擬合? 誰能幫助我,我哪里出錯了? 我正在處理 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()

直線精度線的原因是 model 無法在 20 個時期內學習。 因為不同的特征沒有相似的值范圍,因此梯度最終可能會花費很長時間並且可以來回振盪並且需要很長時間才能最終找到全局/局部最小值。 為了克服 model 學習問題,我們對數據進行了歸一化。 我們確保不同的特征具有相似的值范圍,以便梯度下降可以更快地收斂

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM