16

InfogainLossモデルでタイプの損失レイヤーを使用したいと考えています。しかし、私はそれを適切に定義するのに苦労しています。

  1. INFOGAIN_LOSSレイヤーの使用に関するチュートリアル/例はありますか?

  2. この層への入力であるクラスの確率は、SOFTMAX層の出力である必要がありますか、それとも完全に接続された層の「上部」を入力するだけで十分ですか?

INFOGAIN_LOSSクラス確率、ラベル、行列の 3 つの入力が必要Hです。マトリックスHは、レイヤ パラメータとして指定できますinfogain_loss_param { source: "fiename" }。形状として
計算する python スクリプトがあるとします(ここで、モデル内のラベルの数)。Hnumpy.array(L,L)dtype='f4'L

  1. モデルにとして提供できるファイルに mynumpy.arrayを変換するにはどうすればよいですか?binprotoinfogain_loss_param { source }

  2. H損失レイヤーへの 3 番目の入力 (下) として (モデル パラメーターとしてではなく) 提供されたいとします。これどうやってするの?
    「トップ」である新しいデータレイヤーを定義しますHか? もしそうなら、トレーニングデータがインクリメントされるように、このレイヤーのデータはトレーニングの反復ごとにインクリメントされませんか? 複数の無関係な入力「データ」レイヤーを定義するにはどうすればよいですか、また、 「データ」レイヤーからHはすべてのトレーニングプロセスで一度だけ読み取ることを知っているのに対し、カフェはトレーニング/テストの「データ」レイヤーバッチからバッチごとに読み取ることをどのように知っていますか?

4

3 に答える 3

10

1. InfogainLossレイヤーの使用に関するチュートリアル/例はありますか? :
良い例がここにあります: InfogainLossを使用してクラスの不均衡に取り組みます。


2. この層への入力、つまりクラスの確率は、 Softmax層の出力である必要がありますか?
歴史的に、Yair の答えによると、答えはYESでした。の古い実装は、入力値が [0..1] の範囲内にあることを確認するレイヤーまたはその他のレイヤー の出力である必要がありました。"InfogainLoss""Softmax"

OP"InfogainLoss"は、レイヤーの上で使用"Softmax"すると数値が不安定になる可能性があることに気付きました。これらの 2 つのレイヤーを 1 つに結合する (レイヤーによく似た)彼のプル リクエスト"SoftmaxWithLoss"は受け入れられ、2017 年 4 月 14 日に公式の Caffe リポジトリにマージされました。この結合された層の数学はここで与えられます。

アップグレードされたレイヤーの「ルック アンド フィール」は、レイヤーを介して入力を明示的に渡す必要がなくなったことを除けば、古いレイヤーとまったく同じです。"Softmax"


3. numpy.array を binproto ファイルに変換するにはどうすればよいですか:

パイソンで

H = np.eye( L, dtype = 'f4' ) 
import caffe
blob = caffe.io.array_to_blobproto( H.reshape( (1,1,L,L) ) )
with open( 'infogainH.binaryproto', 'wb' ) as f :
    f.write( blob.SerializeToString() )

これで、パラメーターとしてINFOGAIN_LOSSレイヤーをモデルのプロトテキストに追加できます。H

layer {
  bottom: "topOfPrevLayer"
  bottom: "label"
  top: "infoGainLoss"
  name: "infoGainLoss"
  type: "InfogainLoss"
  infogain_loss_param {
    source: "infogainH.binaryproto"
  }
}

4. HDATA レイヤーの一部としてロードする方法

Evan Shelhamer の投稿を引用します。

現時点では、データ レイヤーに異なる速度で入力をロードさせる方法はありません。フォワード パスごとに、すべてのデータ レイヤーが進みます。ただし、データ層がループして同じ H をロードし続けるため、H のみの入力 lmdb / leveldb / hdf5 ファイルを作成することで、一定の H 入力を行うことができます。これは明らかにディスク IO を浪費します。

于 2014-12-25T09:27:10.477 に答える