''' Created on Apr 20, 2017 @author: P0079482 ''' import tensorflow as tf #獲取一層神經網絡邊上的權重,並將這個權重的L2正則化損失加入名稱為'losses'的集合中 def get_weight(shape,lambda1): #生成一個變量 var = tf.Variable(tf.random_normal(shape),dtype=tf.float32) #add_to_collection函數將這個新生成變量的L2正則化損失項加入集合 #這個函數的第一個參數'losses'是集合的名字,第二個參數是要加入這個集合的內容 tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(lambda1)(var)) #返回生成的變量 return var x = tf.placeholder(tf.float32,shape=(None,2)) y_= tf.placeholder(tf.float32,shape=(None,1)) 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): #layer_dimension[i]為下一層的節點個數 out_dimension=layer_dimension[i] #生成當前層中權重的變量,並將這個變量的L2正則化損失加入計算圖上的集合 weight=get_weight([in_dimension,out_dimension],0.001) bias=tf.Variable(tf.constant(0.1,shape=[out_dimension])) #使用ReLU激活函數 cur_layer=tf.nn.relu(tf.matmul(cur_layer,weight)+bias) #進入下一層之前將下一層的節點個數更新為當前層節點個數 in_dimension=layer_dimension[i] #在定義神經網絡前向傳播的同時已經將所有的L2正則化損失加入了圖上的集合 #這里只需要計算刻畫模型在訓練數據上表現的損失函數 mse_loss=tf.reduce_mean(tf.square(y_-cur_layer)) #將均方誤差損傷函數加入損傷集合 tf.add_to_collection('losses',mse_loss) #get_collection返回一個列表,這個列表是所有這個集合中的元素。在這個樣例中 #這些元素就是損失函數的不同部分,將它們加起來就可以得到最終的損失函數 loss=tf.add_n(tf.get_collection('losses'))