【问题标题】:Octave error: element undefined in return list八度错误:返回列表中未定义的元素
【发布时间】:2018-08-08 03:23:51
【问题描述】:

我正在编写以下八度代码:

function p = predict(Theta1, Theta2, X)
m = size(X, 1);
num_labels = size(Theta2, 1);
global a=zeros(size(Theta2, 2), m);
global delta=zeros(m, 1);

p = zeros(size(X, 1), 1);

X=[ones(size(X,1),1) X];
a=sigmoid(Theta1*X');
a=[ones(1,size(X,1));a];
[delta p]=max(sigmoid(Theta2*a))';

它给了我错误:“返回列表中未定义的元素号 2”。 当我在最后一行中使用 delta 存储最大值时会发生错误。 我搜索了很多,但找不到任何相关的答案。

【问题讨论】:

标签: octave


【解决方案1】:

线

[delta p] = max( sigmoid( Theta2*a ) )'; # transpose operator over the result

等价于

[delta p] = transpose( max( sigmoid( Theta2*a ) ); # transpose function over the result

这意味着您正在尝试从此转置操作中获得“双输出”结果,但该操作失败,因为转置功能仅返回一个输出,因此 octave 通知您它无法在 ' 中找到第二个输出结果列表。

大概你打算按照以下方式做某事:

[delta p] = max( sigmoid( Theta2*a )' );

并且放错了转置运算符,或者您实际上确实想要将最大值及其索引作为列向量获取,在这种情况下,您需要分两步执行此操作,即

[delta p] = max( sigmoid( Theta2*a ) );
ColVector = [delta p]';

PS。顺便说一句,您应该使用.' 而不是' 作为转置运算符。 ' 不是转置运算符,而是“共轭转置”运算符。

【讨论】:

  • 谢谢。我用这个 [delta p]=max(sigmoid(Theta2*a)',[],2); 解决了它我认为错误是由于某种方式的最大功能。但你的解释消除了我的困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多