簡體   English   中英

我可以做些什么來幫助我的 TensorFlow.network 過度擬合大型數據集?

[英]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.

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