八度错误:返回列表中的元素未定义

时间:2018-08-08 03:23:52

标签: octave

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

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在返回列表中未定义”。 当我在最后一行中使用增量来存储最大值时,会发生错误。 我已经搜索了很多,但是找不到任何相关的答案。

1 个答案:

答案 0 :(得分: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 )' );

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

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

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