0

我正在从 coursera 学习机器学习。我正在尝试计算 sigmoid 函数,并且我有以下代码:

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
4

9 回答 9

8

Sigmoid 函数g(z)=1/(1+e^(-z))

在八度音程中看起来像

g = 1./(1 + exp(-z));
于 2018-06-27T10:19:25.407 回答
6

正确答案

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.

回答你的问题

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

您在除法的第二个函数和 exp() 的第一个函数中错过了点运算符(。)。

于 2017-05-13T17:40:12.017 回答
3

您可能想要尝试的是利用元素操作(更多信息来自 Octave 官方文档

请注意,使用元素操作:

当您有两个相同大小的矩阵时,您可以对它们执行逐个元素的操作

所以定义的 g 和 z 大小相同,下面的代码应该返回 Sigmoid 函数。

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

所以本质上,它做了两件简单的事情。首先,它将零矩阵或标量变成一个“1”。然后它将每个元素与每个对应元素的 (1 + e z ) 相除。

于 2017-08-27T18:02:20.757 回答
0

在后一种情况下,您尝试将多维矩阵与 1 相乘(除法的逆),这实际上是一个一对一的矩阵。因此,对于具有多于一列的矩阵,它将导致“矩阵尺寸必须一致”错误。

于 2018-08-07T12:02:25.027 回答
0

.^ 适用于矩阵中的每个元素。/ 才不是。./ 可能(尽管您可能需要制作一些 1 的矩阵)

于 2016-07-31T03:24:51.840 回答
0
function g = sigmoid(z)
%SIGMOID Compute sigmoid function
%   g = SIGMOID(z) computes the sigmoid of z.

% You need to return the following variables correctly 
g = zeros(length(z),1);

for  i = 1:100,
  g(i) = 1/(1 + exp(-z(i)));

end
于 2018-10-19T19:39:09.013 回答
0

您需要使用 for 循环将 sigmoid 函数应用于向量或矩阵的每个元素。

于 2017-03-11T06:02:16.017 回答
0

以下是 Octave 中的实现:

请在文件名中添加以下代码sigmoid.m

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

以下是Vector上述实现的示例:

>> A = [1;2;3]
A =

   1
   2
   3

>> sigmoid(A)
ans =

   0.73106
   0.88080
   0.95257

以下是Scalar上述实现的示例:

>> sigmoid(0)
ans =  0.50000
于 2020-06-13T10:14:31.487 回答
0

好吧,你可以这样:

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

将 1 变成一个维度为 z/g 的数组,然后计算 sigmoid。

于 2021-07-24T03:37:41.990 回答