“Z”变量在表示Sigmoid函数的矩阵时未定义

我是一名高中生,刚开始学习机器学习以加深我的编程知识。我尝试使用Octave软件,并开始接触神经网络,至少是尝试着接触。在我的第一个程序中,我就遇到了Sigmoid梯度函数的难题。当我试图让函数对矩阵中的每个值都生效时,我不知道该怎么做。我尝试将z作为函数的参数,但系统提示“z”本身未定义。我对C或C++一无所知,在这个领域我还是个新手,所以如果我需要一些时间来理解,请见谅。感谢任何愿意提供帮助的人!

我正在使用Octave 4.4.1,我还没有尝试过其他解决方案,因为我实在是没有什么其他办法。

% 主代码    g = sigGrad([-2 -1 0 1 2]);% G应该是Theta的每个值的Sigmoid梯度,Theta是其参数中的矩阵。
% Sigmoid梯度函数    function g = sigGrad(z)    g = zeros(size(z));% 代码在这里告诉我z未定义    g = sigmoid(z).*(1.-sigmoid(z));% 我首先用z的大小初始化了一个零矩阵% 之后应该进行梯度方程的计算,但在之前就标记z未定义
% Sigmoid函数    g = sigmoid(z)    g = 1.0 ./ (1.0 + exp(-z));

回答:

从我所看到的,你犯了一些简单的语法错误,我建议你先了解Octave的基本知识,然后再深入代码。尽管如此,你必须使用正确的语法来声明你的函数,并像下面展示的那样使用它们:

function g = sigmoid(z)%   SIGMOID 计算Sigmoid函数%   J = SIGMOID(z) 计算z的Sigmoid值。g = 1.0 ./ (1.0 + exp(-z));end

另一段代码应该是这样的:

function g = sigGrad(z)%   sigGrad 返回在z处计算的Sigmoid函数的梯度%   g = sigGrad(z) 计算在z处评估的Sigmoid函数的梯度。%   无论z是矩阵还是向量,这都应该有效。%   特别是,如果z是向量或矩阵,你应该返回每个元素的梯度。g = zeros(size(z));g = sigmoid(z).*(1 - sigmoid(z));end

然后,最后使用以下方式调用上述实现的函数:

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

Related Posts

为什么我们在K-means聚类方法中使用kmeans.fit函数?

我在一个视频中使用K-means聚类技术,但我不明白为…

如何获取Keras中ImageDataGenerator的.flow_from_directory函数扫描的类名?

我想制作一个用户友好的GUI图像分类器,用户只需指向数…

如何查看每个词的tf-idf得分

我试图了解文档中每个词的tf-idf得分。然而,它只返…

如何修复 ‘ValueError: Found input variables with inconsistent numbers of samples: [32979, 21602]’?

我在制作一个用于情感分析的逻辑回归模型时遇到了这个问题…

如何向神经网络输入两个不同大小的输入?

我想向神经网络输入两个数据集。第一个数据集(元素)具有…

逻辑回归与机器学习有何关联

我们正在开会讨论聘请一位我们信任的顾问来做机器学习。一…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注