8

特にPythonで使用するために、カフェの基本を理解しようとしています。

私の理解では、モデル定義 (特定のニューラル ネットワーク アーキテクチャなど) を'.prototxt'ファイルに含める必要があります。

また、 を使用してデータでモデルをトレーニングすると'.prototxt'、重み/モデル パラメータが'.caffemodel'ファイルに保存されます。

'.prototxt'また、トレーニングに使用されるファイル (学習率と正則化パラメーターを含む) と、それらを含まないテスト/展開に使用されるファイルには違いがあります。

質問:

  1. '.prototxt'がトレーニングの基礎であり、トレーニング データの'.caffemodel'を使用したトレーニング (重み) の結果である というのは正しいですか?'.prototxt'
  2. '.prototxt'トレーニング用とテスト用があり、わずかな違い (トレーニングの学習率と正則化係数) があるだけで、nn アーキテクチャ (ニューラル ネットワークを使用すると仮定) は同じであるというのは正しいですか?

このような基本的な質問と、おそらくいくつかの非常に間違った仮定についてお詫び申し上げます。私はオンラインで調査を行っており、上記の行はこれまでの私の理解をまとめたものです。

4

2 に答える 2

12

BVLC/caffe: で提供されている例の 1 つを見てみましょうbvlc_reference_caffenet実際には3 つのファイル
があることに気付くでしょう。 '.prototxt'

  • train_val.prototxt: このファイルは、トレーニング フェーズのネット アーキテクチャを記述します。
  • depoly.prototxt: このファイルは、テスト時のネット アーキテクチャ (「展開」) を記述します。
  • solver.prototxt: このファイルは非常に小さく、トレーニング用の「メタ パラメーター」が含まれています。たとえば、学習率ポリシー正則化などです。

train_val.prototxtとで表されるネット アーキテクチャは、deploy.prototxtほとんど同じはずです。2 つの主な違いはほとんどありません。

  • 入力データ: トレーニング中は、通常、トレーニング/検証用に事前定義された一連の入力を使用します。したがって、train_val通常、明示的な入力レイヤー ("HDF5Data"レイヤーやレイヤーなど) が含まれます"Data"。一方、deployは通常、取得する入力を事前に知らず、次のステートメントのみを含みます。

    input: "data"
    input_shape {
      dim: 10
      dim: 3
      dim: 227
      dim: 227
    }
    

    これは、ネットが期待する入力とその次元を宣言します。
    別の方法として、"Input"レイヤー を配置することもできます。

    layer {
      name: "input"
      type: "Input"
      top: "data"
      input_param { shape { dim: 10 dim: 3 dim: 227 dim: 227 } }
    }
    
  • 入力ラベル: トレーニング中に、「グラウンド トゥルース」の期待される出力をネットに提供します。この情報は、deploy.
  • 損失層: トレーニング中に損失層を定義する必要があります。このレイヤーは、各反復でパラメーターをどの方向に調整する必要があるかをソルバーに伝えます。この損失は、ネットの現在の予測を予想される「グラウンド トゥルース」と比較します。損失の勾配はネットの残りの部分に逆伝播され、これが学習プロセスを駆動します。その間deploy、損失も逆伝播もありません。

caffe ではtrain_val.prototxt、ネット、train/val データセット、および損失を記述する を提供します。さらに、solver.prototxtトレーニング用のメタ パラメータを記述する を指定します。トレーニング プロセスの出力.caffemodelは、ネットのトレーニング済みパラメーターを含むバイナリ ファイルです。
ネットがトレーニングされると、 をパラメーターと共に使用して、新しい入力と未確認の入力の出力を予測できdeploy.prototxtます.caffemodel

于 2016-01-24T07:46:58.950 に答える