为什么我在声明这个数组时遇到语法错误?

2024-10-01 13:35:54 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是发生错误的具体行:(@line 146) d\u hi1\u d\u w=[]

“语法错误:无效语法”

这是一个程序的神经网络的主要方法,有3个输入,两个隐藏层,每个层5个神经元,一个输出。你知道吗

h1代表第一层的神经元 hi1代表第二层的神经元

前馈和前馈2应用权重和偏差前馈返回第一层的值数组,而前馈2返回一个单一的输出值

******在更新权重和偏差部分,我仍然需要更新神经元H3到H5,神经元HI1到HI5以及O1*****

以下是训练方法中的错误:

import numpy as np


    def train(self, data, all_y_trues):
        '''
        - data is a (n x 3) numpy array, n = # of samples in the dataset.
        - all_y_trues is a numpy array with n elements.
          Elements in all_y_trues correspond to those in data.
        '''
        learn_rate = 0.1
        epochs = 1000 # number of times to loop through the entire dataset

        for epoch in range(epochs):
            for x, y_true in zip(data, all_y_trues):
                # --- Do a feedforward (we'll need these values later)

                h1 = sigmoid(np.dot(x, self.wforh1) + self.b1)
                h2 = sigmoid(np.dot(x, self.wforh2) + self.b2)
                h3 = sigmoid(np.dot(x, self.wforh3) + self.b3)
                h4 = sigmoid(np.dot(x, self.wforh4) + self.b4)
                h5 = sigmoid(np.dot(x, self.wforh5) + self.b5)

                sum_h1 = np.dot(x, self.wforh1) + self.b1
                sum_h2 = np.dot(x, self.wforh2) + self.b2
                sum_h3 = np.dot(x, self.wforh3) + self.b3
                sum_h4 = np.dot(x, self.wforh4) + self.b4
                sum_h5 = np.dot(x, self.wforh5) + self.b5

                y = self.feedforward(x)

                hi1 = sigmoid(np.dot(y, self.wforhi1) + self.b6)
                hi2 = sigmoid(np.dot(y, self.wforhi2) + self.b7)
                hi3 = sigmoid(np.dot(y, self.wforhi3) + self.b8)
                hi4 = sigmoid(np.dot(y, self.wforhi4) + self.b9)
                hi5 = sigmoid(np.dot(y, self.wforhi5) + self.b10)

                sum_hi1 = np.dot(y, self.wforhi1) + self.b6
                sum_hi2 = np.dot(y, self.wforhi2) + self.b7
                sum_hi3 = np.dot(y, self.wforhi3) + self.b8
                sum_hi4 = np.dot(y, self.wforhi4) + self.b9
                sum_hi5 = np.dot(y, self.wforhi5) + self.b10
                z = np.array([hi1,hi2,hi3,hi4,hi5])
                h = np.array([h1,h2,h3,h4,h5])


                o1 = self.feedforward2(y)
                sum_o1 = np.dot(z, self.wforo1) + self.b11 
                y_pred = o1

                # --- Calculate partial derivatives.
                # --- Naming: d_L_d_w1 represents "partial L / partial w1"
                d_L_d_ypred = -2 * (y_true - y_pred)



                # Neuron o1 NEW
                d_ypred_d_w = []
                for i in range(5):
                    d_ypred_d_w.append(z[i] * deriv_sigmoid(sum_o1))
                #d_ypred_d_w41 = hi1 * deriv_sigmoid(sum_o1)
                #d_ypred_d_w42 = hi2 * deriv_sigmoid(sum_o1)
                #d_ypred_d_w43 = hi3 * deriv_sigmoid(sum_o1)
                #d_ypred_d_w44 = hi4 * deriv_sigmoid(sum_o1)
                #d_ypred_d_w45 = hi5 * deriv_sigmoid(sum_o1)
                d_ypred_d_b11 = deriv_sigmoid(sum_o1)

                d_ypred_d_hi = []
                for i in range(5):
                    d_ypred_d_hi.append(self.wforo1[i] * deriv_sigmoid(sum_o1))
                d_ypred_d_h = []
                for i in range(5):
                     d_ypred_d_h.append(deriv_sigmoid(sum_o1) * (self.wforo1[0] * deriv_sigmoid(sum_hi1) * self.wforhi1[i] + self.wforo1[1] * deriv_sigmoid(sum_hi2) * self.wforhi2[i] + self.wforo1[2] * deriv_sigmoid(sum_hi3) * self.wforhi3[i] + self.wforo1[3] * deriv_sigmoid(sum_hi4) * self.wforhi4[i] + self.wforo1[4] * deriv_sigmoid(sum_hi5) * self.wforhi5[i])
                #d_ypred_d_h1 = deriv_sigmoid(sum_o1) * (self.wforo1[0] * deriv_sigmoid(sum_hi1) * self.wforhi1[0] + self.wforo1[1] * deriv_sigmoid(sum_hi2) * self.wforhi2[0] + self.wforo1[2] * deriv_sigmoid(sum_hi3) * self.wforhi3[0] + self.wforo1[3] * deriv_sigmoid(sum_hi4) * self.wforhi4[0] + self.wforo1[4] * deriv_sigmoid(sum_hi5) * self.wforhi5[0])               
                #d_ypred_d_h2 = deriv_sigmoid(sum_o1) * (self.wforo1[0] * deriv_sigmoid(sum_hi1) * self.wforhi1[1] + self.wforo1[1] * deriv_sigmoid(sum_hi2) * self.wforhi2[1] + self.wforo1[2] * deriv_sigmoid(sum_hi3) * self.wforhi3[1] + self.wforo1[3] * deriv_sigmoid(sum_hi4) * self.wforhi4[1] + self.wforo1[4] * deriv_sigmoid(sum_hi5) * self.wforhi5[1])
                #d_ypred_d_h3 = deriv_sigmoid(sum_o1) * (self.wforo1[0] * deriv_sigmoid(sum_hi1) * self.wforhi1[2] + self.wforo1[1] * deriv_sigmoid(sum_hi2) * self.wforhi2[2] + self.wforo1[2] * deriv_sigmoid(sum_hi3) * self.wforhi3[2] + self.wforo1[3] * deriv_sigmoid(sum_hi4) * self.wforhi4[2] + self.wforo1[4] * deriv_sigmoid(sum_hi5) * self.wforhi5[2])
                #d_ypred_d_h4 = deriv_sigmoid(sum_o1) * (self.wforo1[0] * deriv_sigmoid(sum_hi1) * self.wforhi1[3] + self.wforo1[1] * deriv_sigmoid(sum_hi2) * self.wforhi2[3] + self.wforo1[2] * deriv_sigmoid(sum_hi3) * self.wforhi3[3] + self.wforo1[3] * deriv_sigmoid(sum_hi4) * self.wforhi4[3] + self.wforo1[4] * deriv_sigmoid(sum_hi5) * self.wforhi5[3])
                #d_ypred_d_h5 = deriv_sigmoid(sum_o1) * (self.wforo1[0] * deriv_sigmoid(sum_hi1) * self.wforhi1[4] + self.wforo1[1] * deriv_sigmoid(sum_hi2) * self.wforhi2[4] + self.wforo1[2] * deriv_sigmoid(sum_hi3) * self.wforhi3[4] + self.wforo1[3] * deriv_sigmoid(sum_hi4) * self.wforhi4[4] + self.wforo1[4] * deriv_sigmoid(sum_hi5) * self.wforhi5[4])



                # Neuron hi1 NEW

                d_hi1_d_w = []
                for i in range(5):
                    d_hi1_d_w.append(h[i] * deriv_sigmoid(sum_hi1))
                d_hi1_d_b6 = deriv_sigmoid(sum_hi1)

                # Neuron hi2 NEW
                d_hi2_d_w = []
                for i in range(5):
                    d_hi2_d_w.append(h[i] * deriv_sigmoid(sum_hi2))
                d_hi2_d_b7 = deriv_sigmoid(sum_hi2)

                # Neuron hi3 NEW
                d_hi3_d_w = []
                for i in range(5):
                    d_hi3_d_w.append(h[i] * deriv_sigmoid(sum_hi3))
                d_hi3_d_b8 = deriv_sigmoid(sum_hi3)

                # Neuron hi4 NEW
                d_hi4_d_w = []
                for i in range(5):
                    d_hi4_d_w.append(h[i] * deriv_sigmoid(sum_hi4))
                d_hi4_d_b9 = deriv_sigmoid(sum_hi4)

                #Neuron hi5 NEW
                d_hi5_d_w = []
                for i in range(5):
                    d_hi5_d_w.append(h[i] * deriv_sigmoid(sum_hi5))
                d_hi5_d_b10 = deriv_sigmoid(sum_hi5)

                #Neuron h1 NEW
                d_h1_d_w = []
                for i in range(3):
                    d_h1_d_w.append(x[i] * deriv_sigmoid(sum_h1))
                d_h1_d_b1 = deriv_sigmoid(sum_h1)

                #Neuron h2 NEW
                d_h2_d_w = []
                for i in range(3):
                    d_h2_d_w.append(x[i] * deriv_sigmoid(sum_h2))
                d_h2_d_b2 = deriv_sigmoid(sum_h2)

                #Neuron h3 NEW
                d_h3_d_w = []
                for i in range(3):
                    d_h3_d_w.append(x[i] * deriv_sigmoid(sum_h3))
                d_h3_d_b3 = deriv_sigmoid(sum_h3)

                #Neuron h4 NEW
                d_h4_d_w = []
                for i in range(3):
                    d_h4_d_w.append(x[i] * deriv_sigmoid(sum_h4))
                d_h4_d_b4 = deriv_sigmoid(sum_h4)

                #Neuron h5 NEW
                d_h5_d_w = []
                for i in range(3):
                    d_h5_d_w.append(x[i] * deriv_sigmoid(sum_h5))
                d_h5_d_b5 = deriv_sigmoid(sum_h5)



                # --- Update weights and biases
                # Neuron h1
                for i in range(3):
                    self.wforh1[i] = self.wforh1[i]- learn_rate * d_L_d_ypred * d_ypred_d_h[0] * d_h1_d_w[i]
                self.b1 = self.b1 - learn_rate * d_L_d_ypred * d_ypred_d_h[0] * d_h1_d_b1

                # Neuron h2
                for i in range(3):
                    self.wforh2[i] = self.wforh2[i] - learn_rate * d_L_d_ypred * d_ypred_d_h[1] * d_h2_d_w[i]
                self.b2 = self.b2 - learn_rate * d_L_d_ypred * d_ypred_d_h[1] * d_h2_d_b2

                # Neuron h3

                self.w7 -= learn_rate * d_L_d_ypred * d_ypred_d_h3 * d_h3_d_w7
                self.w8 -= learn_rate * d_L_d_ypred * d_ypred_d_h3 * d_h3_d_w8
                self.w9 -= learn_rate * d_L_d_ypred * d_ypred_d_h3 * d_h3_d_w9
                self.b3 -= learn_rate * d_L_d_ypred * d_ypred_d_h3 * d_h3_d_b3

                # Neuron h4
                self.w10 -= learn_rate * d_L_d_ypred * d_ypred_d_h4 * d_h4_d_w10
                self.w11 -= learn_rate * d_L_d_ypred * d_ypred_d_h4 * d_h4_d_w11
                self.w12 -= learn_rate * d_L_d_ypred * d_ypred_d_h4 * d_h4_d_w12
                self.b4 -= learn_rate * d_L_d_ypred * d_ypred_d_h4 * d_h4_d_b4

                # Neuron h5
                self.w13 -= learn_rate * d_L_d_ypred * d_ypred_d_h5 * d_h5_d_w13
                self.w14 -= learn_rate * d_L_d_ypred * d_ypred_d_h5 * d_h5_d_w14
                self.w15 -= learn_rate * d_L_d_ypred * d_ypred_d_h5 * d_h5_d_w15
                self.b5 -= learn_rate * d_L_d_ypred * d_ypred_d_h5 * d_h5_d_b5

                # Neuron hi1
                self.w16 -= learn_rate * d_L_d_ypred * d_ypred_d_hi1 * d_hi1_d_w16
                self.w17 -= learn_rate * d_L_d_ypred * d_ypred_d_hi1 * d_hi1_d_w17
                self.w18 -= learn_rate * d_L_d_ypred * d_ypred_d_hi1 * d_hi1_d_w18
                self.w19 -= learn_rate * d_L_d_ypred * d_ypred_d_hi1 * d_hi1_d_w19
                self.w20 -= learn_rate * d_L_d_ypred * d_ypred_d_hi1 * d_hi1_d_w20
                self.b6 -= learn_rate * d_L_d_ypred * d_ypred_d_hi1 * d_hi1_d_b6

                # Neuron hi2
                self.w21 -= learn_rate * d_L_d_ypred * d_ypred_d_hi2 * d_hi2_d_w21
                self.w22 -= learn_rate * d_L_d_ypred * d_ypred_d_hi2 * d_hi2_d_w22
                self.w23 -= learn_rate * d_L_d_ypred * d_ypred_d_hi2 * d_hi2_d_w23
                self.w24 -= learn_rate * d_L_d_ypred * d_ypred_d_hi2 * d_hi2_d_w24
                self.w25 -= learn_rate * d_L_d_ypred * d_ypred_d_hi2 * d_hi2_d_w25
                self.b7 -= learn_rate * d_L_d_ypred * d_ypred_d_hi2 * d_hi2_d_b7

                # Neuron hi3
                self.w26 -= learn_rate * d_L_d_ypred * d_ypred_d_hi3 * d_hi3_d_w26
                self.w27 -= learn_rate * d_L_d_ypred * d_ypred_d_hi3 * d_hi3_d_w27
                self.w28 -= learn_rate * d_L_d_ypred * d_ypred_d_hi3 * d_hi3_d_w28
                self.w29 -= learn_rate * d_L_d_ypred * d_ypred_d_hi3 * d_hi3_d_w29
                self.w30 -= learn_rate * d_L_d_ypred * d_ypred_d_hi3 * d_hi3_d_w30
                self.b8 -= learn_rate * d_L_d_ypred * d_ypred_d_hi3 * d_hi3_d_b8

                # Neuron hi4
                self.w31 -= learn_rate * d_L_d_ypred * d_ypred_d_hi4 * d_hi4_d_w31
                self.w32 -= learn_rate * d_L_d_ypred * d_ypred_d_hi4 * d_hi4_d_w32
                self.w33 -= learn_rate * d_L_d_ypred * d_ypred_d_hi4 * d_hi4_d_w33
                self.w34 -= learn_rate * d_L_d_ypred * d_ypred_d_hi4 * d_hi4_d_w34
                self.w35 -= learn_rate * d_L_d_ypred * d_ypred_d_hi4 * d_hi4_d_w35
                self.b9 -= learn_rate * d_L_d_ypred * d_ypred_d_hi4 * d_hi4_d_b9

                # Neuron hi5 NEW
                self.w36 -= learn_rate * d_L_d_ypred * d_ypred_d_hi5 * d_hi5_d_w36
                self.w37 -= learn_rate * d_L_d_ypred * d_ypred_d_hi5 * d_hi5_d_w37
                self.w38 -= learn_rate * d_L_d_ypred * d_ypred_d_hi5 * d_hi5_d_w38
                self.w39 -= learn_rate * d_L_d_ypred * d_ypred_d_hi5 * d_hi5_d_w39
                self.w40 -= learn_rate * d_L_d_ypred * d_ypred_d_hi5 * d_hi5_d_w40
                self.b10 -= learn_rate * d_L_d_ypred * d_ypred_d_hi5 * d_hi5_d_b10

                # Neuron o1 NEW
                self.w41 -= learn_rate * d_L_d_ypred * d_ypred_d_w41
                self.w42 -= learn_rate * d_L_d_ypred * d_ypred_d_w42
                self.w43 -= learn_rate * d_L_d_ypred * d_ypred_d_w43
                self.w44 -= learn_rate * d_L_d_ypred * d_ypred_d_w44
                self.w45 -= learn_rate * d_L_d_ypred * d_ypred_d_w45
                self.b11 -= learn_rate * d_L_d_ypred * d_ypred_d_b11

            # --- Calculate total loss at the end of each epoch
            if epoch % 10 == 0:
                firstlayer = np.apply_along_axis(self.feedforward, 1, data)
                y_preds = np.apply_along_axis(self.feedforward2, 1, firstlayer)
                loss = mse_loss(all_y_trues, y_preds)
                print("Epoch %d loss: %.3f" % (epoch, loss))

# Define dataset
data = np.array([
  [-2, -1, 16],  # Alice
  [25, 6, -5],   # Bob
  [17, 4, 20],   # Charlie
  [-15, -6 ,7], # Diana
])
all_y_trues = np.array([
  1, # Alice
  0, # Bob
  0, # Charlie
  1, # Diana
])

# Train our neural network!
network = OurNeuralNetwork()
network.train(data, all_y_trues)

Tags: selfratenplearnsumneuronderivsigmoid
1条回答
网友
1楼 · 发布于 2024-10-01 13:35:54

您似乎在前一行中缺少(

d_ypred_d_h.append(deriv_sigmoid(sum_o1) * (self.wforo1[0] * deriv_sigmoid(sum_hi1) * self.wforhi1[i] + self.wforo1[1] * deriv_sigmoid(sum_hi2) * self.wforhi2[i] + self.wforo1[2] * deriv_sigmoid(sum_hi3) * self.wforhi3[i] + self.wforo1[3] * deriv_sigmoid(sum_hi4) * self.wforhi4[i] + self.wforo1[4] * deriv_sigmoid(sum_hi5) * self.wforhi5[i])

更新行,如下所示:

d_ypred_d_h.append(deriv_sigmoid(sum_o1) * (self.wforo1[0] * deriv_sigmoid(sum_hi1) * self.wforhi1[i] + self.wforo1[1] * deriv_sigmoid(sum_hi2) * self.wforhi2[i] + self.wforo1[2] * deriv_sigmoid(sum_hi3) * self.wforhi3[i] + self.wforo1[3] * deriv_sigmoid(sum_hi4) * self.wforhi4[i] + self.wforo1[4] * deriv_sigmoid(sum_hi5) * self.wforhi5[i]))

相关问题 更多 >