Skip to content

Commit 7eac77f

Browse files
committed
📝 修改神修修改readme
1 parent 01d5688 commit 7eac77f

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

images/NeuralNetwork_05.png

10 KB
Loading

readme.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -565,8 +565,8 @@ def nnCostFunction(nn_params,input_layer_size,hidden_layer_size,num_labels,X,y,L
565565
# 梯度
566566
def nnGradient(nn_params,input_layer_size,hidden_layer_size,num_labels,X,y,Lambda):
567567
length = nn_params.shape[0]
568-
Theta1 = nn_params[0:hidden_layer_size*(input_layer_size+1)].reshape(hidden_layer_size,input_layer_size+1)
569-
Theta2 = nn_params[hidden_layer_size*(input_layer_size+1):length].reshape(num_labels,hidden_layer_size+1)
568+
Theta1 = nn_params[0:hidden_layer_size*(input_layer_size+1)].reshape(hidden_layer_size,input_layer_size+1).copy() # 这里使用copy函数,否则下面修改Theta的值,nn_params也会一起修改
569+
Theta2 = nn_params[hidden_layer_size*(input_layer_size+1):length].reshape(num_labels,hidden_layer_size+1).copy()
570570
m = X.shape[0]
571571
class_y = np.zeros((m,num_labels)) # 数据的y对应0-9,需要映射为0/1的关系
572572
# 映射y
@@ -581,9 +581,8 @@ def nnGradient(nn_params,input_layer_size,hidden_layer_size,num_labels,X,y,Lambd
581581
582582
Theta1_grad = np.zeros((Theta1.shape)) #第一层到第二层的权重
583583
Theta2_grad = np.zeros((Theta2.shape)) #第二层到第三层的权重
584-
585-
Theta1[:,0] = 0;
586-
Theta2[:,0] = 0;
584+
585+
587586
'''正向传播,每次需要补上一列1的偏置bias'''
588587
a1 = np.hstack((np.ones((m,1)),X))
589588
z2 = np.dot(a1,np.transpose(Theta1))
@@ -592,15 +591,19 @@ def nnGradient(nn_params,input_layer_size,hidden_layer_size,num_labels,X,y,Lambd
592591
z3 = np.dot(a2,np.transpose(Theta2))
593592
h = sigmoid(z3)
594593
594+
595595
'''反向传播,delta为误差,'''
596596
delta3 = np.zeros((m,num_labels))
597597
delta2 = np.zeros((m,hidden_layer_size))
598598
for i in range(m):
599-
delta3[i,:] = h[i,:]-class_y[i,:]
599+
#delta3[i,:] = (h[i,:]-class_y[i,:])*sigmoidGradient(z3[i,:]) # 均方误差的误差率
600+
delta3[i,:] = h[i,:]-class_y[i,:] # 交叉熵误差率
600601
Theta2_grad = Theta2_grad+np.dot(np.transpose(delta3[i,:].reshape(1,-1)),a2[i,:].reshape(1,-1))
601602
delta2[i,:] = np.dot(delta3[i,:].reshape(1,-1),Theta2_x)*sigmoidGradient(z2[i,:])
602603
Theta1_grad = Theta1_grad+np.dot(np.transpose(delta2[i,:].reshape(1,-1)),a1[i,:].reshape(1,-1))
603604
605+
Theta1[:,0] = 0
606+
Theta2[:,0] = 0
604607
'''梯度'''
605608
grad = (np.vstack((Theta1_grad.reshape(-1,1),Theta2_grad.reshape(-1,1)))+Lambda*np.vstack((Theta1.reshape(-1,1),Theta2.reshape(-1,1))))/m
606609
return np.ravel(grad)

0 commit comments

Comments
 (0)