Я учусь использовать библиотру 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? неужели аппаратное ускорение должно помочь?
Кто-нибудь еще имел эту проблему? или есть предложения, что я могу попробовать?