Costul funcția de calcul pentru rețele neuronale

0

Problema

Eu sunt in saptamana 5 de Andrew Ng Masina Curs de Învățare pe Coursera. Am de lucru prin cesiunea de programare în Matlab pentru această săptămână, și am ales să folosesc o buclă pentru punerea în aplicare a calcula costul J. Aici este funcția mea.

function [J grad] = nnCostFunction(nn_params, ...
                                   input_layer_size, ...
                                   hidden_layer_size, ...
                                   num_labels, ...
                                   X, y, lambda)
%NNCOSTFUNCTION Implements the neural network cost function for a two layer
%neural network which performs classification
%   [J grad] = NNCOSTFUNCTON(nn_params, hidden_layer_size, num_labels, ...
%   X, y, lambda) computes the cost and gradient of the neural network. The
%   parameters for the neural network are "unrolled" into the vector
%   nn_params and need to be converted back into the weight matrices. 

% Reshape nn_params back into the parameters Theta1 and Theta2, the weight matrices
% for our 2 layer neural network

Theta1 = reshape(nn_params(1:hidden_layer_size * (input_layer_size + 1)), ...
                 hidden_layer_size, (input_layer_size + 1));

Theta2 = reshape(nn_params((1 + (hidden_layer_size * (input_layer_size + 1))):end), ...
                 num_labels, (hidden_layer_size + 1));


% Setup some useful variables
m = size(X, 1);

% add bias to X to create 5000x401 matrix
X = [ones(m, 1) X];
         
% You need to return the following variables correctly 
J = 0;
Theta1_grad = zeros(size(Theta1));
Theta2_grad = zeros(size(Theta2));


% initialize summing terms used in cost expression
sum_i = 0.0;

% loop through each sample to calculate the cost
for i = 1:m

    % logical vector output for 1 example
    y_i = zeros(num_labels, 1);
    class = y(m);
    y_i(class) = 1;
    
    % first layer just equals features in one example 1x401
    a1 = X(i, :);
    
    % compute z2, a 25x1 vector
    z2 = Theta1*a1';
    
    % compute activation of z2
    a2 = sigmoid(z2);
    
    % add bias to a2 to create a 26x1 vector
    a2 = [1; a2];
    
    % compute z3, a 10x1 vector
    z3 = Theta2*a2;
    
    %compute activation of z3. returns output vector of size 10x1
    a3 = sigmoid(z3);
    h = a3;
    
    % loop through each class k to sum cost over each class
    for k = 1:num_labels        
        
        % sum_i returns cost summed over each class
        sum_i = sum_i + ((-1*y_i(k) * log(h(k))) - ((1 - y_i(k)) * log(1 - h(k))));
        
    end
        
end

J = sum_i/m;

Am înțeles că un vectorized implementaion de acest lucru ar fi mai ușor, dar eu nu înțeleg de ce această punere în aplicare este greșit. Când num_labels = 10, această funcție ieșiri J = 8.47, dar costul preconizat este 0.287629. Am calculat J din această formulă. Sunt neînțelegere calcul? Înțelegerea mea este că fiecare antrenament exemplu de cost pentru fiecare dintre cele 10 clase sunt calculate atunci costul pentru toate cele 10 clase pentru fiecare exemplu se însumează. Este că incorecte? Sau nu pune în aplicare acest lucru în codul corect? Mulțumesc în avans.

2
0

problema este în formulă sunt de punere în aplicare

această expresie ((-1*y_i(k) * log(h(k))) - ((1 - y_i(k)) * log(1 - h(k)))); reprezintă pierderea în cazul în binar de clasificare pentru că ai fost pur și simplu au 2 clase deci fie

  1. y_i is 0 so (1 - yi) = 1
  2. y_i is 1 so (1 - yi) = 0

deci, practic, se ia în considerare numai tinta clasa de probabilitate.

cum vreodată în caz de 10 etichete ca ai mentionat (y_i) sau (1 - yi) nu este necesar de una dintre ele să fie 0 și celălalt să fie de 1

tu ar trebui să corecteze funcția de pierdere în aplicare, astfel încât să se ia în considerare probabilitatea de clasa țintă nu numai toate celelalte clase.

2021-11-22 23:54:56
0

Problema mea este cu indexarea. Mai degrabă decât a spune class = y(m) ar trebui să fie class = y(i) deoarece i este indicele și m este de 5000 de numărul de rânduri în datele de antrenament.

2021-11-23 03:53:01

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................