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])
})()