Próbuję użyć convnetjs, aby Node.js uczyć się z rzędu liczb w koordynatach x,y
. Celem jest przewidzenie następnej wartości w prostym wierszu liczb.Jak dogłębnie nauczyć się z rzędu liczb przy użyciu Node.js i convnetjs i przewidzieć nową wartość?
Przede wszystkim bardzo prosty wiersz [0,1,0,2,0,3,0,4,0,5,0,6]
może późniejszy sin
i cos
numer wiersza.
Nie chcę zagłębić się w głęboką materię edukacyjną, więc używam convnetjs.
Do tej pory próbowałem:
var convnetjs = require("./convnet-min.js");
// create a net out of it
var net = new convnetjs.Net();
var layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:1});
layer_defs.push({type:'fc', num_neurons:5, activation:'sigmoid'});
layer_defs.push({type:'regression', num_neurons:1});
var net = new convnetjs.Net();
net.makeLayers(layer_defs);
var my_data = [
0,1,2,3,4,5,6,7,8,9,10,
0,1,2,3,4,5,6,7,8,9,10,
0,1,2,3,4,5,6,7,8,9,10,
0,1,2,3,4,5,6,7,8,9,10,
0,1,2,3,4,5,6,7,8,9,10,
0,1,2,3,4,5,6,7,8,9,10,
0,1,2,3,4,5,6,7,8,9,10,
0,1,2,3,4,5,6,7,8
];
var x = new convnetjs.Vol(my_data);
var trainer = new convnetjs.SGDTrainer(net, {learning_rate:1.1, momentum:0.0, batch_size:1, l2_decay:0.001});
var think = function() {
for (var i = 0; i < my_data.length; i++) {
x.w[i] = my_data[i]; // Vol.w is just a list, it holds your data
trainer.train(x, my_data[i]);
}
}
for (var i = 0; i < 100; i++) {
think();
var predicted_values = net.forward(x);
console.log('predicted value: ' + predicted_values.w[0]);
}
Aby zrealizować uczenie Chcę przewidzieć następną wartość, ale zastanawiam się (wiedząc, następna wartość [9]), jak powiedzieć z Trenera Zrobił źle, dobry czy bardzo dobra robota?
Co to jest właściwy sposób szkolenia x
więcej, aby przewidzieć wartość? Myślę, że to nie jest trywialne, ponieważ przewidywana wartość nie idzie w kierunku wartości 9
^^.
To powinno być zawarte w funkcji .train już inaczej szukać jeśli masz wsteczną funkcji lub coś takiego , net learn przez forwadding wartości do sieci, a następnie backwarding różnicy błędów. Jednak nie sądzę, że twój przykład danych naprawdę pasuje. Spróbuj wygenerować zestawy, które są zgodne z normalną dystrybucją, to jest to, co masz z prawdziwymi problemami głównie i dla których te narzędzia zostały opracowane i zoptymalizowane. – Walfrat
czy możesz określić, w jaki sposób są twoje dane wejściowe i jaki jest oczekiwany wynik? Nie widzę relacji między instrukcją w twoim pytaniu a formatem 'my_data' – leobelizquierdo
Moja_data to wiersz liczb rozpoczynający się od 0 do 10, a następnie restart na 0 i znowu i znowu. Kolejna oczekiwana wartość to 9. –