示例 1 模型
打乱数据
在训练之前务必打乱数据。
当一个模型被训练时,数据被分成小份(批次)。每批数据都会被输入到模型中。打乱数据对于防止模型重复接触相同的数据非常重要。如果两次使用相同的数据,模型将无法泛化数据并给出正确的输出。打乱数据可以提供更好的批次内数据多样性。
示例
tf.util.shuffle(data);
TensorFlow 张量
要使用 TensorFlow,输入数据需要被转换为张量数据
// 将 x 值映射到 Tensor 输入
const inputs = values.map(obj => obj.x);
// 将 y 值映射到 Tensor 标签
const labels = values.map(obj => obj.y);
// 将输入和标签转换为二维张量
const inputTensor = tf.tensor2d(inputs, [inputs.length, 1]);
const labelTensor = tf.tensor2d(labels, [labels.length, 1]);
数据归一化
在神经网络中使用数据之前,应该对其进行归一化。
对于数值数据,0-1 的范围通常使用最小-最大归一化效果最好
const inputMin = inputTensor.min();
const inputMax = inputTensor.max();
const labelMin = labelTensor.min();
const labelMax = labelTensor.max();
const nmInputs = inputTensor.sub(inputMin).div(inputMax.sub(inputMin));
const nmLabels = labelTensor.sub(labelMin).div(labelMax.sub(labelMin));
Tensorflow 模型
机器学习模型是一个产生输出的算法,它以输入为基础。
此示例使用 3 行代码定义了一个ML 模型
const model = tf.sequential();
model.add(tf.layers.dense({inputShape: [1], units: 1, useBias: true}));
model.add(tf.layers.dense({units: 1, useBias: true}));
顺序 ML 模型
const model = tf.sequential(); 创建一个顺序 ML 模型。
在顺序模型中,输入直接流向输出。其他模型可以有多个输入和多个输出。顺序模型是最简单的 ML 模型。它允许您逐层构建模型,其权重与下一层对应。
TensorFlow 层
model.add() 用于向模型添加两个层。
tf.layer.dense 是一种在大多数情况下都适用的层类型。它将输入乘以一个权重矩阵,并向结果添加一个数字(偏差)。
形状和单元
inputShape: [1] 因为我们有 1 个输入(x = horsepower)。
units: 1 定义了权重矩阵的大小:每个输入(x 值)对应 1 个权重。
编译模型
使用指定的优化器和损失函数来编译模型
model.compile({loss: 'meanSquaredError', optimizer:'sgd'});
编译器被设置为使用 sgd 优化器。它易于使用且相当有效。
meanSquaredError 是我们想要用来比较模型预测值和真实值的功能。