# 线性回归
线性回归解决的是根据特征获取某个线性的值
# 代码展示
import * as tf from '@tensorflow/tfjs';
import * as tfvis from '@tensorflow/tfjs-vis';
window.onload = async () => {
const xs = [1, 2, 3, 4];
const ys = [1, 3, 5, 7];
/* 数据可视化 */
tfvis.render.scatterplot(
{
name: '线性回归训练集',
},
{
values: xs.map((x, i) => ({
x,
y: ys[i],
})),
},
{
xAxisDomain: [0, 5], // 设置x轴范围
yAxisDomain: [0, 8], // 设置y轴范围
}
);
/* 初始化模型 */
const model = tf.sequential(); // 连续模型(绝大多数问题都用这个)
/*给模型添加层*/
model.add(
tf.layers.dense({
units: 1, // 神经元个数
inputShape: [1], // 输入的形状-最小一纬(一纬数据,长度为一(只有一个特征))
})
);
/*给模型设置损失函数与优化器*/
model.compile({
loss: tf.losses.meanSquaredError, // 损失函数-使用均方误差计算
optimizer: tf.train.sgd(0.1), // 优化器-设置学习率
});
/*将训练数据转换成tensor*/
const inputs = tf.tensor(xs);
const labels = tf.tensor(ys);
/*异步训练模型*/
await model.fit(inputs, labels, {
batchSize: 10, // 每次样本需要学习的样本数据量
epochs: 200, // 训练轮数
callbacks: tfvis.show.fitCallbacks(
// 可视化模拟训练过程
{ name: '训练过程' },
['loss'] // 制定度量单位(制作损失曲线)
),
});
$('#test')
.removeAttr('disabled')
.on('click', function() {
/*输出预测结果并显示*/
const output = model.predict(tf.tensor([Number($('#input').val())])); // 输入一个tensor帮你预测结果并赋值给变量
console.log('output', output.dataSync());
output.dataSync();
});
};
# 重点笔记
tfvis 是 tensor 封装好的可视化库可以通过tfvis文档查看
训练模型流程:初始化模型-给模型添加层-给模型设置损失函数与优化器-将训练数据转换成 tensor-异步训练模型
线性回归数据集
const xs = [1, 2, 3, 4];
const ys = [1, 3, 5, 7];
const model = tf.sequential();初始化模型,绝大多数模型都可以用 sequential(连续模型--这一层的输入一定是上一层的输出)。
tf.layers.dense 给模型添加“全连接层” 全连接层适用于输入*权重+偏差的计算 This layer implements the operation: output = activation(dot(input, kernel) + bias) tf.layers.dense
tf.losses.meanSquaredError 损失函数使用均方误差
const output = model.predict(tensor) 的作用是输出一个 tensor 的预测值 output.dataSync(); 获得的是转化为 javascript 的输出值