Попытка создать нейронную сеть с регрессией и потерей всегда является «нулевой» - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь создать нейронную сеть (с ml5. js), которая может оценить, является ли движение правильным или неправильным как проект. Я сократил код, пытаясь найти то, что пошло не так, пока у меня не было этого. Потеря, как только я начинаю тренироваться, всегда равна нулю. Погуглив вокруг, я попытался изменить потерю модели, скорость обучения, функцию активации, и я изменил ввод на строго 1 и 0, но я не могу понять, что я делаю неправильно.

<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="utf-8">
</head>
<body id="body">
    <script src="https://cdn.jsdelivr.net/npm/p5@1.0.0/lib/p5.js"></script>
    <script src="https://unpkg.com/ml5@0.4.3/dist/ml5.min.js"></script>
    <button id="startTheTraining">Train</button>
    <br><button id="addTrainingData">Add Training Data</button>
    <script>
        let trainingData = [1,1,1,1,0,0,0,0,0];
        let nn;
        let nn_options;
        nn_options = {
            debug: true,
            inputs: 9,
            outputs: 1,
            modelLoss: 'meanSquaredError',
            optimizer: 'adam',
            learningRate: 0.02,
            task: 'regression',
            layers: [
                ml5.tf.layers.dense({
                    units: 9,
                    inputShape: [9],
                    activation: 'relu',
                }),
                ml5.tf.layers.dense({
                    units: 100,
                    activation: 'relu',
                }),
                ml5.tf.layers.dense({
                    units: 100,
                    activation: 'relu',
                }),
                ml5.tf.layers.dense({
                    units: 1,
                    activation: 'softmax',
                })
            ]
        };

        function setup() {
            nn = ml5.neuralNetwork(nn_options);
            noLoop();
        }

        function fetchGameAndTrain() {
            createTrainingData();
            nn.normalizeData();
            console.log("Finished adding training data.");
            console.log(nn);
        }

        document.getElementById("addTrainingData").addEventListener("click", fetchGameAndTrain);

        function createTrainingData() {
            for(let i = 0; i < 10; i++){
                nn.addData(trainingData, [0]);
            }
        }

        function finishedTraining() {
            console.log('Training has been finished!');
            let testArr = trainingData; 
            nn.predict(testArr, gotResults);
        }

        document.getElementById("startTheTraining").addEventListener("click", startTraining);
        function startTraining() {
            const trainingOptions = {
                batchSize: 128,
                epochs: 100
            }
            nn.train(trainingOptions, whileTraining, finishedTraining);
        }

        function whileTraining(epoch, loss) {
            console.log(loss);
        }
        function gotResults(error, results) {
            if (error) {
                console.error(error);
                return;
            }
            console.log(results);
        }
    </script>
</body>
</html>
...