2016-07-21 4 views
0

Caffeの新機能です。私がやっていることは、2つのデータセット(車と花)のための一連の機能があることです。Caffeで完全に接続されたレイヤーをトレーニングするときに学習していないネットワーク

  1. 各画像サンプルの特徴サイズは256-Dです。
  2. トレーニングセット:500枚のカー画像1200枚の花画像
  3. 試験セット:100のカー画像200枚のフラワー画像

基本的に、問題は、バイナリ分類問題です。次のように私のカフェtrain.prototxtファイルは次のとおりです。

layer { 
    name: "data" 
    type: "HDF5Data" 
    top: "data" 
    top: "label" 
    hdf5_data_param { 
    source: "train.txt" 
    batch_size: 40 
    } 
    include { 
    phase: TRAIN 
    } 
} 
layer { 
    name: "data" 
    type: "HDF5Data" 
    top: "data" 
    top: "label" 
    hdf5_data_param { 
    source: "test.txt" 
    batch_size: 10 
    } 
    include { 
    phase: TEST 
    } 
} 
layer { 
    name: "fc1" 
    type: "InnerProduct" 
    bottom: "data" 
    top: "fc1" 
    inner_product_param { 
    num_output: 256 
    weight_filler { 
     type: "gaussian" 
     std: 1 
    } 
    bias_filler { 
     type: "constant" 
     value: 0 
    } 
    } 
} 
layer { 
    name: "sigmoid1" 
    type: "Sigmoid" 
    bottom: "fc1" 
    top: "sigmoid1" 
} 
layer { 
    name: "fc2" 
    type: "InnerProduct" 
    bottom: "sigmoid1" 
    top: "fc2" 
    inner_product_param { 
    num_output: 256 
    weight_filler { 
     type: "gaussian" 
     std: 1 
    } 
    bias_filler { 
     type: "constant" 
     value: 0 
    } 
    } 
} 
layer { 
    name: "sigmoid2" 
    type: "Sigmoid" 
    bottom: "fc2" 
    top: "sigmoid2" 
} 
layer { 
    name: "fc3" 
    type: "InnerProduct" 
    bottom: "sigmoid2" 
    top: "fc3" 
    inner_product_param { 
    num_output: 2 
    weight_filler { 
     type: "gaussian" 
     std: 1 
    } 
    bias_filler { 
     type: "constant" 
     value: 0 
    } 
    } 
} 
layer { 
    name: "accuracy" 
    type: "Accuracy" 
    bottom: "fc3" 
    bottom: "label" 
    top: "accuracy" 
    include { 
    phase: TEST 
    } 
} 
layer { 
    name: "loss" 
    type: "SoftmaxWithLoss" 
    bottom: "fc3" 
    bottom: "label" 
    top: "loss" 
} 

私はHDF5層を使用してデータを読み込み、シグモイドの活性化関数と256-256-2の3-完全に接続されている層に渡しています。 (私もReLUに変わったが、結果は変わらなかった)。

The solver prototxt is: 
net: "train.prototxt" 
test_iter: 100 
test_interval: 200 
base_lr: 0.010 
momentum: 0.9 
weight_decay: 0.00005 
lr_policy: "inv" 
gamma: 0.00001 
delta: 1e-8 
#test_compute_loss: true 
power: 0.75 
display: 100 
#stepsize: 1000 
max_iter: 10000 
snapshot: 10000 
snapshot_prefix: "sample" 
solver_mode: GPU 

問題は、ネットが何も学習していないという事実のためにこのアーキテクチャが動作していないということです。

このプロットは、構成上何も起こっていないことを明確に示す最初の500回の反復の精度プロットを示しています。

plot

データセットかどうかをテストするには、機能が、私はLIBSVM上の機能を使用して線形SVMを訓練し、それは84%の精度で動作します間違っていないです。

おそらく、私のネットワーク設定が正しくない可能性があります。おかげ

--------------------

アップデート:私は、次のプロットを得るようPReLUを使用。 num_outputを256から128に減らしました。 enter image description here

+1

あなたはオーバーフィットです。パラメータが非常に多く、例があまりにも少ないです。 – Shai

+0

重さを意味するパラメータが多すぎますか? –

+1

また、シグモイドを使用しないで、代わりにReLUを使用してください。 –

答えて

0

入力データをシャッフルして、より小さいネットワークを使用し、ドロップアウトのような正規化を追加してください。

0

あまりフィットしません。予めトレーニングされたCNN(例:CIFAR)を使用し、セットで微調整してください。

関連する問題