私はCaffeで単一のラベル回帰問題を行っています。入力には、別々の画像を使用して独自に生成した5つのhdf5ファイルが含まれています。最初に私のネットワークを単一のhdf5ファイルでテストし、約800のトレーニング画像(バッチサイズ64)で10000回の繰り返しを実行しました。最後に、私は同じトレーニング画像に予測をしたとき、次のように、私は結果を得た:Caffeの回帰:予測は非常に誤りです
をしかし、テスト画像にそれがあった。
限り私としてトレーニングデータの量が少なく、テストデータがトレーニングデータに似ていないことが理解できます。
私は訓練データを約5500枚の画像に5枚のhdf5ファイルに分割してみました。そして、14,000回の反復を使用して作成したモデルを使用したトレーニングデータの予測出力は次のとおりです。予測が悪化している理由
は、私は理解していませんか? caffeはどのようにバッチを選択しますか? (私のバッチサイズは64です)5 hdf5ファイルからバッチをランダムに選択していますか?私の悪い予言の背後にある理由は何でしょうか?私のモデルを効果的に訓練するために私は何ができますか?畳み込みレイヤーを追加する必要がありますか?どんな提案も非常に人命を救うでしょう。これはニューラルネットワークとcaffeの私の最初の試みです。畳み込み層を追加すること
name: "Regression"
layer{
name: "data"
type: "HDF5Data"
top: "data"
top: "label"
hdf5_data_param {
source: "train_hdf5file.txt"
batch_size: 64
shuffle: true
}
include: { phase: TRAIN }
}
layer{
name: "data"
type: "HDF5Data"
top: "data"
top: "label"
hdf5_data_param {
source: "test_hdf5file.txt"
batch_size: 30
}
include: { phase: TEST }
}
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
param { lr_mult: 1 }
param { lr_mult: 2 }
convolution_param {
num_output: 20
kernel_size: 5
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "relu1"
type: "ReLU"
bottom: "conv1"
top: "conv1"
}
layer {
name: "pool1"
type: "Pooling"
bottom: "conv1"
top: "pool1"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
}
layer {
name: "dropout1"
type: "Dropout"
bottom: "pool1"
top: "pool1"
dropout_param {
dropout_ratio: 0.1
}
}
layer{
name: "fc1"
type: "InnerProduct"
bottom: "pool1"
top: "fc1"
param { lr_mult: 1 decay_mult: 1 }
param { lr_mult: 2 decay_mult: 0 }
inner_product_param {
num_output: 500
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer {
name: "dropout2"
type: "Dropout"
bottom: "fc1"
top: "fc1"
dropout_param {
dropout_ratio: 0.5
}
}
layer{
name: "fc2"
type: "InnerProduct"
bottom: "fc1"
top: "fc2"
param { lr_mult: 1 decay_mult: 1 }
param { lr_mult: 2 decay_mult: 0 }
inner_product_param {
num_output: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
value: 0
}
}
}
layer{
name: "loss"
type: "EuclideanLoss"
bottom: "fc2"
bottom: "label"
top: "loss"
}
私は、カフェやネットワーク表現に精通していません。しかし、私が見るレギュレーションの唯一の種類は、ドロップアウト層からです。多分あなたの体重にいくつかのl1/l2のレギュレーションを加えてください。私はMLで非常に重要なので、レギュレーションの概念はあなたには明らかであることを願っています。 (レギュレーションなしでは、パワフルで十分なネットワークがあなたに完璧なトレーニングスコアを与えますが、ほとんどの場合、データを記憶しているので、テストデータのような他のデータで何が起きるかは保証されません)。 – sascha
@サシャあなたの返事に感謝します。私の場合、その結果は過大ではなく、トレーニングデータ自体の予測は十分ではありません。実際には、私が使用しているトレーニングデータの量やデータの使用方法に疑問を抱いています。また、ネットワーク構造が単なる畳み込みレイヤーで十分であるかどうかは疑問です。また、caffeが複数のhdfsファイルを処理する方法と、複数のhdfsファイルからバッチを選択する方法についても説明します。データを増やす前に、同じネットワーク上でデータ量を増やすか、ネットワークを改善する必要があるかどうかを知りたい。 – magneto