1. 程式人生 > >新人上手TensorFlow 之 Normalization

新人上手TensorFlow 之 Normalization

上一篇轉載自張俊林老師的部落格,參考《batch normalization: accelerating deep network training by reducing internal》這篇論文,基本講了一下,批處理歸一化對於神經網路的意義所在及基本的原理和步驟。算是理論上的理解吧!這篇部落格,我們來看一下,在TensorFlow中如何實現Normalization!

TensorFlow中的Normalization函式

在TensorFlow中,封裝了多種種歸一化的函式,分別是:

編號 TensorFlow函式 數學原理
1 tf.nn.l2_normalize output = x / sqrt(max(sum(x**2), epsilon))
2 tf.nn.batch_normalization
3 tf.nn.moments 計算 mean & variance

具體見: https://www.tensorflow.org/api_guides/python/nn#Normalization
官網Normalization

TensorFlow中Normalization函式示例

'''
Normalization in TensorFlow
'''
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf
import numpy as np

x = np.arange(10,dtype = np.float16)
print('x-orig:', x)

sess = tf.Session()

#l2-normalization
x_l2_norm = tf.nn.l2_normalize(x, dim = 0)
x_norm_res = sess.run(x_norm)
print('l2-norm:'
,x_norm_res) # batch normalization ## calculate the mean & variance x = tf.constant(x, dtype = tf.float32) [x_mean, x_varia] = tf.nn.moments(x, axes=0) offset = 0 scale = 0.1 vari_epsl = 0.0001 ## calculate the batch normalization x_bn = tf.nn.batch_normalization(x, x_mean, x_varia, offset,scale,vari_epsl) print('mean & vari: ', sess.run( [x_mean, x_varia])) x_bn_res = sess.run(x_bn) print('x_bn:', x_bn_res) sess.close()

執行結果:

x-orig: [ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9.]
l2-norm: [ 0.          0.05923489  0.11846977  0.17770466  0.23693955  0.29617444
  0.35540932  0.41464421  0.4738791   0.53311396]
mean & vari:  [4.5, 8.25]
x_bn: [-0.15666895 -0.12185362 -0.0870383  -0.05222298 -0.01740766  0.01740767
  0.05222298  0.08703831  0.12185363  0.15666895]

Normalization 線上性迴歸問題中的效果

我們將線性迴歸問題中的資料進行Normalization後,在進行訓練,執行結果如下圖:

未歸一化的訓練結果

未歸一化的訓練結果

用batch Normalization歸一化後的訓練結果

這裡寫圖片描述

這樣對比一看,就知道效果有多明顯了,收斂速度快了好幾個數量級。這個實驗不一定就十分嚴謹,但是還是很生動形象的。