2016-07-31 2 views
-2

J'apprends l'apprentissage automatique de coursera. J'essaie de calculer la fonction sigmoïde et j'ai le code ci-dessous:Calculer la fonction sigmoïde

function g = sigmoid(z) 
%SIGMOID Compute sigmoid functoon 
% J = SIGMOID(z) computes the sigmoid of z. 

% You need to return the following variables correctly 

g = zeros(size(z)); 

% ====================== YOUR CODE HERE ====================== 

% Instructions: Compute the sigmoid of each value of z (z can be a matrix, 
%    vector or scalar). 



g = (1 + exp(-1 * z)) .^ -1; 
g = 1/(1+ (1/exp(z))) 


% my question is why the first g calculation works for matrix(say 100*2) however the second only works for (100*1) as both are trying to do the same this. 


% ============================================================= 

end 

Répondre

0

.^Travaille pour chaque élément de la matrice./ne fait pas. ./ pourrait (bien que vous pourriez avoir besoin de faire certaines des 1 matrices de 1)

0

vous devez utiliser pour les boucles pour appliquer la fonction sigmoïde à chaque élément de vecteur ou de matrice.

2

Bonne réponse

rt=-z; %changing sign of z 
rt=rt'; %transposing matrix 

g=1./(1+e.^(rt)); %you need to use dot(.) while dividing and also while finding power to apply those operation for every element in the matrix. 

réponse à votre question

1.g = (1 + exp(-1 * z)) .^ -1; 
2.g = 1/(1+ (1/exp(z)))   

vous avez manqué l'opérateur point (.) En deuxième fonction de division et de première fonction pour exp().

2

Ce que vous pouvez essayer est de tirer parti des opérations sur les éléments (plus d'informations de la documentation officielle Octave here).

Notez que les opérations élémentaires:

Lorsque vous avez deux matrices de même taille, vous pouvez effectuer élément par des opérations d'éléments sur les

Alors que g défini et z sont des de la même taille, le code ci-dessous devrait retourner la fonction Sigmoïde.

g = (g.+1)./(1 + e.^-z); 

Donc, essentiellement, il fait 2 choses simples. Tout d'abord, il transforme la matrice de zéros ou scalaire en un avec ceux "1". Puis il divise chaque élément par (1 + e z) pour chaque élément correspondant.