2016-12-05 16 views
0

与えられた入力に対して、その時刻を予測するネットワークを構築したいと思います。結果は0から24の範囲でなければなりません。テンソルの循環損失

分類問題として解決しようとしましたが、それは正しい方法ではないようです。私の問題は、循環損失機能を構築する方法がわからないことです。たとえば、私の場合、ネットワークの出力が1で真のラベルが23の場合、距離は2でなく22になります。使用できるレイヤーはありますか?

+0

ようこそ!これは良い質問です。投票してはならない。しかし、あなたがやった作業のいくつかを、理想的にはコードまたは擬似コードスニペットで表示することが常に望ましいです。それはあなたの質問が研究と努力が欠けていると誤解される可能性を少なくします。 – Praveen

答えて

1

私が知る限り、事前に書かれた循環損失機能はありません。あなたがそのようなあなたの損失を定義した場合、それは分類問題ではありませんが

import keras.backend as K 
def cyclic_loss(y_true, y_pred): 
    return K.min((y_pred +24 - y_true) % 24, (y_true + 24 - y_pred) % 24) 

model.compile(optimizer='sgd', loss=cyclic_loss, metrics=['acc']) 

を:巡回損失について、あなたはこのように、独自の損失関数を記述する必要があります。分類問題が必要な場合は、ワンホットエンコーディングで出力をエンコードし、クロスエントロピーを損失関数として使用する必要があります。それからあなたは1日の1時間の確率を持ち、最も高い確率で時間をとります。

回帰タスクとして、上記のような循環損失関数を使用できます。

+0

ありがとうございます。私はそれを回帰タスクとして使用する必要があるように思えます。テンソルフローで書くと同じ損失ですか? – GiladD

+0

kerasをラッパーとして使用する場合はyes。そうでなければ、テンソルフローのバックエンドを使用する必要があります。私はテンソルフローバックエンドを自分で直接使うことを嫌うことはありませんでしたので、私は確かに言えません。 –

+0

よろしくお願いいたします。私はケラと共に働きます。 は、y_predの出力がモジュロ24になるようにする方法はありますか?y_pred> 0(密度(1、活性化= 'relu'、名前= y_pred)を作るためにreluを入れます。 ?凹凸のない損失関数 – GiladD