Github
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://unpkg.com/deeplearn@latest"></script>
<script src="https://cdn.hcharts.cn/highcharts/highcharts.js"></script>
</head>
<body>
<div id="container" style="width: 600px;height:400px;"></div>
<script src="app.js"></script>
</body>
</html>
app.js
const data1 = []
for (let i=0; i<100; i++) {
let tmp_x = Math.random() * 10
let offset = Math.random() * 10
let tmp_y = tmp_x * 3 + offset
data1.push({
x: tmp_x,
y: tmp_y
})
}
const x_list = []
const y_list = []
for (let elem of data1) {
x_list.push(elem.x)
y_list.push(elem.y)
}
const x_data = dl.tensor1d(x_list)
const y_data = dl.tensor1d(y_list)
const Weights = dl.variable(dl.randomUniform([1]))
const Biases = dl.variable(dl.zeros([1]))
const f = x => Weights.mul(x).add(Biases)
const loss = (pred, label) => pred.sub(label).square().mean()
const learningRate = 0.01
const optimizer = dl.train.sgd(learningRate)
for (let i = 0; i < 100; i++) {
optimizer.minimize(() => loss(f(x_data), y_data))
}
const w_predict = Weights.dataSync()
const b_predict = Biases.dataSync()
const data_scatter = []
for (let elem of data1) {
data_scatter.push([elem.x, elem.y])
}
const data_line = [
[0, parseFloat(0 * w_predict + b_predict)],
[10, parseFloat(10 * w_predict + b_predict)]
]
var options = {
title: {
text: 'deeplearn.js的线性回归'
},
xAxis: {
min: 0,
max: 10
},
yAxis: {
min: 0,
max: 60
},
series: [
{
type: 'line',
data: data_line
},
{
type: 'scatter',
marker: {
symbol: 'cross',
radius: 4
},
data: data_scatter
}
]
}
var chart = Highcharts.chart('container', options);
效果图
