7

複数の事前トレーニングされたネットワークから1つのネットワークにウェイトを読み込むための簡単な方法はありますか(たとえばコードを変更しないでください)?ネットワークには、両方の事前訓練されたネットワークと同じ次元と名前を持ついくつかのレイヤーが含まれています。Caffeで複数の事前トレーニングされたネットワーク

私はNVidia DIGITSとCaffeを使用してこれを達成しようとしています。

EDIT:答えによって確認されるように、DIGITSから直接行うことはできないと考えました。 DIGITSコードを変更して複数の事前トレーニングされたネットワークを選択できる簡単な方法を提案する人はいますか?私は少しコードをチェックし、training scriptが良い場所になると思っていましたが、私はCaffeの深い知識を持っていないので、これを達成するための最善の/最速の方法は何か分かりません。

答えて

6

Shaiが示唆したように、これを行う方法はありませんでしたので、公式のリポジトリを複製し、適切な変更を加えることにしました。私は区切り記号としてコロンを使用することによって、複数の事前トレーニングされたネットワークをロードできるようにコードを変更しました。

公式リポジトリでプルリクエストを作成し、その変更をDIGITSのメインブランチとマージしました。つまり、DIGITSでこの機能を使用できるようになりました。

+0

BVLC/caffeリポジトリに同様のプルリクエストを行いましたか? – Shai

+0

'--weights'パラメータを使って異なるネットワークをカンマで区切って' caffe'を使ってこれを行うことができます。 –

2

AFAIKこれを行うための簡単な方法はありません。
しかし、net surgeryを使用すると、事前に訓練されたモデルをロードし、手動でターゲットネットにウェイトを割り当てることができます。一度あなたは、すべての重量が事前に設定された様々なモデルに従って初期化された単一のネットを持っていると、あなたはそれを保存して残りの作業のための単一の事前トレーニングモデルとして使用することができます。

+1

これはやり方です... NNモデルは重さの束なので、コピーして保存するだけです。あなたが別のネットからレイヤーをコピーすると、うまくいっていないかもしれません。そして数字はかなり高いレベルです...あなたはPythonやC++に落としてそれを完成させる必要があります。 – user1269942

+0

これをDIGITSコードに組み込む簡単な方法はありますか(質問を編集しましたか?) –

+0

@IgorŠevoこのトリックを何度も試してみる場合は、DIGITSのトレーニングスクリプトを変更することを検討してください。しかし、これを1〜2回しかやろうとしないと、 "ネット手術"を使って手動で行うほうがいいと思います。 – Shai

関連する問題