python - 成本函数神经网络
问题描述
以下代码是我尝试根据输入数据预测某个数字的神经网络(1 个隐藏层)的实现。
- 输入节点数:11
- 隐藏层节点数:11
- 输出层节点数:1
m
: 训练样例的数量,这里 = 4527X
:[11, m]
矩阵y
:[1, m]
矩阵w1
:从输入层到隐藏层的权重b1
:从输入层到隐藏层的偏置向量w2
:从隐藏层到输出层的权重b2
:从隐藏层到输出层的偏置向量alpha
: 学习率ite
: 迭代次数,这里 = 10000
由于我试图预测连续值输出,因此我在输入层使用 sigmoid 函数,在输出层使用恒等函数
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
我已经尝试了这两种方法(使用特征归一化和缩放&没有),但我的成本函数在迭代次数(Plotted J)方面变化如下。 在 x 轴上:迭代次数,在 y 轴上:错误 * 10^12
请帮忙!