以下代码是我的神经网络(1个隐藏层)的实现,试图根据输入数据预测一些数字。
m
:培训示例数,此处= 4527 X
:[11, m]
矩阵y
:[1, m]
矩阵w1
:从输入层到隐藏层的权重b1
:从输入层到隐藏层的偏差矢量w2
:从隐藏层到输出层的权重b2
:从隐藏层到输出层的偏差矢量alpha
:学习率ite
:迭代次数,此处= 10000 由于我试图预测连续值输出,因此在输入层中使用了Sigmoid函数,在输出层中使用了identity函数
def propagate(X,y,w1,b1,w2,b2,alpha,ite):
assert(X.shape[0] == 11)
assert(y.shape[0] == 1)
assert(X.shape[1] == y.shape[1])
m = X.shape[1]
J = np.zeros(shape=(ite,1))
iteNo = np.zeros(shape=(ite,1))
for i in range(1,ite+1):
z1 = np.dot(w1,X) + b1
a1 = sigmoid(z1)
z2 = np.dot(w2,a1) + b2
dz2 = (z2-y)/m
dw2 = np.dot(dz2,a1.T)
db2 = np.sum(dz2, axis=1, keepdims=True)
dz1 = np.dot(w2.T,dz2)*derivative_of_sigmoid(z1)
dw1 = np.dot(dz1,X.T)
db1 = np.sum(dz1, axis=1, keepdims=True)
w2 = w2 - (alpha*dw2)
b2 = b2 - (alpha*db2)
w1 = w1 - (alpha*dw1)
b1 = b1 - (alpha*db1)
iteNo[i-1] = i
J[i-1] = np.dot((z2-y),(z2-y).T)/(2*m)
print(z2)
return w1,b1,w2,b2,iteNo,J
我已经尝试了两种方法(使用功能归一化和缩放功能以及不使用功能),但是我的成本函数相对于迭代次数变化如下(图J)。 On x-axis: Number of iteration, On y-axis: Error * 10^12
请帮助!