2017-06-02 83 views
2

我對TensorFlow模型的定義有疑問。 我正在實現一個相當奇特的神經網絡模型,在那裏我需要訪問不同輸入的輸出值來計算損失函數...Tensorflow,放置共享變量定義

所以,我定義了神經網絡的層功能如下:

def g(input_x,....): 
###...Convolutional and Fully Connected Layers...### 
# Last FC Layer 
with tf.name_scope("output"): 
    W = tf.Variable(tf.truncated_normal([num_hidden_units, num_classes], stddev=0.05), name="W") 
    b = tf.Variable(tf.constant(0.1, shape=[num_classes]), name="b") 
    scores = tf.nn.xw_plus_b(fc_2_output, W, b, name="output") 
return scores 

然後在我的模型我有這樣的事情:

with tf.Graph().as_default(): 
    session_conf = tf.ConfigProto(
     allow_soft_placement=FLAGS.allow_soft_placement, 
     log_device_placement=FLAGS.log_device_placement) 
    sess = tf.Session(config=session_conf) 
    with sess.as_default(): 
     ###definition of other variables, constants and placeholders### 

     ###weird loss function with scores from different inputs### 
     loss_function = tf.reduce_mean(alpha1 * weights_ll * tf.nn.softmax_cross_entropy_with_logits(logits=g(input1), labels=labels1) \ 
         + cu1 * tf.nn.softmax_cross_entropy_with_logits(logits=g(input2), labels=g(input1) \ 
         + cv1 * tf.nn.softmax_cross_entropy_with_logits(logits=g(input1), labels=labels2))) \ 
         + ... + ... 
     optimizer = tf.train.AdamOptimizer(1e-3).minimize(loss_function, global_step=global_step) 
      ##...training steps and such...## 

培訓工作,但沒有跑太久我得到了奇怪的結果,我不知道如果權重定義在g函數正在接受培訓,或者它們有點超出了優化器的範圍。

不幸的是,我仍然在學習了很多關於tensorflow,我沒有TensorBoard結果,現在向您展示。

我只是需要從別人多一點經驗,知道它是否是合法的,像這樣定義的模型,使用Python函數的輸出。

非常感謝您閱讀這篇遠

+1

嗨,其良好定義模型蟒蛇功能。有沒有訪問問題。如果有任何問題,那可能是因爲損失功能。請說明你得到了什麼類型的奇怪結果。減少損失? – hars

+0

損失被降低到大負值在-1e + 15 順序,但精度不增加,這是一個二元分類問題,它的平均值0.5(隨機猜測) –

+1

你嘗試用簡單的損失函數(一組輸入)?在這種情況下精度是否發生變化 – hars

回答

0

正如我所說的,在損失函數我用的分數不同的輸入(網絡的輸出值),並且我使用cross_entropy功能對它們進行比較。

tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None) 

此功能computs的logits的SOFTMAX,但自然也不會計算他們的標籤,因此,爲了正確地比較不同輸入的分數我需要包裝的「標籤」與TF .nn.softmax()函數,就像這樣:(注意最後一個學期)

loss_function = tf.reduce_sum(alpha1 * weights_ll tf.nn.softmax_cross_entropy_with_logits(logits=g(input1), labels=tf.nn.softmax(g(input)) 

如果你是好奇,爲什麼我需要做這樣的事情,你有興趣的深度學習,我邀請您來閱讀神經圖機器上的這個有趣的論文:https://arxiv.org/abs/1703.04818

另外,這個模型存在另一個大問題,即我不共享變量,所以在實踐中使用這個損失函數就像爲loss_function的每一項訓練多個網絡一樣。

幸運的是,在TensorFlow網站上的教程,地址共享變量:https://www.tensorflow.org/programmers_guide/variable_scope

0

你似乎不

sess.run(tf.global_variables_initializer()) 

除此之外,我們真的不能確定該模型是否可行與否沒有初始化的變量了解模型和代碼。

+0

當然,變量正在初始化,否則我根本無法訓練它。整個代碼是在線https://github.com/gssci/neural-graph-network-sentiment-analysis/blob/training/neural_graph_machine.py 但重要的部分是真的在那裏我想:) –