問題タブ [pycaffe]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
deep-learning - Caffe によるマルチラベル分類
GoogLeNet を微調整して、Caffe でマルチラベル分類を行いたいと考えています。すでに単一ラベルの分類に微調整していますが、マルチラベルへの移行はまだできません。
私が行っている主な手順は次のとおりです。
データとグラウンド トゥルース用の LMDB を作成する
こことここでコードを変更して、1 つの LMDB をデータで作成し、もう 1 つをグラウンド トゥルースで作成します。
SoftmaxWithLoss を SigmoidCrossEntropyLoss に置き換える
train_val.prototxt を更新して、SoftmaxWithLoss レイヤーを SigmoidCrossEntropyLoss に置き換え、両方の DB が読み込まれるようにデータ レイヤーを設定します。単一ラベル分類問題で行ったように、学習率パラメーターを設定します。
この手順は機能しているようです。データフロー、および Solver.step(1) を実行することが可能です。データとラベルが正しくロードされていることを確認するために、数式を使用して明示的に損失を計算し、Caffe と同じ結果を得ました。
問題
ネットワークが収束しません。数百回の反復を実行すると、さまざまなクラスのそれぞれがクラス母集団の平均になります。つまり、クラス a の母集団に 0.35 個の 1 と 0.65 個の 0 がある場合、ネットワークは、真のラベルに関係なく、観測ごとに ~0.35 の分類確率に収束します。
考えられるエラー 1
問題は、GoogLeNet の事前トレーニング済みモデルが画像から学習できるように、画像を caffe に正しくロードできなかったためだと思われます。これまでの私の以前の経験は、完全に機能する convert_imageset です。現在、shelhamer コードを使用して画像を LMDB に保存しています。
画像を読み込むときに、データ層の平均を正規化します。それは正しいと思いますか?それを行う別の方法はありますか?
考えられるエラー 2
また、train_val.prototxt の定義が間違っている可能性もあります。SoftmaxWithLoss -> SigmoidCrossEntropyLoss を切り替える以外に必要なことはありますか?
どんな助けでも大歓迎です!ありがとう!
python - caffe をインポートできません - iPython は「通常の」python が検出する環境変数を検出しません
OS X 10.11 El Capitan を実行している Mac で Anaconda python を使用しています。
pycaffe
iPython で使用しようとしていますが、インポート ( import caffe
) がエラーで失敗します
iPython は caffe をインポートできませんが、「通常の」python でインポートすると機能します。
また、私は CUDA 7.5 を使用していることにも言及する必要があります。使用しているカフェのバージョン (ダウンロードされた zip) はわかりませんが、2015 年 9 月 17 日にマスター ブランチから実行されました。
「通常の」python が caffe をインポートできるようにするために私が行ったアクションは、以下を ~/.bash_profile に追加することでした。
行がコメントアウトされている.bash_profile
場合ImportError: No module named caffe
、iPython は設定された PYTHONPATH を読み取っています。export PYTHONPATH=...
しかし、何らかの理由でDYLD_FALLBACK_LIBRARY_PATH
、「通常の」python が行う が見つかりません。
何が間違っている可能性がありますか?
machine-learning - Caffe の「ラベル」とは何ですか?
Caffe では、protobuf ファイルで NN の入力を定義するときに、「データ」と「ラベル」を入力できます。ラベルには、トレーニング データの期待される出力が含まれていると思います (通常y
、機械学習の文献では値と見なされます)。
私の問題は、caffe.proto ファイルで、label がスカラー (int または long) として定義されていることです。少なくともデータでは、文字列値を取るため、numpy 配列に設定できます。複数の予測出力をトレーニングしている場合、どうすればそれを配列として渡すことができますか?
それとも私は間違っていますか?とはlabel
? それはなんのためですか?そして、どうすればy
値をカフェに渡すことができますか?
neural-network - カフェの精度が 100% を超える
私は 1 つを構築していますが、lenet の例で提供されているカスタム トレイン関数を 110 より大きいバッチ サイズで使用すると、精度が 1 (100%) より大きくなります。
バッチ サイズ 32 を使用すると、30% の精度が得られます。バッチ サイズが 64 の場合、正味の精度は 64 です。バッチ サイズが 128 の場合、精度は 1.2 です。
私の画像は 32x32 です。データセットのトレーニング: ニュートラルな顔の 56 枚の画像。驚きの顔画像60枚。テスト データセット: ニュートラルな顔の 15 枚の画像。驚きの顔画像15枚。
これは私のコードです:
では、私のコードの何が問題なのですか?
python - Caffe、事前訓練されたネットから予測する方法
私はこのコードを使用してネットをロードしています:
3行に疑問があります。
1-mean=np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy').mean(1).mean(1)
意味は何?この平均値または別の値を使用する必要がありますか? はいの場合、どこでカスタム平均値を取得できますか? カスタム データセットを使用しています。
2-channel_swap=(2,1,0)
channel_swap とは? 繰り返しますが、この値またはカスタム値を使用する必要がありますか?
そして最後の
3-raw_scale=255
raw_scale とは何ですか? そして、どの値を使用する必要がありますか?
Cohn Kanadeデータセットを使用しています。すべての画像は 64x64 でグレースケールです。
python - Python でカスタム Caffe レイヤーを構築する
Python で Caffe レイヤーを構築することに関する多くのリンクを解析した後でも、いくつかの概念を理解するのにまだ困難があります。誰かがそれらを明確にしてもらえますか?
- ネットワークのブロブと重みの python 構造は、ここで説明されています:入力に関する Caffe conv-filter の勾配の検索。
- ネットワークとソルバーの構造はここで説明されています: caffe / pycaffe のチートシート? .
- Python レイヤーを定義する例は次のとおりです: pyloss.py on git。
- ここでレイヤーテスト: gitでレイヤーをテストします。
- C++ 用の新しいレイヤーの開発については、ここで説明されています: git wiki。
私がまだ欠けているのは:
setup()
メソッド: ここで何をすればよいですか? たとえば、「bottom」パラメータの長さを「2」と比較する必要があるのはなぜですか? なぜ2にする必要があるのですか?任意なのでバッチサイズではないようです? そして、私が理解しているように、一番下はブロブであり、最初の次元はバッチサイズですか?reshape()
方法:私が理解しているように、「下」の入力パラメータは下層のブロブであり、「上」パラメータは上層のブロブであり、フォワードパスを使用した計算の出力形状に従って最上層を再形成する必要があります。しかし、これらの形状がパスごとに変化せず、ウェイトのみが変化する場合、フォワード パスごとにこれを行う必要があるのはなぜですか?reshape
メソッドには、forward
使用される「トップ」入力パラメータのインデックスが 0 あります。andの代わりにtop[0].data=...
orを使用する必要があるのはなぜですか? このインデックスは何ですか?このトップリストの他の部分を使用しない場合、なぜこのように公開されているのでしょうか? そのまたは C++ バックボーンの一致を疑うことができますが、正確に知っておくとよいでしょう。top[0].input=...
top.data=...
top.input=...
reshape()
メソッド、次の行:私はここで何をしますか?なぜその次元は再び 2 なのですか? そして、私はここで何を数えていますか?BLOB の両方の部分 (0 と 1) の一部のメンバー (
count
) の量が等しくなければならないのはなぜですか?forward()
メソッド、この行で定義するもの:定義した場合、フォワードパスの後に使用されるのはいつですか? 使えますか
代入せずにこのメソッドの後半で損失をカウントする代わりに
self
、または何らかの目的で行われますか?backward()
メソッド: これは何ですか:for i in range(2):
? なぜ再び範囲が2なのですか?backward()
メソッド、propagate_down
パラメーター: なぜ定義されているのですか? 私が見ているように、そのTrueの場合、勾配をに割り当てる必要がありますが、何もしないだけで内部を循環している場合bottom[X].diff
、なぜ誰かが何もしないメソッドを呼び出すのでしょうか?propagate_down = False
これらの質問があまりにも明白である場合は申し訳ありませんが、私はそれらを理解するための良いガイドを見つけることができず、ここで助けを求めることができませんでした.