我正在编写以下八度代码:
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在返回列表中未定义”。 当我在最后一行中使用增量来存储最大值时,会发生错误。 我已经搜索了很多,但是找不到任何相关的答案。
答案 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。顺便说一句,您应该使用.'
而不是'
作为转置运算符。 '
不是转置运算符,它是“共轭转置”运算符。