Encog 使用自定义网络加载 CSV 文件

2024-06-25

我想从 CSV 文件加载数据,如下所示:

var format = new CSVFormat('.', ' '); 
IVersatileDataSource source = new CSVDataSource(filename, false, format);
var data = new VersatileMLDataSet(source); ...

那么我有两个选择:

使用Encog模型

var model = new EncogModel(data);
model.SelectMethod(data, MLMethodFactory.TypeFeedforward); ...

建立自己的网络

var network = new BasicNetwork();
network.AddLayer(new BasicLayer(null, true, 11));
network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, 8));
network.AddLayer(new BasicLayer(new ActivationTANH(), true, 5)); 
...
IMLDataSet trainingSet = new BasicMLDataSet(input, output);

我不知道如何使用第一个选项(Encog 模型)设置层数、神经元和激活函数。我得到的只是一些仅具有一个隐藏层的默认前馈网络。


我不知道如何从 VersatileMLDataSet 轻松地分别为我自己的网络(第二个选项)获取输入和输出数组。我可以获取整个数组(输入+输出),但必须有一种方法如何仅获取输入数组或输出数组。


我在文档中找到了答案(Encog 方法和培训工厂,第 75 页),使用 EncogModel 可以像这样自定义网络:

var methodFactory = new MLMethodFactory();
var method = methodFactory . Create(
MLMethodFactory .TYPEFEEDFORWARD,
”?:B−>SIGMOID−>4:B−>SIGMOID−>?”,
2,
1);

上面的代码创建了一个具有两个输入神经元和一个 输出神经元。有四个隐藏神经元。偏置神经元被放置 在输入层和隐藏层上。正如神经网络的典型特征一样, 输出层上没有偏置神经元。乙状结肠激活 函数也用在输入神经元和隐藏神经元之间 隐藏层和输出层之间。你可能会注意到两个问题 神经网络架构字符串中的标记。这些都会被填满 由创建方法中指定的输入和输出层大小决定 并且是可选的。您可以对输入和输出大小进行硬编码。在 在这种情况下,创建调用中指定的数字将被忽略。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Encog 使用自定义网络加载 CSV 文件 的相关文章

随机推荐