什么是归一化?
- 把大数量级特征转化为较小的数量级下,通常是[0,1]或[-1,1]
- 例子:身高体重预测,房价预测
- 绝大多数,Tensorflow的模型不是给特别大的数设计的
- 将不同数量级的特征转换到同一数量级,防止某个特征影响过大
操作步骤
- 准备身高体重训练数据并归一化
- 训练模型并测试,将结果反归一化为正常数据。
归一化训练数据
- 准备身高体重训练数据
- 使用tfvis可视化训练数据
- 使用tensorflow.js 的api进行归一化
const heights = [150, 160, 170]
const weights = [40, 50, 60]
tfvis.render.scatterplot(
{ name: '身高体重训练集' },
{ values: heights.map((x, i) => ({ x, y: weights[i] })) },
{ xAxisDomain: [140, 180], yAxisDomain: [30, 70] }
)
//归一化
const inputs = tf.tensor(heights).sub(150).div(20)
const labels = tf.tensor(weights).sub(40).div(20)
//神经元个数和inputShape
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)
})
// 训练
await model.fit(inputs, labels, {
batchSize: 3,
epochs: 200,
callbacks: tfvis.show.fitCallbacks({ name: '训练过程' }, ['loss'])
})
反归一化
预测后,把结果反归一化为正常数据
image.png