0

私のデータセットは400画像32x32x3を含み、ラベルには浮動小数点数(-1,1)が含まれています。例:精度は常に1回Caffe回帰

faceCroppedImages/img1.jpg 0 
faceCroppedImages/img2.jpg 0.0128 
faceCroppedImages/img3.jpg 0.0128 
faceCroppedImages/img4.jpg 0.0128 
faceCroppedImages/img22.jpg 0.0128 
faceCroppedImages/img23.jpg 0.0085 
faceCroppedImages/img24.jpg 0.0077 
faceCroppedImages/img25.jpg 0.0077 
faceCroppedImages/img293.jpg -0.023 
faceCroppedImages/img294.jpg -0.023 
faceCroppedImages/img295.jpg -0.0204 
faceCroppedImages/img296.jpg -0.0179 
faceCroppedImages/img297.jpg -0.017 
faceCroppedImages/img298.jpg -0.0128 

マイ'solver.prototxt'です:

net: "train_test_hdf5.prototxt" 
test_iter: 100 
test_interval: 500 
base_lr: 0.003 
momentum: 0.9 
weight_decay: 0.0005 
lr_policy: "inv" 
gamma: 0.0001 
power: 0.75 
display: 100 
max_iter: 10000 
snapshot: 5000 
snapshot_prefix: "lenet_hdf5" 
solver_mode: CPU 

'train_test_hdf5.prototxt'さ:

name: "MSE 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: 128 
    } 
    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: "accuracy1" 
    type: "Accuracy" 
    bottom: "fc2" 
    bottom: "label" 
    top: "accuracy1" 
    include { 
    phase: TEST 
    } 
} 
layer{ 
    name: "loss" 
    type: "EuclideanLoss" 
    bottom: "fc2" 
    bottom: "label" 
    top: "loss" 
} 

私はデータをテストしていたときただし、精度は常に1です:

Accuracy = 1

私は整数を使用してみました

は私が1000で私の現在のラベルを掛けるラベルが、私はナンエラーを取得しています:

nanloss

私が間違ってやっている場所を教えてくださいことはできますか?私はカフェやニューラルネットワークの初心者です。どんな提案も貴重です。 TIA。

答えて

4

回帰タスクのための"Accuracy"レイヤーを使用しないポイント:このレイヤーは、分類出力の精度を測定します。
たとえば、Lラベルの1つを予測しようとしている場合、num_outputfc2レイヤーはLになります。つまり、クラスごとの確率を予測します。次に、"Accuracy"層は、l番目のエントリの確率が期待される出力lに対応する確率が最大であることをチェックします。
出力がfc2の場合、そのような精度をどのように計算できますか?

あなたのケースでは、ユークリッドの損失をチェックするだけで、テストと電車の両方で減少することがわかります。

+0

「精度」レイヤーについて説明していただきありがとうございます。私は実際に回帰の結果を見ることができる方法があるかどうか疑問に思っていましたか?ネットワークの予測出力と同じように、テストラベルと比較することができますか? – magneto

+1

@損失層は、ラベルとテストセット/トレーニングバッチで平均化された予測の間のL2距離を出力します – Shai