JSFiddle - React, Tailwind, and code Playground
by MKGaru
Babel + JSX
const dl = deeplearn
const dataset = [
{input:1,label:5.2},
{input:2,label:5.7},
{input:3,label:8.6},
{input:4,label:14.9},
{input:5,label:18.2},
{input:6,label:20.4},
{input:7,label:25.5},
{input:8,label:26.4},
{input:9,label:22.8},
{input:10,label:17.5},
{input:11,label:11.1},
{input:12,label:6.6}
]
const input = dl.tensor1d( dataset.map(data=>data.input) )
const label = dl.tensor1d( dataset.map(data=>data.label) )
const weight = dl.variable( dl.tensor([0,0,0,0,0]) ) // initial values.
const learningRate = 0.02
const optimizer = dl.train.sgd(learningRate)
function model(input){
return dl.tidy(()=>
input.mul( value ).sum(1)
)
}
function loss(output,label){
return label.sub(output).square().mean()
}
async function train(input,label,iterations){
while(iterations--){
optimizer.minimize(()=>{
const output = model(input)
return loss(output,label)
})
if(iterations%10==9) await dl.nextFrame() // 毎フレーム待つと、時間がかかりすぎる
}
}
//* for console
(async ()=>{
console.log(`Before training: ${value.dataSync()}`)
test([2,4])
await train(input,label,500)
console.log(`After training: ${value.dataSync()}`)
test([2,4])
})()