Переменная «Z» не определена, когда используется для представления матрицы сигмоидальной функции - PullRequest
0 голосов
/ 26 марта 2019

Я учусь в средней школе, и я только начал заниматься машинным обучением, чтобы углубить свои знания в области кодирования. Я опробовал программу Octave и работал с неврологическими сетями или, по крайней мере, пытался. В моей первой программе, однако, я уже оказался в тупике с моей функцией градиента сигмоида. Когда я пытаюсь заставить функцию работать для каждого значения в матрице, я понятия не имею, как это сделать. Я попытался поместить z в качестве параметра функции, но он говорит, что само z не определено. У меня нет знаний о C или C ++, и я все еще любитель в этой области, поэтому извините, если я потрачу некоторое время, чтобы понять. Спасибо всем, кто предлагает помощь!

Я использую Octave 4.4.1, и я еще не пробовал никакого другого решения, поскольку у меня его нет.

% Main Code
    g = sigGrad([-2 -1 0 1 2]);
% G is supposed to be my sigmoid Gradient for each value of Theta, which is the matrix within it's parameters.
% Sigmoid Gradient function
    function g = sigGrad(z)
    g = zeros(size(z));
% This is where the code tells me that z is undefined
    g = sigmoid(z).*(1.-sigmoid(z));
% I began by initializing a matrix of zeroes with the size of z
% It should later do the Gradient Equation, but it marks z as undefined before that
% Sigmoid function
    g = sigmoid(z)
    g = 1.0 ./ (1.0 + exp(-z));

1 Ответ

0 голосов
/ 01 апреля 2019

Из того, что я вижу, я вижу, что вы допускаете простые синтаксические ошибки, я бы рекомендовал сначала получить представление о октаве, а не углубляться в кодовый заголовок. При этом вы должны объявить свои функции с правильным синтаксисом и использовать их, как показано ниже:

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

g = 1.0 ./ (1.0 + exp(-z));
end

А другой кусок кода должен быть

function g = sigGrad(z)
%   sigGrad returns the gradient of the sigmoid function evaluated at z
%   g = sigGrad(z) computes the gradient of the sigmoid function evaluated at z. 
%   This should work regardless if z is a matrix or a vector.
%   In particular, if z is a vector or matrix, you should return the gradient for each element.

g = zeros(size(z));

g = sigmoid(z).*(1 - sigmoid(z));

end

И, наконец, вызовите выше реализованные функции, используя:

g = sigGrad([1 -0.5 0 0.5 1]);
...