3

私は機械学習と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();
    }
}
4

1 に答える 1

5

ニューラルネットワークの重みがランダムな値に初期化されることはかなり一般的であり、これは決定性をすぐに台無しにします。したがって、再現性のある結果を得るには、ランダムな初期の重みが好きなネットワークの特定のインスタンスを保存し、それを開始点として他の実行にロードする必要があります。

この場合、basicNetworkが保存され(おそらくcreatePersistor()を使用してXMLにシリアル化されます)、新しいものを最初から作成するのではなく、後でリセットするたびにリロードします。

試すことができるもう1つのテストは、basicNetwork.clone()を使用してから、両方で実験を実行して、結果がどのようになるかを確認することです。

リンク:

于 2012-11-21T08:23:13.677 に答える