オーケー連続出力変数のシグモイド活性化関数ので、私はAndrew Ng's machine learning course on courseraの途中で午前割り当て特に4ニューラルネットワーク:
、ニューラルネットワークの一部として完成させたニューラルネットワークを適応したいと思いますこれは私は、割り当ての一部として正しく完了した以下の通りであった:
- シグモイド活性化関数:0または1
- 1 HIを取ることができる
g(z) = 1/(1+e^(-z))
- 10出力部、各
L=number of layers
、s_l = number of units in layer l
、m = number of training examples
、K = number of output units
は今、私は運動を調整したい
:コスト関数
- を持っています-propagation algorithm to: ここで、
a_3
は、順方向伝搬から決定された出力単位の値です。
グラジエントチェック方法がバックプロパゲーションによって決定された勾配を示し、数値近似がもはや一致しなくなるため、何かが変更されなければならないことは確かです。私はシグモイドグラジエントを変更しませんでした。 f(z)*(1-f(z))
に残されます。ここで、f(z)
はシグモイド関数1/(1+e^(-z)))
です。また、微分方程式の数値近似を更新しませんでした。単純に(J(theta+e) - J(theta-e))/(2e)
です。
他にどのような手順が必要なのかアドバイスできますか?次のようにMATLABでコード化
:私がので、この問題は、@Mikhail Erofeev on StackOverflowにより求めたものと同様であることを認識した
% 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)));
が、しかし、この場合、I 0と1の間であり、したがって、使用する連続変数を希望シグモイド関数
継続的な結果を得るには、それを機能させましたか?私はそれを走らせましたが、約40回の反復を止め、良い結果を生むことはありません。あなたが終わったものを分かち合うことができれば素晴らしいだろうか? –