簡體   English   中英

簡單的Lasange神經網絡無法正常工作

[英]Simple Lasange Neural Network not working

我使用Lasagne軟件包構建了一個簡單的3層神經網絡,並在一個非常簡單的數據集(僅4個示例)上對其進行了測試。

X = np.array([[0,0,1],
              [0,1,1],
              [1,0,1],
              [1,1,1]])         

y = np.array([[0, 0],[1, 0],[1, 1],[0, 1]])

但是,它無法學習這一點,並導致了預測:

pred = theano.function([input_var], [prediction])
np.round(pred(X), 2)
array([[[ 0.5 ,  0.5 ],
        [ 0.98,  0.02],
        [ 0.25,  0.75],
        [ 0.25,  0.75]]])

完整代碼:

def build_mlp(input_var=None):
    l_in = lasagne.layers.InputLayer(shape=(None, 3), input_var=input_var)
    l_hid1 = lasagne.layers.DenseLayer(
        l_in, num_units=4,
        nonlinearity=lasagne.nonlinearities.rectify,
        W=lasagne.init.GlorotUniform())
    l_hid2 = lasagne.layers.DenseLayer(
        l_hid1, num_units=4,
        nonlinearity=lasagne.nonlinearities.rectify,
        W=lasagne.init.GlorotUniform())
    l_out = lasagne.layers.DenseLayer(
        l_hid2, num_units=2,
        nonlinearity=lasagne.nonlinearities.softmax)
    return l_out

input_var = T.lmatrix('inputs')
target_var = T.lmatrix('targets')

network = build_mlp(input_var)

prediction = lasagne.layers.get_output(network, deterministic=True)
loss = lasagne.objectives.squared_error(prediction, target_var)
loss = loss.mean()

params = lasagne.layers.get_all_params(network, trainable=True)
updates = lasagne.updates.nesterov_momentum(
    loss, params, learning_rate=0.01, momentum=0.9)

train_fn = theano.function([input_var, target_var], loss, updates=updates)
val_fn = theano.function([input_var, target_var], [loss])

訓練:

num_epochs = 1000
for epoch in range(num_epochs):
    inputs, targets = (X, y)
    train_fn(inputs, targets)   

我猜測隱藏層中使用的非線性函數或學習方法可能存在問題。

這是我對問題的猜測,

首先,我不知道為什么會有類似[0,0]輸出? 這是否意味着樣本未在所有類別中歸類?

其次,您在通常用於分類的最后一層中使用Softmax,您是否正在建立該網絡用於分類? 如果您對輸出感到困惑,那么輸出實際上就是每個類的概率,因此我認為輸出是正確的:

  • 第二個樣本預測為[0.98 0.02]因此意味着第二個樣本屬於第一類,就像您的目標[1 0]

  • 第三樣本預測值為[0.25 0.75] ,這意味着第三樣本屬於第二類,就像您的目標[1 1] (無論您的第一類值是分類,因此系統會將其視為正確分類)

  • 第四個樣本預測為[0.25 0.75]因此意味着第四個樣本屬於第二類,就像您的目標[0 1]

  • 第一個樣本預測為[0.5 0.5]這對我來說有點令人困惑,所以我猜Lasagne將預測第一個樣本,該樣本在每個類別中的發生概率與未在任何類別中的成員相同

我覺得您無法根據以上內容真正判斷模型是否在正確學習。

  1. 訓練實例數您有4個訓練實例。 您構建的神經網絡包含3 * 4 + 4 * 4 + 4 * 2 = 36個必須學習的權重。 更不用說您有4種不同類型的輸出。 網絡肯定不適合,這可能解釋了意外的結果。

  2. 如何測試模型是否正常工作如果我想測試神經網絡是否正確學習,我將在正常工作的數據集(如MNIST)上進行測試,並確保我的模型有很高的學習可能性。 您也可以嘗試與已經編寫的另一個神經網絡庫或文獻進行比較。 如果我真的想微型化,我將對線性可分離的數據集使用boosting。

如果您的模型仍然無法正常學習,那么我會擔心的。

暫無
暫無

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

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