java – Encog Neural Network总是会产生不一致的结果
作者:互联网
我是机器学习和整体Encog的新手,但我希望Encog能够至少从示例中得到一致的结果,以帮助我更轻松地学习Encog.对我来说,Encoge每次运行时都会给出不同的方向性结果.
谁能帮助我更好地理解为什么会这样?下面是一些正在使用的修改后的示例代码.
方向正确:10/25
方向正确:8/25
方向正确:6/25
…
public class MainPredict {
public static void main(String[] args) {
Co.println("--> Main Predict");
final MarketLoader marketLoader = new YahooFinanceLoader();
final MarketMLDataSet marketDataSet = new MarketMLDataSet(marketLoader, Config.INPUT_WINDOW, Config.PREDICT_WINDOW);
final MarketDataDescription marketDataDescription = new MarketDataDescription(Config.TICKER, MarketDataType.adjusted_close, true, true);
marketDataSet.addDescription(marketDataDescription);
Calendar end = new GregorianCalendar();// end today
Calendar begin = (Calendar) end.clone();// begin 30 days ago
begin.add(Calendar.DATE, -60);
end.add(Calendar.DATE, -60);
begin.add(Calendar.YEAR, -2);
marketDataSet.load(begin.getTime(), end.getTime());
marketDataSet.generate();
BasicNetwork basicNetwork = EncogUtility.simpleFeedForward(marketDataSet.getInputSize(), Config.HIDDEN1_COUNT, Config.HIDDEN2_COUNT, marketDataSet.getIdealSize(), true);
ResilientPropagation resilientPropagation = new ResilientPropagation(basicNetwork, marketDataSet);
resilientPropagation.setRPROPType(RPROPType.iRPROPp);
// EncogUtility.trainToError(resilientPropagation, 0.00008);
EncogUtility.trainConsole(basicNetwork, marketDataSet, 3);
System.out.println("Final Error: " + basicNetwork.calculateError(marketDataSet));
MarketEvaluate.evaluate(basicNetwork);
Encog.getInstance().shutdown();
}
}
解决方法:
神经网络权重被初始化为随机值是很常见的,这几乎可以预先确定性.因此,为了获得可重复的结果,您需要保存您喜欢的随机初始权重的网络的特定实例,然后将其作为起点加载到其他运行中.
在这种情况下,basicNetwork将是保存的(可能使用createPersistor()来序列化为XML),然后每次你以后想要重置它时重新加载,而不是从头开始构建一个新的.
您可以尝试的另一个测试是使用basicNetwork.clone(),然后对它们进行实验,看看结果如何.
链接:
> http://www.heatonresearch.com/javadoc/encog-2.3/org/encog/neural/networks/BasicNetwork.html#clone%28%29
> http://www.heatonresearch.com/javadoc/encog-2.3/org/encog/persist/Persistor.html
标签:encog,java 来源: https://codeday.me/bug/20190901/1785003.html