在深層網路學習中,為了防止過擬合問題,正則化是個有效措施。以下是用tensorflow搭建的小例子,配合tensorboard。
import tensorflow as tf
import os
os.environ['tf_cpp_min_log_level'] = '2' #cpu加速
def get_weight(shape,lamda,names):
with tf.name_scope(names+'add'):
var=tf.variable(tf.random_normal(shape),dtype=tf.float32,name=names)
tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(lamda)(var))
return var
x=tf.placeholder(tf.float32,shape=(none,2),name="input")
y_=tf.placeholder(tf.float32,shape=(none,1),name="label")
batch_size=8
layer_dimension=[2,10,10,10,1]
#神經網路層數
n_layers=len(layer_dimension)
#當前神經網路
cur_layer=x
in_dimension=layer_dimension[0]
#通過乙個迴圈來實現乙個5層全連線的神經網路架構
for i in range(1,n_layers):
out_dimension=layer_dimension[i]
with tf.name_scope("layerout"+str(i)):
weight=get_weight([in_dimension,out_dimension],0.001,"weight"+str(i))
with tf.name_scope("bias"+str(i)):
bias=tf.variable(tf.constant(0.1,shape=[out_dimension]))
cur_layer=tf.nn.relu(tf.matmul(cur_layer,weight)+bias,name="relu_out"+str(i))
in_dimension=out_dimension
with tf.name_scope("output"):
#標準差
with tf.name_scope("mse_los"):
mse_loss=tf.reduce_mean(tf.square(y_-cur_layer))
tf.add_to_collection('losses',mse_loss)
#最終目標函式最小化(mse+每層weight的l2正則化)
loss=tf.add_n(tf.get_collection('losses'),name="adds_loss")
with tf.session() as sess:
#變數初始化
深度神經網路 正則化(二)dropout正則化
深度學習可能存在過擬合問題 高方差,有兩個解決辦法,一是正則化,另乙個是準備更多的資料,但由於無法時時刻刻準備足夠多的訓練資料或者獲取資料的成本高,所以通常使用正則化的方法來避免過擬合。正則化的主要方法有 l2正則化 dropout 資料增廣 early stopping bagging 在樣本中增...
神經網路的正則化
神經網路的vc dimension的值與神經元的個數以及權重的個數有關。所以個數越多,神經網路模型越強大越複雜。相應的就有可能出現過擬合的現象。那麼如何預防過擬合呢,有兩種方法。正則化項,這是最常見的方法,不同的是,神經網路用梯度下降法優化權重,所以需要損失函式是可導得,如果使用l1正則化項,就不可...
神經網路正則化方法
在訓練資料不夠多時,或者overtraining時,常常會導致overfitting 過擬合 其直觀的表現如下圖所示,隨著訓練過程的進行,模型複雜度增加,在training data上的error漸漸減小,但是在驗證集上的error卻反而漸漸增大 因為訓練出來的網路過擬合了訓練集,對訓練集外的資料卻...