2017-10-10 70 views
0

我試圖在張量流中創建簡單的4層(包括輸入層)神經網絡來處理MNIST數據。它與下面的圖像清晰度效果很好,Tensorflow:排除向後傳遞的操作

Graph1

with tf.name_scope("layer1"): 
    z1 = tf.matmul(x,w1) + b1 
    a1 = tf.nn.sigmoid(z1) 
with tf.name_scope("layer2"): 
    z2 = tf.matmul(a1,w2) + b2 
    a2 = tf.nn.sigmoid(z2) 
with tf.name_scope("layer3"): 
    z3 = tf.matmul(a2,w3) + b3 

接下來,我想每個激活後執行一些操作,我創建一個圖形如下,

Graph2

with tf.name_scope("layer1"): 
    x = transform(x) 
    z1 = tf.matmul(x,w1) + b1 
    a1 = tf.nn.sigmoid(z1) 
with tf.name_scope("layer2"): 
    a1 = transform(a1) 
    z2 = tf.matmul(a1,w2) + b2 
    a2 = tf.nn.sigmoid(z2) 
with tf.name_scope("layer3"): 
    a2 = transform(a2) 
    z3 = tf.matmul(a2,w3) + b3 

其中,transform是一個用tensorflow定義的python函數,通過一些數學變換生成與輸入矩陣相同大小的輸出矩陣。 Graph1訓練良好,我的表現很好,但Graph2的問題是隻有「layer3」可訓練,即w3和b3,tensorflow排除訓練集中的其他變量。我嘗試將var_list添加到優化器,但沒有運氣。 tf.stop_gradient與變量一起工作,但如何將它用於python函數?更具體地說,我想排除「轉換」函數本身的反向傳遞,只能用於正向傳遞。在這個link你會發現在張量板中創建的圖形。有沒有辦法在tensorflow中做到這一點? TIA!

回答

0

經過一番研究,我得出的結論是,這是不可能做到這一點在tensorflow因爲,tensorflow內部建立將除非有tf.stop_gradient呼叫在某一時刻向後完全運行圖結構。所以人們必須寫出他們自己的前鋒和後衛傳球。希望這有助於未來的人!