Matlab 神经网络 - 与divideFcn 一样的divideblock 出现问题

标签 matlab neural-network

我正在使用 Matlab 的 NN 工具箱使用层循环网络 (layrecnet) 进行时间序列预测,其中 layerDelays = 1:2hiddenSize = 5 (我对一个隐藏层使用了一些其他尺寸,具有类似的结果)。我修改了网络以接受多个输入(最多 5 或 10 个)以及对 net.inputConnect 的相关更改,并且它有效(也就是说,我可以训练它并获得良好的结果)。

一旦我将 divideFcn 从默认值更改为 divideblock,它就不再起作用,在运行 train 函数时出现此错误:

Error in divideblock>divide_indices (line 108)
  testInd = (1:numTest)+valInd(end);

Error in divideblock (line 65)
    [out1,out2,out3] = divide_indices(in1,params);

Error in nntraining.setup (line 176)
      [trainInd,valInd,testInd] =
      feval(net.divideFcn,Q,net.divideParam);

Error in network/train (line 292)
    [net,rawData,tr,err] =
    nntraining.setup(net,net.trainFcn,X,Xi,Ai,T,EW,~isGPUArray);

通过 Debug模式,我发现valInd是一个空数组,它是由(内置)nntraining.setup中的一个值Q确定的() 函数。 Q 由另一个函数 (nntraining.config) 设置,我无权访问该函数。现在,显然我不相信这些函数中存在错误,但我试图通过追溯问题来找到错误。现在我已经碰壁了。

这可以归结为 2 个问题

  1. 我想使用 divideblock 而不是 dividerand 因为我希望层延迟能够利用信号的时间结构(它是高度周期性的 - 腿部关节角度)行走时)。我是否错误地认为 dividerand 将无法利用这种时间结构?

  2. train 函数与 divideblock 交互的方式是否有一些特殊之处,这意味着我需要更改数据格式?

    <

非常感谢!

最佳答案

问题出在网络的 divideMode 参数上。静态网络的默认值为'sample',动态网络的默认值为'time'。我还没有找到关于两者之间区别的明确解释,但是当我初始化一个layrecnet(一个层循环网络,据说是一个动态网络)时,它会初始化为'示例' 而不是'时间'。因此,它没有将数据分为训练集、验证集和测试集,而是对整个输入进行训练。在安装过程中手动更改该值解决了问题。

来自工具箱文档:

This property defines the target data dimensions which to divide up when the data division function is called.

就时间序列数据而言,这似乎与跨时间与跨试验的划分相关,可以这么说。也就是说,如果数据作为一组并发试验输入(“并发”和“顺序”是神经网络输入的数据类型),并且 divideMode 设置为 'sample',它将选择一个试验子集进行训练、验证和测试。如果有人看到此内容并且可以提供更清晰的解释,请这样做。

关于Matlab 神经网络 - 与divideFcn 一样的divideblock 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22778919/

相关文章:

machine-learning - 训练神经网络时对批量数据进行混洗

python - 如何计算损失梯度 w.r.t 以模拟 Keras 模型中的输入?

python - GAN 生成完全相同的图像跨批处理只是因为种子分布,为什么?

python - RNN 从哪里获取批量大小?

matlab - 错误 : Output Argument Not Assigned During Call

python - 用神经网络和 ReLU 逼近正弦函数

matlab - 如何 reshape 和交错矩阵元素?

matlab - 以分钟为单位绘制格式化时间 (min.sec)

matlab - 这个 MATLAB 代码是如何工作的? (概率和随机序列)

大量高斯混合模型的MATLAB代码