深度神經網路正則化

2021-08-18 14:40:52 字數 1960 閱讀 3023

在深層網路學習中,為了防止過擬合問題,正則化是個有效措施。以下是用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卻反而漸漸增大 因為訓練出來的網路過擬合了訓練集,對訓練集外的資料卻...