2017-07-15 7 views
0

私はテンソルフローで知覚プロセスをモデリングしています。私が興味を持っているセットアップでは、モデリングされたエージェントがリソースゲームをプレイしています。つまり、分類器がリソースに与えるラベルのみに依存することによってnリソースの1つを選択する必要があります。各リソースは、2つの実数の順序付けられたペアです。クラシファイアは最初の実数のみを表示しますが、ペイオフは2番目の実数に依存します。最初から2番目の機能があります。とにかく損失関数を計算するためにいくつかの入力を推論する

、理想的に私は次のように分類器を訓練したいと思います:各実行で

  1. を、分類器はn個リソースにラベルを与えます。
  2. エージェントは、所定のランク付け(例えば、A> B> C> D)で最も高いラベルに対応するリソースのペイオフを取得し、抽選の場合はランダムに取得する。
  3. 損失は、このようにして得られたペイオフとリソースセット内の最大ペイオフとの間の正規化された絶対差であるとみなされる。すなわち、(Payoff_max - ペイオフ)/ Payoff_max
  4. このため

仕事に、一つは損失を計算する前に、リソースごとに一回、推論のn回実行する必要があります。テンソルフローでこれを行う方法はありますか?もし私が間違った方法で問題に取り組んでいるのであれば、それも自由に言えます。

答えて

0

私はこの点でMLの側面について多くの知識を持っていませんが、プログラミングの観点からは2つの方法でそれを行うことができます。一つはあなたのモデルをコピーすることですn回。すべてのコピーはshare the same variablesです。これらのすべてのコピーの出力は、最も高いラベルをと決定する何らかの機能に入ります。この関数が微分可能であれば、変数は共有され、nはそれほど大きくはありません。うまくいくはずです。 nの入力をまとめてフィードする必要があります。バックプロップは各コピーを実行し、重みを更新することに注意してください。n回。これは一般的には問題ではありませんが、そうであれば、partial_runを使用することでできるいくつかの巧妙なトリックについて心がけています。

もう1つの方法は、tf.while_loopを使用することです。それはかなり賢いです - ループの各実行からのアクティベーションを格納し、それらを介してバックプロンプトを行うことができます。唯一の難しい部分は、あなたの損失にそれらを与える前に推論の結果を蓄積することです。このためにTensorArrayを見てください。この質問は役に立ちます:Using TensorArrays in the context of a while_loop to accumulate values

関連する問題