簡體   English   中英

是什么使神經網絡很難學習x / 256的分類是x的分類器?

[英]What make it so hard for a neural network to learn a classifier that class of x/256 is x?

  1. 我最初要做的是使用神經網絡對一些波浪數據進行分類。 在這個問題中,我的向量約為200,類別數為256。但是,損失永遠不會減少。

  2. 那么,我想,浪潮只是標簽嗎? $wave_i(x) = N(i/256.0, (1/10000)^2)$會標記i ,N代表正態分布。

  3. 對於32或64這樣的很小的班級,NN效果很好,並且學習迅速。

  4. 但是,當我將其classes = 256時,學習速度實在令人難以忍受,甚至根本沒有學習。

  5. 我使用的模型非常簡單。 我認為這足以記住輸入和輸出之間的關系。 (為什么?當abs(input - const) < eps時,您可以輕松構造一個輸出1的單元。)

     model = Sequential([ Dense(classes, input_dim=200), Activation('sigmoid'), Dense(classes * 2), Activation('sigmoid'), Dense(classes), Activation('softmax'), ]) 

    然后,我將批處理大小為256的數據送入它,每個不同的標簽都出現一次。

  6. 結果是,損失達到2.xxxx ,在2500個時期后acc達到0.07 ,並且在3000個時期后停止變化。 (約0.090.1

我知道更多的變量需要更多的時間來學習。 但是,很明顯,所有單個輸出單元格都應該輕松減少它們之間的關系(我的輸入集非常不同)。

def generator():
    while 1:
        data = [numpy.random.normal(i/255.0,1/10000.0,225).tolist() for i in range(0, classes)]
        labels = to_categorical([i for i in range(0, classes)], classes)
        yield (data,labels)

當您正在輸入和輸出之間建立一種非常簡單的關系時,例如您正在探索的關系,那么這可能無法發揮神經網絡的優勢,該神經網絡足夠靈活以適合任何功能,但很少能做到完美。 當您擁有一個簡單的函數時,您可能會發現您會發現來自神經網絡的擬合缺陷,並且除神經網絡之外的其他模型會做得更好。

您可能會做一些事情以獲得更好的適應性(大致按照我嘗試的順序):

  1. 嘗試使用其他優化程序。 您沒有說要使用哪個優化器,但是Keras庫提供了一些選擇

  2. 當針對已標准化的輸入特征進行訓練和預測時,神經網絡可以更好地工作。 一個有效的選擇是平均值0,標准偏差1。在您的情況下,如果在培訓和測試時對每個批次進行預處理,例如: data = (data - 0.5)/0.289 ,則可能會有所幫助。

  3. 增加隱藏層中神經元的數量,和/或更改激活功能。 您理想的激活函數在這里甚至可能像高斯形狀(因此單個神經元可以立即調整到每個類),但這不是您通常在NN庫中找到的。 也考慮刪除中間層,在softmax *之前的單個隱藏層中僅具有8*classes神經元。

  4. 從生成器中的輸入示例中采樣,而不是每次都從每個類中計算一個。 生成器可能太規則了-我已經看到經典的xor示例網絡在重復輸入相同的輸入時會以與您的描述類似的方式卡住。


*更簡單的網絡模型如下所示:

model = Sequential([
  Dense(classes * 8, input_dim=200), 
  Activation('sigmoid'), 
  Dense(classes), 
  Activation('softmax'), 
])

暫無
暫無

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

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