iT邦幫忙

1

模型訓練問題

  • 分享至 

  • xImage

為什麼在training model的時候,accuracy一直都是0,要怎麼解決?

whoami iT邦新手 3 級 ‧ 2023-09-20 09:59:19 檢舉
可以提供更多資訊嘛?
tc_89 iT邦新手 5 級 ‧ 2023-09-20 14:02:56 檢舉
下面是我設定的模型
from keras.models import Sequential
from keras import layers
from tensorflow.keras import optimizers
from keras.layers import BatchNormalization,Dropout,Dense
from keras.callbacks import ModelCheckpoint

#建立model
def model():
model = Sequential()
model.add(layers.Dense(1024,kernel_initializer = 'random_normal',
activation = 'relu',
input_shape = (X_train_normal_data.shape[1],)))
model.add(Dropout(0.3))

model.add(layers.Dense(1024, kernel_initializer = 'random_normal',
activation = 'relu'))
model.add(Dropout(0.3))

model.add(layers.Dense(512, kernel_initializer = 'random_normal',
activation = 'relu'))
model.add(Dropout(0.3))

model.add(layers.Dense(256, kernel_initializer = 'random_normal',
activation = 'relu'))
model.add(Dropout(0.3))

model.add(layers.Dense(128, kernel_initializer = 'random_normal',
activation = 'relu'))
model.add(Dropout(0.3))

model.add(layers.Dense(32, kernel_initializer = 'random_normal',
activation = 'relu'))
model.add(Dropout(0.3))

model.add(layers.Dense(16, kernel_initializer = 'random_normal',
activation = 'relu'))
model.add(Dropout(0.3))

model.add(layers.Dense(1, kernel_initializer = 'random_normal',
activation = 'linear'))

adam = optimizers.Adam(lr=0.001)
#lr學習率
model.compile(optimizer = adam, loss = 'mae', metrics=['accuracy'])
return model


call = ModelCheckpoint('good.h5',
monitor = 'val_loss',
verbose = 0,
save_best_only = True,
save_weights_only = True,
mode = 'auto',
period = 1)

model = model()
history = model.fit(X_train_normal_data, Y_train,
validation_data = (X_validation_normal_data, Y_validation),
callbacks = [call],
epochs = 300,
batch_size = 250, verbose = 1)
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
wdchiang
iT邦新手 2 級 ‧ 2023-09-20 07:31:30

ChatGPT 的回答:

在訓練模型時,如果準確度(accuracy)一直保持在0,這通常表示模型沒有學會任務或數據集中的模式,或者存在一些問題需要解決。以下是一些可能導致這種問題的原因和解決方法:

資料預處理問題:檢查您的資料預處理步驟是否正確。確保資料已經被正確載入、清理、歸一化(如果需要)並分割成訓練集和測試集。資料的品質和格式對訓練模型至關重要。

模型架構問題:您的模型架構可能太簡單,無法捕捉數據中的複雜模式。嘗試增加模型的深度或寬度,或者使用更複雜的模型架構,以更好地擬合數據。

學習率設定不當:學習率是訓練神經網絡時一個非常重要的超參數。如果學習率設定得太高或太低,都可能導致模型無法收斂。嘗試不同的學習率設定,以找到一個合適的值。

過擬合:如果模型在訓練集上表現得很好,但在測試集上表現很差,可能是過擬合的問題。過擬合意味著模型在訓練集上學到了噪聲,而不是泛化的模式。可以嘗試使用正則化技術,如dropout,或者減少模型的複雜度來減輕過擬合。

資料不平衡:如果數據集中的類別分佈不均勻,模型可能會傾向於預測佔主導地位的類別,導致準確度較低。在這種情況下,可以考慮使用加權損失函數或過取樣/欠取樣等技術來處理資料不平衡問題。

初始化問題:模型參數的初始值可能會影響訓練的結果。確保使用適當的初始化方法來初始化模型的權重。

調試和監控:定期檢查訓練過程中的損失函數值和準確度,以便及時發現問題。使用工具和可視化來監控模型的訓練進程,以幫助識別潛在的問題。

資料品質問題:檢查數據集是否存在標籤錯誤、缺失值或異常值。不良的數據品質可能會導致模型表現不佳。

如果您在解決這些問題後仍然遇到準確度為0的問題,請提供更多關於您的數據、模型和訓練設置的詳細信息,以便更具體地幫助您解決問題。

1
wu850206
iT邦新手 5 級 ‧ 2023-09-20 09:56:24

我看起來可能要先從你的模型預估資料來看,你先檢查模型輸出的Type以及數量等等是不是合理的(例如label有兩個欄位但是你的神經網路只有1個的這種問題)。

盡量將問題看在是輸出的問題上。

0
miku3920
iT邦新手 2 級 ‧ 2023-09-22 23:15:03

loss function 換一個,或是 dropout 先拿掉,或是先拔掉幾層

訓練不起來的原因我想應該就這三個

我要發表回答

立即登入回答