2017-02-05 10 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)とtf.abs(y_pred [1:] - y_true))。それが不可能なら、私は[TensorFlowループ構造](https://www.tensorflow.org/api_docs/python/functional_ops/higher_order_operators)を見ていきます。 –

答えて

0

ため

おかげであなたは/ objectives.pyファイル(https://github.com/tflearn/tflearn/blob/master/tflearn/objectives.py)をtflearnするために、任意の新しい損失関数を追加することができます。それを使用するには、回帰層でその名前を呼び出すだけです。その後、

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 

とでそれを呼び出す:理想的には多分[CUMSUM](https://www.tensorflow.org/api_docs/python/math_ops/scan#を伴う損失を(ベクトル化するだろう

net = tflearn.regression(net, optimizer='momentum', 
         loss='my_own_Loss', 
         learning_rate=0.1) 
関連する問題