LoRaWAN-Signal-Mapping/server/train-ai/AITrainer.mjs

47 lines
1.1 KiB
JavaScript
Raw Normal View History

"use strict";
import tf from '@tensorflow/tfjs-node-gpu';
class AITrainer {
constructor({ settings, GatewayRepo, DatasetFetcher }) {
this.settings = settings;
this.dataset_fetcher = DatasetFetcher;
this.repo_gateway = GatewayRepo;
this.model = this.generate_model();
}
generate_model() {
let model = tf.sequential();
model.add(tf.layers.dense({
units: 256, // 256 nodes
activation: "sigmoid", // Sigmoid activation function
inputShape: [3], // 2 inputs - lat and long
}))
model.add(tf.layers.dense({
units: 1, // 1 output value - RSSI
activation: "sigmoid" // The example code uses softmax, but this is generally best used for classification tasks
}));
model.compile({
optimizer: tf.train.adam(),
loss: "absoluteDifference",
metrics: [ "accuracy", "meanSquaredError" ]
});
return model;
}
async train() {
for(let gateway of this.repo_gateway.iterate()) {
let dataset = this.dataset_fetcher.fetch(gateway.id);
await this.train_dataset(dataset);
}
}
async train_dataset(dataset) {
// TODO: Fill this in
}
}
export default AITrainer;