![](/img/trans.png)
[英]What does it mean if my network can never overfit no matter how much I train it or expand its capacity?
[英]What can I do to help make my TensorFlow network overfit a large dataset?
我特別嘗試過擬合的原因是因為我正在按照 François Chollet 的“Deep Learning with Python”步驟來設計 a.network。 這很重要,因為這是我學位課程的最終項目。
在此階段,我需要使 a.network 足夠大以過度擬合我的數據,以確定最大容量,即我將優化的 .networks 大小的上限。
然而,正如標題所暗示的,我正在努力讓 my.network 過擬合。 也許我的方法很幼稚,但讓我解釋一下我的 model:
我正在使用這個數據集來訓練一個 model 來對星星進行分類。 一顆恆星必須按兩類分類(分為兩類):它的光譜 class(100 類)和光度 class(10 類)。 例如,我們的太陽是“G2V”,它的光譜 class 是“G2”,它的光度 class 是“V”。
為此,我構建了一個double-headed.network,它接受這個輸入數據: DataFrame包含輸入數據
然后它分裂成兩個 parallel.networks。
# Create our input layer:
input = keras.Input(shape=(3), name='observation_data')
# Build our spectral class
s_class_branch = layers.Dense(100000, activation='relu', name = 's_class_branch_dense_1')(input)
s_class_branch = layers.Dense(500, activation='relu', name = 's_class_branch_dense_2')(s_class_branch)
# Spectral class prediction
s_class_prediction = layers.Dense(100,
activation='softmax',
name='s_class_prediction')(s_class_branch)
# Build our luminosity class
l_class_branch = layers.Dense(100000, activation='relu', name = 'l_class_branch_dense_1')(input)
l_class_branch = layers.Dense(500, activation='relu', name = 'l_class_branch_dense_2')(l_class_branch)
# Luminosity class prediction
l_class_prediction = layers.Dense(10,
activation='softmax',
name='l_class_prediction')(l_class_branch)
# Now we instantiate our model using the layer setup above
scaled_model = Model(input, [s_class_prediction, l_class_prediction])
optimizer = keras.optimizers.RMSprop(learning_rate=0.004)
scaled_model.compile(optimizer=optimizer,
loss={'s_class_prediction':'categorical_crossentropy',
'l_class_prediction':'categorical_crossentropy'},
metrics=['accuracy'])
logdir = os.path.join("logs", "2raw100k")
tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)
scaled_model.fit(
input_data,{
's_class_prediction':spectral_targets,
'l_class_prediction':luminosity_targets
},
epochs=20,
batch_size=1000,
validation_split=0.0,
callbacks=[tensorboard_callback])
在上面的代碼中,您可以看到我嘗試在兩個分支中使用兩個隱藏層的 model,一層的形狀為 100 000,然后進入另一層 500,然后進入 output 層。 訓練目標是 one-hot 編碼的,所以每個 class 都有一個節點。
我已經嘗試了具有 1 到 4 個隱藏層的各種尺寸,從 500 到 100 000 的形狀,只是因為我用完了 RAM 才停止。 我只使用了密集層,但嘗試使用歸一化層不受影響。
他們都會愉快地訓練並慢慢降低損失,但他們似乎永遠不會過擬合。 我已經運行了 100 個 epochs 的 run.networks,它們仍然不會過度擬合。
我該怎么做才能使 my.network 更好地擬合數據? 我對機器學習還很陌生,現在只做了一年,所以我確信我缺少一些東西。 我非常感謝任何幫助,並且很樂意提供圖中顯示的日志。
好吧,經過更多的培訓,我想我已經回答了這個問題。 基本上,.network 沒有足夠的容量,需要更多的層。 我之前嘗試了更多層,但因為我沒有將它與驗證數據進行比較,所以過擬合並不明顯!
所以感謝@Aryagm 的評論,因為這讓我解決了這個問題。 如您所見,驗證數據(灰色和藍色)明顯過擬合,而訓練數據(綠色和橙色)沒有顯示出來。
如果有的話,這說明了為什么單獨的驗證集如此重要,而我一開始就沒有使用它是個傻瓜。 學過的知識。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.