0

我是一名高中生,我刚刚开始学习机器学习以进一步了解我的编码知识。我试用了 Octave 程序并一直在使用神经网络,或者至少尝试过。然而,在我的第一个程序中,我发现我的 Sigmoid 梯度函数陷入了僵局。当我尝试使函数对矩阵中的每个值起作用时,我不知道该怎么做。我尝试将 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));
4

1 回答 1

0

从我所见,我发现您犯了简单的语法错误,我建议您先了解 octave 的要点,而不是直接深入研究代码。话虽如此,您必须使用正确的语法声明您的函数并使用它们,如下所示:

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]);
于 2019-04-01T06:51:23.707 回答