以下是发生错误的具体行:(@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)
您似乎在前一行中缺少
(
:更新行,如下所示:
相关问题 更多 >
编程相关推荐