什么是歸一化烘嘱?
- 把大數(shù)量級(jí)特征轉(zhuǎn)化為較小的數(shù)量級(jí)下棘劣,通常是[0,1]或[-1,1]
- 例子:身高體重預(yù)測(cè)椰拒,房價(jià)預(yù)測(cè)
- 絕大多數(shù)嫉称,Tensorflow的模型不是給特別大的數(shù)設(shè)計(jì)的
- 將不同數(shù)量級(jí)的特征轉(zhuǎn)換到同一數(shù)量級(jí)玄妈,防止某個(gè)特征影響過大
操作步驟
- 準(zhǔn)備身高體重訓(xùn)練數(shù)據(jù)并歸一化
- 訓(xùn)練模型并測(cè)試乾吻,將結(jié)果反歸一化為正常數(shù)據(jù)。
歸一化訓(xùn)練數(shù)據(jù)
- 準(zhǔn)備身高體重訓(xùn)練數(shù)據(jù)
- 使用tfvis可視化訓(xùn)練數(shù)據(jù)
- 使用tensorflow.js 的api進(jìn)行歸一化
const heights = [150, 160, 170]
const weights = [40, 50, 60]
tfvis.render.scatterplot(
{ name: '身高體重訓(xùn)練集' },
{ 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)
//神經(jīng)元個(gè)數(shù)和inputShape
const model = tf.sequential()
model.add(tf.layers.dense({ units: 1, inputShape: [1] }))
// 設(shè)置損失函數(shù)和優(yōu)化器
model.compile({
loss: tf.losses.meanSquaredError,
optimizer: tf.train.sgd(0.1)
})
// 訓(xùn)練
await model.fit(inputs, labels, {
batchSize: 3,
epochs: 200,
callbacks: tfvis.show.fitCallbacks({ name: '訓(xùn)練過程' }, ['loss'])
})
反歸一化
預(yù)測(cè)后拟蜻,把結(jié)果反歸一化為正常數(shù)據(jù)