我在Coursera学习机器学习课程,并正在做神经网络的练习。我的代码在本地可以运行并返回正确答案,但在Octave中提交时显示错误。
图片显示成本值是正确的。但当我提交时,答案显示如下:
这意味着y
超出了范围,在我的脚本中y
是5000个样本的标签,它应该有5000行,y
发生了什么,为什么在本地运行时没有出现这个问题。
文件在这里:ex4,nncostfunction
回答:
虽然练习本身假设有5000个观测值,但在提交时评估你的代码时使用了更少的观测值。
你在代码中硬编码了数字5000,而不是使用一个变量来捕获观测值的数量(代码中可能是m
)。因此,在你的for循环中,一旦超过16(这可能是提交环境中使用的观测值数量),Octave会抱怨你试图访问一个对于那个特定数组未定义的索引。
简而言之,你应该使用for i = 1:m
而不是for i = 1:5000
,这样你的代码可以适应不同于5000的样本大小。