2017-07-12 77 views
2

我添加了一個TensorBoard可視化到我的網絡,並注意到只有外層變化很大。爲什麼網絡的權重沒有改變很多?這在覆蓋直方圖中尤其明顯。Tensorboard權重直方圖只有最後一層可見變化

直方圖 weight histogram 相同,但覆蓋視圖 overlay

我的模型

def neural_network_model(inputdata): 
    """The blueprint of the network and the tensorboard information 
     :param inputdata: the placeholder for the inputdata 
     :returns: the output of the network? 
      """ 
    W1 = tf.get_variable("W1", shape=[set.input, nodes_h1], 
         initializer=tf.contrib.layers.xavier_initializer()) 
    B1 = tf.get_variable("B1", shape=[nodes_h1], 
         initializer=tf.random_normal_initializer()) 
    layer1 = tf.matmul(inputdata, W1) 
    layer1_bias = tf.add(layer1, B1) 
    layer1_act = tf.nn.relu(layer1) 

    W2 = tf.get_variable("W2", shape=[nodes_h1, nodes_h2], 
         initializer=tf.contrib.layers.xavier_initializer()) 
    B2 = tf.get_variable("B2", shape=[nodes_h2], 
         initializer=tf.random_normal_initializer()) 
    layer2 = tf.matmul(layer1_act, W2) 
    layer2_bias = tf.add(layer2, B2) 
    layer2_act = tf.nn.relu(layer2) 

    W3 = tf.get_variable("W3", shape=[nodes_h2, nodes_h3], 
         initializer=tf.contrib.layers.xavier_initializer()) 
    B3 = tf.get_variable("B3", shape=[nodes_h3], 
         initializer=tf.random_normal_initializer()) 

    layer3 = tf.matmul(layer2_act, W3) 
    layer3_bias = tf.add(layer3, B3) 
    layer3_act = tf.nn.relu(layer3) 
    WO = tf.get_variable("WO", shape=[nodes_h3, set.output], 
         initializer=tf.contrib.layers.xavier_initializer()) 
    layerO = tf.matmul(layer3_act, WO) 

    with tf.name_scope('Layer1'): 
     tf.summary.histogram("weights", W1) 
     tf.summary.histogram("layer", layer1) 
     tf.summary.histogram("bias", layer1_bias) 
     tf.summary.histogram("activations", layer1_act) 
    with tf.name_scope('Layer2'): 
     tf.summary.histogram("weights", W2) 
     tf.summary.histogram("layer", layer2) 
     tf.summary.histogram("bias", layer2_bias) 
     tf.summary.histogram("activations", layer2_act) 
    with tf.name_scope('Layer3'): 
     tf.summary.histogram("weights", W3) 
     tf.summary.histogram("layer", layer3) 
     tf.summary.histogram("bias", layer3_bias) 
     tf.summary.histogram("activations", layer3_act) 
    with tf.name_scope('Output'): 
     tf.summary.histogram("weights", WO) 
     tf.summary.histogram("layer", layerO) 
    return layerO 

我瞭解訓練過程是體重應該得到調整,這幾乎發生在圖像。然而,損失已經完成。我已經訓練了10000個時代的網絡,所以我期望整體上有更多的變化。特別是我不明白的重量變化不足。有人能詳細說明嗎?
enter image description here

+0

我與我的神經網絡有類似的問題,並發現大部分的損失正在消耗的偏見。你有沒有得出任何結論? – mamafoku

回答

0

我在我的神經網絡中遇到類似的重量直方圖問題。雖然Relu確實處理隱藏圖層的漸變漸變問題,但應檢查學習速度並確保每個變量的更新不會太小。這可能會導致接近零的更新,導致隨着時間的推移發生微不足道的變化。你可以簡單地檢查梯度使用下面的代碼片斷的每一層:

def replace_none_with_zero(tensor): 
    return[0 if i==None else i for i in tensor] 

with tf.name_scope('Gradients'): 
    gradient_for_variable_of_interest=replace_none_with_zero(
           tf.gradients(loss,[variable_of_interest])) 

然後通過調用梯度tf.summary.histogram檢查梯度tensorboard。

相關問題