好了,所以我在Andrew Ng's machine learning course on coursera中间,想适应其完成任务为4神经网络:乙状结肠激活功能的连续输出变量
尤其是神经网络的一部分神经网络其中我已经正确完成的任务的一部分如下:
- 乙状结肠激活函数:
g(z) = 1/(1+e^(-z))
- 10输出单元,其每一个可以采取0或1
- 1喜使用dden层
- 反向传播方法以最小化成本函数
- 成本函数:
其中L=number of layers
,s_l = number of units in layer l
,m = number of training examples
,K = number of output units
现在我想调整运动所以有一个连续的输出单元,它取[0,1]之间的任何值,我试图找出需要改变的地方,所以f AR我已经
- 代替我自己的,即,使得输出是连续变量的输出的单位数0和1之间
- 更新引用
- 更新成本函数在后面的数据传播算法: 其中
a_3
是从正向传播确定的输出单位的值。
我确定当梯度检查方法显示由反向传播确定的梯度并且数值近似不再匹配时,其他东西必须改变。我没有改变乙状结肠的梯度;它留在f(z)*(1-f(z))
其中f(z)
是sigmoid函数1/(1+e^(-z)))
也没有更新导数公式的数值近似;只需(J(theta+e) - J(theta-e))/(2e)
。
任何人都可以建议需要其他步骤?
在Matlab编码如下:
% FORWARD PROPAGATION
% input layer
a1 = [ones(m,1),X];
% hidden layer
z2 = a1*Theta1';
a2 = sigmoid(z2);
a2 = [ones(m,1),a2];
% output layer
z3 = a2*Theta2';
a3 = sigmoid(z3);
% BACKWARD PROPAGATION
delta3 = a3 - y;
delta2 = delta3*Theta2(:,2:end).*sigmoidGradient(z2);
Theta1_grad = (delta2'*a1)/m;
Theta2_grad = (delta3'*a2)/m;
% COST FUNCTION
J = 1/(2 * m) * sum((a3-y).^2);
% Implement regularization with the cost function and gradients.
Theta1_grad(:,2:end) = Theta1_grad(:,2:end) + Theta1(:,2:end)*lambda/m;
Theta2_grad(:,2:end) = Theta2_grad(:,2:end) + Theta2(:,2:end)*lambda/m;
J = J + lambda/(2*m)*(sum(sum(Theta1(:,2:end).^2)) + sum(sum(Theta2(:,2:end).^2)));
因为我已经意识到这一问题是类似于由@Mikhail Erofeev on StackOverflow问,然而,在这种情况下,我希望连续变量为0和1之间,并且因此使用一个sigmoid函数。
你是否使它工作,持续的结果?我让它运行,但它停止了大约40次迭代,并没有产生好的结果。如果你能分享你最终的结果,那会很棒吗? –