Encog CSV 加载异常:"Can't access column 15 in a file that has only 15 columns."



使用encog-core-cs,其汇编信息报告为3.3.0.0。

当我 EncogUtility.LoadCSV2Memory() 调用失败时,此处标题中描述的消息。

我正在为 LoadCSV2Memory() 提供似乎是正确规范化的 csv 文件,标题行下方的所有值都包含介于 0 和 0.9999 之间的浮点数......

我正在使用的规范化 csv 文件包含 15 列(在 Excel 中查看时通过列"O"),我提供数字 15 作为 LoadCSV2Memory() 的"input"参数。 这是代码行。 "normalizedTrainingFile" 是 System.IO.FileSystemInfo:

let prune() =
    let trainingSet = EncogUtility.LoadCSV2Memory(normalizedTrainingFile.FullName, 15, 1, true, CSVFormat.English, false)
    let pattern = new FeedForwardPattern(InputNeurons = 25, OutputNeurons = 1, ActivationFunction = ActivationTANH())   
    let prune = new PruneIncremental(trainingSet, pattern, 100, 1, 10, StatusReporter())
    prune.AddHiddenLayer(1, 10)
    prune.AddHiddenLayer(0, 10)
    prune.Process()
    EncogDirectoryPersistence.SaveObject(trainedNetworkFile, prune.BestNetwork)

能够通过从我提供的列数(使值为 14)中减去 1 作为 LoadCSV2Memory("count") 参数来克服这个问题,假设问题可能是基于 0 的索引与基于 1 的计数问题,但现在当我的代码执行达到......

prune.Process()

。Encog 在调用 System.Buffer.BlockCopy(...) 时抛出异常"数组的偏移量和长度超出数组或计数大于从索引到源集合末尾的元素数",该调用位于 Encog 的 EngineArray.ArrayCopy(...) 方法中。

经过几个小时的尝试逐步完成代码,我觉得如果互联网包含我滥用 Encog 框架的解决方案肯定会很好。 谢谢。

更新:这是 CSV 中的一个片段,包括标题和前 3 行数据:

"月日(p0)","月日(p1)","月日(p2)","月日(p3)","月日(p4)","月日(p5)","日月(p6)","周日(p0)","星期日(p1)","周日(p2)","周日(p3)","周日(p4)","周日(p5)","一分钟","值"0.755928946018455,-0.436435780471985,-0.308606699924184,-0.239045721866879,-0.195180014589707,-0.164957219768465,-0.142857142857143,-0.763762615825973,-0.440958551844098,-0.311804782231162,-0.241522945769824,-0.197202659436654,-0.166666666666667,-0.853658536585366,-0.9644305197198670,0.87287156094397,-0.308606699924184,-0.239045721866879,-0.195180014589707,-0.164957219768465,-0.142857142857143,0,0.881917103688197,-0.311804782231162,-0.241522945769824,-0.197202659436654,-0.166666666666667,0.114982578397212,0.389052709178032-0.755928946018455,-0.436435780471985,-0.308606699924184,-0.239045721866879,-0.195180014589707,-0.164957219768465,-0.142857142857143,0,0,0,0.966091783079296,-0.197202659436654,-0.166666666666667,0.240418118466899,0.173608551419093

如果将上面的 15 更改为 14,则代码将起作用。 该函数的参数为:

文件名输入列理想色谱柱等

输入列 + 理想列 = 文件中的总列数

因为你告诉它你有 15 个输入和 1 个理想,所以该函数总共需要 16 个。

错误消息有些不好。 如果您意识到列索引从零开始,那就更有意义了。 因此,它正在尝试读取列索引 15(实际列 16),该索引在您的文件中不存在。 我已将其添加到我的列表中以修改该错误消息。

更新以解决您的第二个问题:

收到越界错误,因为您正在尝试使用具有 14 个输入的数据集训练 25 个输入的神经元网络。 将您的图案线修改为此,它将起作用:

let pattern = new FeedForwardPattern(InputNeurons = 14, OutputNeurons = 1, ActivationFunction = ActivationTANH()) 

最新更新