Share Brilliantly
dynamic analysis
let matrix3 = [
[1,1,1,1],
[0,0,0,1],
[0,1,1,1],
[0,0,0,1],
[1,1,1,1]
];
await $src('https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest');
let ut = await import('/lib/tensor-flow/util/v1.0.0/util.mjs');
let inputs = [];
let outputs = [];
matrices.forEach((matrix,i)=>{
let output = $range(1,9).map(p=>0);
output[i] = 1;
outputs.push(output);
let row = [];
matrix.forEach(r=>{
row = [...row,...r];
});
inputs.push(row);
})
const model = tf.sequential({
layers:[
tf.layers.dense({inputShape:[20],units:5,activation:'sigmoid'}),
tf.layers.dense({units:9,activation:'softmax'}),
]
});
model.compile({
loss:tf.losses.meanSquaredError,
optimizer:tf.train.adam(0.1)
});
const logCallback = {
onEpochEnd: async (epoch, logs) => {
if(epoch%20 === 0) $console.log(epoch+" "+logs.loss);
},
onBatchEnd:async (batch, logs)=>{
}
}
await model.fit(tf.tensor(inputs),tf.tensor(outputs),{
batchSize:2,
shuffle:true,
epochs:300,
callbacks:[logCallback]
});
let output = model.predict(tf.tensor(inputs));
let matrix = await ut.toArray(output);
for(let i=0;i<matrix.length;i++){
let row = matrix[i];
let val = -1;
let index = -1;
for(let j=0;j<row.length;j++){
if(row[j]>val) {
index=j;
val = row[j];
}
}
$console.log((i+1).toString()+' is predicted as '+(index+1).toString());
}