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

时间:2016-09-15 23:30:56

标签: csv encog

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

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

然后我有两个选择:

使用EncogModel

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 Model)设置层数,神经元和激活函数。我得到的只是一些默认的前馈网络,只有一个隐藏层。

我不知道如何从VersatileMLDataSet为我自己的网络(第二个选项)单独输入和输出数组。我可以得到整个数组(输入+输出),但必须有一种方法如何只获得输入数组或输出数组。

1 个答案:

答案 0 :(得分:3)

我在文档中找到了答案( Encog Method& Training Factories,第75页),EncogModel可以像这样自定义网络:

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

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