इसलिए अभी मैं डीप लर्निंग 4j विशेष रूप से RL4j और रीइन्फोर्समेंट लर्निंग का उपयोग करके डीप लर्निंग की खोज का दर्दनाक गोता लगा रहा हूं। मैं अपने कंप्यूटर को सांप खेलना सिखाने में अपेक्षाकृत असफल रहा हूं लेकिन मैं दृढ़ हूं।

वैसे भी, मैं एक समस्या में भाग रहा हूं जिसे मैं हल नहीं कर सकता, जब मैं सो रहा हूं या काम पर हूं तो मैं अपना कार्यक्रम चलाने के लिए सेट करूंगा (हां मैं एक आवश्यक उद्योग में काम करता हूं) और जब मैं वापस जांचता हूं तो यह फेंक दिया जाता है सभी चल रहे धागे पर त्रुटि और कार्यक्रम पूरी तरह से बंद हो गया है, ध्यान रखें कि यह आमतौर पर प्रशिक्षण में लगभग एक घंटे तक होता है।

Exception in thread "Thread-8" java.lang.RuntimeException: Output from network is not a probability distribution: [[         ?,         ?,         ?]]
at org.deeplearning4j.rl4j.policy.ACPolicy.nextAction(ACPolicy.java:82)
at org.deeplearning4j.rl4j.policy.ACPolicy.nextAction(ACPolicy.java:37)
at org.deeplearning4j.rl4j.learning.async.AsyncThreadDiscrete.trainSubEpoch(AsyncThreadDiscrete.java:96)
at org.deeplearning4j.rl4j.learning.async.AsyncThread.handleTraining(AsyncThread.java:144)
at org.deeplearning4j.rl4j.learning.async.AsyncThread.run(AsyncThread.java:121)

यहां बताया गया है कि मैं अपना नेटवर्क कैसे स्थापित कर रहा हूं

    private static A3CDiscrete.A3CConfiguration CARTPOLE_A3C =
        new A3CDiscrete.A3CConfiguration(
                (new java.util.Random()).nextInt(),            //Random seed
                220,            //Max step By epoch
                500000,         //Max step
                6,              //Number of threads
                50,              //t_max
                75,             //num step noop warmup
                0.1,           //reward scaling
                0.987,           //gamma
                1.0           //td-error clipping
        );


private static final ActorCriticFactorySeparateStdDense.Configuration CARTPOLE_NET_A3C =  ActorCriticFactorySeparateStdDense.Configuration
.builder().updater(new Adam(.005)).l2(.01).numHiddenNodes(32).numLayer(3).build();

इसके अलावा मेरे नेटवर्क का इनपुट मेरे स्नेक गेम 16x16 के लिए एक सिंगल डबल ऐरे में संपूर्ण ग्रिड है।

अगर इसका मेरे इनाम समारोह से कुछ लेना-देना है तो यहाँ यह है

if(!snake.inGame()) {
        return -5.3; //snake dies 
    }
    if(snake.gotApple()) {
        return 5.0+.37*(snake.getLength()); //snake gets apple
    }
    return 0; //survives

मेरा प्रश्न है इस त्रुटि को होने से कैसे रोकें? मुझे वास्तव में पता नहीं है कि क्या हो रहा है और यह मेरे नेटवर्क के निर्माण को कठिन बना रहा है, हां मैंने पहले ही जवाब के लिए वेब की जांच कर ली है जो कि 2018 से 2 गिटहब टिकट की तरह है।

यदि यह रुचि का है तो आपको यहां खुदाई करने की आवश्यकता नहीं है, एसीपॉलिसी का कार्य है जो त्रुटि फेंक रहा है

 public Integer nextAction(INDArray input) {
    INDArray output = actorCritic.outputAll(input)[1];
    if (rnd == null) {
        return Learning.getMaxAction(output);
    }
    float rVal = rnd.nextFloat();
    for (int i = 0; i < output.length(); i++) {
        //System.out.println(i + " " + rVal + " " + output.getFloat(i));
        if (rVal < output.getFloat(i)) {
            return i;
        } else
            rVal -= output.getFloat(i);
    }

    throw new RuntimeException("Output from network is not a probability distribution: " + output);
}

आप जो भी मदद की पेशकश कर सकते हैं उसकी बहुत सराहना की जाती है

0
Austin 26 मार्च 2020, 17:13

1 उत्तर

सबसे बढ़िया उत्तर

आप जो देख रहे हैं वह यह है कि आपका नेटवर्क NaN में चल रहा है। अपवाद में प्रश्नवाचक चिन्ह का यही अर्थ है। ऐसा होने के कई कारण हो सकते हैं। आप कहते हैं, आप इसे काफी समय से चला रहे हैं, इसलिए हो सकता है कि आप किसी बिंदु पर अंडर- या ओवरफ्लो हो जाएं। कुछ नियमितीकरण मदद कर सकता है या कुछ ढाल क्लिपिंग कर सकता है।

हालाँकि, RL4J को ही बीटा 6 के रूप में फिर से काम किया जा रहा है और अगली रिलीज़ में पूरी तरह से बेहतर स्थिति में होना चाहिए।

यदि आप वर्तमान स्थिति को आज़माना चाहते हैं, तो ऐसे स्नैपशॉट हैं जिनका आप उपयोग कर सकते हैं और https://github.com/RobAltena/cartpole/blob/master/src/main/java/A3CCartpole.java

कुछ और गहन सहायता के लिए, आपको शायद DL4J समुदाय फ़ोरम पर एक नज़र डालनी चाहिए कम्युनिटी.konduit.ai । यह आगे और पीछे के लिए अधिक अनुकूल है जो आपके सांप के खेल के लिए एक सफल एआई बनाने में आपकी मदद करने के लिए आवश्यक है।

2
Paul Dubs 26 मार्च 2020, 15:11