2017-02-05 77 views
1

我正在爲我的tflearn模型創建自定義目標函數。目標函數很複雜,需要我迭代預測的和正確的輸出,並添加不是基於索引的特定部分。我找不到使張量數據類型工作的方法。Tflearn自定義目標函數

我已經用編碼標準以下列出的一個版本。

errorBuild = 0 
errorCheck = 0 
def CustomLoss(y_pred, y_true): 
    for value, index in enumerate(y_true): 
     if y_true[index] == 0: 
      errorBuild += y_pred[index] 
     else: 
      errorBuild += y_pred[index] - y_true[index] 
      errorCheck += math.abs(errorBuild) 

    return errorCheck 

似乎沒有辦法循環張量的各個值。我應該在目標函數中創建一個新的會話並評估張量嗎?

感謝您的幫助提前

+0

理想情況下,你會向量化的損失(也許包括[cumsum](https://www.tensorflow.org/api_docs/python/math_ops/scan# cumsum)和tf.abs(y_pred [1:] - y_true))。如果這是不可能的,我會看[TensorFlow循環結構](https://www.tensorflow.org/api_docs/python/functional_ops/higher_order_operators)。 –

回答

0

您可以添加任何新的損失函數tflearn/objectives.py文件(https://github.com/tflearn/tflearn/blob/master/tflearn/objectives.py)。要使用它,你只需要在迴歸層中調用它的名字。

def my_own_Loss(y_pred, y_true): 
    for value, index in enumerate(y_true): 
     if y_true[index] == 0: 
      errorBuild += y_pred[index] 
     else: 
      errorBuild += y_pred[index] - y_true[index] 
      errorCheck += math.abs(errorBuild) 

    return errorCheck 

,然後調用它:

net = tflearn.regression(net, optimizer='momentum', 
         loss='my_own_Loss', 
         learning_rate=0.1)