TensorFlow正則化經常被用於Deep-Learn中,泛化數據模型,解決過擬合問題。再深度學習網絡只有在有足夠大的數據集時才能產生驚人的學習效果。當數據量不夠時,過擬合的問題就會經常發生。然而,只選取我們需要的數據量的模型,就會非常難以繼續進行泛化和優化。所以正則化技術孕育而生~~~~~~~
正則化的基本思想是向損失函數添加一個懲罰項用於懲罰大的權重,隱式的減少自由參數的數量。可以達到彈性地適應不同數據量訓練的要求而不產生過擬合的問題。~~~~~~
1 #正則化 2 import tensorflow as tf 3 import matplotlib.pyplot as plt 4 import numpy as np 5 6 data = [] 7 label = [] 8 np.random.seed(0) 9 for i in range(150): 10 x1 = np.random.uniform(-1,1) 11 x2 = np.random.uniform(0,2) 12 if x1**2+x2**2 <= 1: 13 data.append([np.random.normal(x1,0.1),np.random.normal(x2,0.1)]) 14 label.append(0) 15 else: 16 data.append([np.random.normal(x1,0.1),np.random.normal(x2,0.1)]) 17 label.append(1) 18 19 data = np.hstack(data).reshape(-1,2) 20 label = np.hstack(label).reshape(-1,1) 21 plt.scatter(data[:,0],data[:,1],c=label, 22 cmap="RdBu",vmin=-.2,vmax=1.2,edgecolor="white") 23 plt.show()

2.查看不同迭代中的變量取值的變化
1 v1 = tf.Variable(0,dtype=tf.float32) 2 step = tf.Variable(0,trainable=False) 3 ema = tf.train.ExponentialMovingAverage(0.99,step) 4 maintain_averages_op = ema.apply([v1]) 5 with tf.Session() as sess: 6 #初始化 7 init_op = tf.global_variables_initializer() 8 sess.run(init_op) 9 print(sess.run([v1,ema.average(v1)])) 10 #更新變量v1的取值 11 sess.run(tf.assign(v1,5)) 12 sess.run(maintain_averages_op) 13 print(sess.run([v1,ema.average(v1)])) 14 #更新step和v1的取值 15 sess.run(tf.assign(step,10000)) 16 sess.run(tf.assign(v1,10)) 17 sess.run(maintain_averages_op) 18 print(sess.run([v1,ema.average(v1)])) 19 #更新一次v1的滑動平均值 20 sess.run(maintain_averages_op) 21 print(sess.run([v1,ema.average(v1)])) 22 23 24 #結果 25 26 [0.0, 0.0] 27 [5.0, 4.5] 28 [10.0, 4.5549998] 29 [10.0, 4.6094499]
note:優化器optimizer
tf的7種優化器
最常用的: GradientDescentOptimizer
tf.train.Optimizer
tf.train.GradientDescentOptimizer
tf.train.AdadeltaOptimizer
tf.train.AdagradOptimizer
tf.train.AdagradDAOptimizer
tf.train.MomentumOptimizer
tf.train.AdamOptimizer
tf.train.FtrlOptimizer
tf.train.ProximalGradientDescentOptimizer
tf.train.ProximalAdagradOptimizer
tf.train.RMSPropOptimizer
