ठीक है के लिए अवग्रह सक्रियण समारोह, तो मैं 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)
सिग्मोइड फ़ंक्शन 1/(1+e^(-z)))
है और न ही मैंने व्युत्पन्न सूत्र के संख्यात्मक अनुमान को अद्यतन किया है; बस (J(theta+e) - J(theta-e))/(2e)
।
क्या कोई अन्य सलाह दे सकता है कि अन्य कदमों की आवश्यकता होगी?
मैटलैब में कोडित इस प्रकार है:
% 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 का उपयोग निरंतर चर होना चाहते है एक सिग्मोइड समारोह।
क्या आपने लगातार परिणाम के लिए इसे काम किया है? मैंने इसे चलाया लेकिन यह लगभग 40 वें पुनरावृत्ति को रोकता है और अच्छा परिणाम नहीं देता है। अगर आप जो कुछ भी समाप्त कर सकते हैं उसे साझा कर सकते हैं तो अच्छा होगा? –