TensorFlow.js быстрее с отключенным аппаратным ускорением (Chrome) - PullRequest
1 голос
/ 04 мая 2019

Я учусь использовать библиотру tenorflow.js и написал супер простой скрипт.

    var NN = new NeuralNetwork(1);
    NN.addLayer(4);
    NN.addLayer(1);
    NN.Compile();
    console.log(NN.model);

    const test = [[0.25],
                  [0.31]];
    NN.Predict(test).print();

    const inps = [
        [0],
        [0.5],
        [1]
    ]

    const outps = [
        [1],
        [0.5],
        [0]
    ]    

    NN.Train(inps, outps, 1000).then(() => {
    NN.Predict(inps).print();
    });

Класс Neural Network использует тензор потока

class NeuralNetwork
{
    constructor(a){
        this.model = tf.sequential();
        this.numInputs = a;
    }
    addLayer(nodes)
    {
        var layer;
        if(this.model.layers.length == 0){
            layer = tf.layers.dense({
                units: nodes,
                inputShape: this.numInputs,
                activation: 'sigmoid'
            });
        }
        else{
            layer = tf.layers.dense({
                units: nodes,
                activation: 'sigmoid'
            });
        }

        this.model.add(layer);
    }

    Compile()
    {
        this.model.compile({
            optimizer: tf.train.sgd(0.1),
            loss: tf.losses.meanSquaredError
        });
    }

    Predict(input)
    {
        return this.model.predict(tf.tensor2d(input));
    }

    async Train(inputs, outputs, num)
    {
        var response;
        const i = tf.tensor2d(inputs);
        const o = tf.tensor2d(outputs)
        const config = {
            epochs: 10,
            shuffle: true
        }
        for (let index = 0; index < num; index++) {
            response = await this.model.fit(i,o,config);
            console.log(response.history.loss[0]);
        }
      console.log("Training Complete.");
    }
}

Странная часть заключается в том, что когда я запустил этот код, я был удивлен тем, насколько медленно он завершается, что заняло 3-4 минуты. Затем я зашел в настройки Chrome и проверил, включено ли аппаратное ускорение.

Затем я отключил аппаратное ускорение и снова запустил скрипт. К моему удивлению, сценарий работал заметно быстрее! Конечно, он дал мне несколько предупреждений о невозможности подключения к webGL, но это было быстрее.

Я попробовал несколько вещей (перезагрузка компьютера, проверка Chrome и т.д.) и не могу понять, почему у меня возникла эта проблема, я думал, что Tensorflow использовал GPU? неужели аппаратное ускорение должно помочь?

Кто-нибудь еще имел эту проблему? или есть предложения, что я могу попробовать?

...