2016-12-14 87 views
5

sequence_Loss模塊的source_code有三個參數是必需的,它們將它們列爲輸出,目標和權重。瞭解tensorflow sequence_loss參數

輸出和目標是自我解釋,但我期待更好地瞭解是什麼weight參數?

我發現另一件令人困惑的事情是它指出targets應該和輸出一樣length,它們究竟是什麼意思的張量長度?特別是如果它是一個三維張量。

回答

0

我們在課堂上使用了這個功能,我們的教授說我們可以通過正確的形狀(註釋中說明「與logits長度相同的一維批量大小的浮動張量列表」)。這對他們的意思沒有幫助,但也許它會幫助你讓你的代碼運行。爲我工作。

這段代碼應該訣竅:[tf.ones(batch_size, tf.float32) for _ in logits]

編輯:從TF代碼:

for logit, target, weight in zip(logits, targets, weights): 
     if softmax_loss_function is None: 
     # TODO(irving,ebrevdo): This reshape is needed because 
     # sequence_loss_by_example is called with scalars sometimes, which 
     # violates our general scalar strictness policy. 
     target = array_ops.reshape(target, [-1]) 
     crossent = nn_ops.sparse_softmax_cross_entropy_with_logits(
      logit, target) 
     else: 
     crossent = softmax_loss_function(logit, target) 
     log_perp_list.append(crossent * weight) 

所傳遞由該特定的Logit損失相乘的權重。所以我想如果你想特別重視一個特定的預測,你可以增加1以上的重量。

+0

它有點幫助,但我試圖更多地瞭解權數參數的目的是什麼,我沒有找到RNN的損失函數中權重的很多討論,除非我們正在討論輸出層。你碰巧知道關於什麼長度意味着適當的形狀問題的答案? – TheM00s3

+0

我想你在談論代碼中的評論? '權重:與logits相同長度的1D批量大小的浮動張量列表。「您對該評論的問題? –

+0

這將是一個。 – TheM00s3

1

把權重想象成應用於輸入張量的掩膜。在一些NLP應用程序中,我們經常對每個句子有不同的句子長度。爲了將多個實例句子並行/批量化爲一個小批次以饋入神經網絡,人們使用掩模矩陣來表示輸入張量中的哪個元素實際上是有效的輸入。例如,權重可以是np.ones([batch, max_length]),這意味着所有的輸入元素都是合法的。

我們也可以使用相同的形狀的標籤的基質如np.asarray([[1,1,1,0],[1,1,0,0],[1,1,1,1]])(我們假定標籤形狀是3×4),則第一行的最後crossEntropy列將被屏蔽掉爲0

您也可以使用權重來計算交叉熵的加權積累。