簡體   English   中英

神經網絡的反向傳播-Python

[英]Backpropagation for Neural Network - Python

我正在編寫一個程序在python中做神經網絡,我正在嘗試設置反向傳播算法。 基本思想是,我查看5,000個訓練示例,收集錯誤,找出需要移動theta並朝該方向移動的那個方向。 有一些培訓示例,然后我使用一個隱藏層,然后使用一個輸出層。 但是我在這里弄錯了梯度/導數/誤差,因為我沒有正確地移動θ,因為它們需要移動。 我今天花了8個小時,不確定我在做什么錯。 謝謝你的幫助!!

x = 401x5000 matrix

y = 10x5000 matrix   # 10 possible output classes, so one column will look like [0, 0, 0, 1, 0... 0] to indicate the output class was 4

theta_1 = 25x401

theta_2 = 10x26


alpha=.01

    sigmoid= lambda theta, x: 1 / (1 + np.exp(-(theta*x)))


        #move thetas in right direction for each iteration
        for iter in range(0,1):
            all_delta_1, all_delta_2 = 0, 0
            #loop through each training example, 1...m    
            for t in range(0,5000):

                hidden_layer = np.matrix(np.concatenate((np.ones((1,1)),sigmoid(theta_1,x[:,t]))))
                output_layer = sigmoid(theta_2,hidden_layer)

                delta_3 = output_layer - y[:,t]
                delta_2= np.multiply((theta_2.T*delta_3),(np.multiply(hidden_layer,(1-hidden_layer))))

                #print type(delta_3), delta_3.shape, type(hidden_layer.T), hidden_layer.T.shape
                all_delta_2 += delta_3*hidden_layer.T
                all_delta_1 += delta_2[1:]*x[:,t].T



            delta_gradient_2 = (all_delta_2 / m)
            delta_gradient_1 = (all_delta_1 / m)
            theta_1 = theta_1- (alpha * delta_gradient_1)
            theta_2 = theta_2- (alpha * delta_gradient_2)

看起來您的漸變是相對於未壓縮的輸出層而言的。

嘗試將output_layer = sigmoid(theta_2,hidden_layer)更改為output_layer = theta_2*hidden_layer

或重新計算梯度以壓縮輸出。

暫無
暫無

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

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