2016-08-24 3 views
1

내 모델을 이미지 데이터 세트에서 실행할 때 계산되는 초기 손실은 caffe를 실행할 때마다 일정하게 유지됩니다. 매번 모델을 실행할 때 초기 손실이 (atleast 약간) 달라야하기 때문에 문제는 이상하지 않습니다.데이터 세트에서 caffe 모델을 실행할 때마다 손실이 일정하게 유지됩니다.

또한 손실 계층에서 SoftmaxWithLoss 함수를 제공하면 손실 값이 다음 반복에서 일정하게 유지됩니다. 또한 deconvolution 레이어에서 lr_mult = 0을 주면 손실이 반복을 통해 일정하게 나타납니다. lr_mult = 1을 지정하면 손실 값이 변경되지만 마지막으로 수천 회 반복 한 후 초기 손실 값을 충족합니다.

이와 관련한 의견이 있으십니까?

아무쪼록이 점에 큰 도움이됩니다.

test_iter: 100 
test_interval: 100 # py solving tests 
display: 100 
#average_loss: 100 
lr_policy: "fixed" 
base_lr: 0.0000001 
momentum: 0.5 
iter_size: 1 
# base_lr: 1e-9 
# momentum: 0.99 
# iter_size: 1 
max_iter: 1000000 
#weight_decay: 0.0005 
snapshot: 1000 
snapshot_diff: true 
#test_initialization: false 
solver_mode: GPU 

다음은 내 길쌈 신경망의 구조입니다 :

다음은 내 해결사 파일입니다.

# Input 128 640 3 
# Conv1 (kernel=3) 126 638 64 
# ReLU 
# Conv2 (kernel=3) 124 636 128 
# ReLU 
# Conv3 (kernel=3) 122 634 256 
# ReLU 
# Pool1 (kernel=2) 61 317 256 
# Conv4 (kernel=4) 58 314 512 
# ReLU 
# Conv5 (kernel=4) 55 311 1024 
# ReLU 
# Conv6 (kernel=4) 52 308 512 
# ReLU 
# Pool2 (kernel=2) 26 154 512 
# Conv7 (kernel=4,stride=2,pad=3) 15 79 5 
# ReLU 
# Decon1 (kernel=16,stride=8,pad=3) 128 640 5 
# ReLU 
# Loss 

name: "Conv-Deconv-Net" 
layer { 
    name: "data" 
    type: "Data" 
    top: "data" 
    include { 
    phase: TRAIN 
    } 
    data_param { 
    source: "F:/shripati/v9/Models/3_Conv_Deconv_Arch_SoftmaxWithLoss/Data/training_lmdb_files/training_files_orig_IMG_LMDB_olpywm" 
    batch_size: 4 
    backend: LMDB 
    } 
} 
layer { 
    name: "label" 
    type: "Data" 
    top: "label" 
    include { 
    phase: TRAIN 
    } 
    data_param { 
    source: "F:/shripati/v9/Models/3_Conv_Deconv_Arch_SoftmaxWithLoss/Data/training_lmdb_files/training_files_orig_LBL_LMDB_olpywm" 
    batch_size: 4 
    backend: LMDB 
    } 
} 
layer { 
    name: "data" 
    type: "Data" 
    top: "data" 
    include { 
    phase: TEST 
    } 
    data_param { 
    source: "F:/shripati/v9/Models/3_Conv_Deconv_Arch_SoftmaxWithLoss/Data/testing_lmdb_files/testing_files_IMG_LMDB_olpywm" 
    batch_size: 4 
    backend: LMDB 
    } 
} 
layer { 
    name: "label" 
    type: "Data" 
    top: "label" 
    include { 
    phase: TEST 
    } 
    data_param { 
    source: "F:/shripati/v9/Models/3_Conv_Deconv_Arch_SoftmaxWithLoss/Data/testing_lmdb_files/testing_files_LBL_LMDB_olpywm" 
    batch_size: 4 
    backend: LMDB 
    } 
} 
layer { 
    name: "conv1" 
    type: "Convolution" 
    bottom: "data" 
    top: "conv1" 
    param { 
    lr_mult: 1 
    decay_mult: 1 
    } 
    param { 
    lr_mult: 2 
    decay_mult: 0 
    } 
    convolution_param { 
    num_output: 64 
    kernel_size: 3 
    stride: 1 
    pad: 0 
    weight_filler { 
     type: "xavier" 
    } 
    bias_filler { 
     type: "constant" 
    } 
    } 
} 
layer { 
    name: "relu1" 
    type: "ReLU" 
    bottom: "conv1" 
    top: "relu1" 
} 
layer { 
    name: "conv2" 
    type: "Convolution" 
    bottom: "relu1" 
    top: "conv2" 
    param { 
    lr_mult: 1 
    decay_mult: 1 
    } 
    param { 
    lr_mult: 2 
    decay_mult: 0 
    } 
    convolution_param { 
    num_output: 128 
    pad: 0 
    kernel_size: 3 
    weight_filler { 
     type: "xavier" 
    } 
    bias_filler { 
     type: "constant" 
     value: 0 
    } 
    } 
} 
layer { 
    name: "relu2" 
    type: "ReLU" 
    bottom: "conv2" 
    top: "relu2" 
} 
layer { 
    name: "conv3" 
    type: "Convolution" 
    bottom: "relu2" 
    top: "conv3" 
    param { 
    lr_mult: 1 
    decay_mult: 1 
    } 
    param { 
    lr_mult: 2 
    decay_mult: 0 
    } 
    convolution_param { 
    num_output: 128 
    pad: 0 
    kernel_size: 3 
    stride: 1 
    weight_filler { 
     type: "xavier" 
    } 
    bias_filler { 
     type: "constant" 
     value: 0.001 
    } 
    } 
} 
layer { 
    name: "relu3" 
    type: "ReLU" 
    bottom: "conv3" 
    top: "relu3" 
} 
layer { 
    name: "pool1" 
    type: "Pooling" 
    bottom: "relu3" 
    top: "pool1" 
    pooling_param { 
    pool: MAX 
    kernel_size: 2 
    stride: 2 
    } 
} 

layer { 
    name: "conv4" 
    type: "Convolution" 
    bottom: "pool1" 
    top: "conv4" 
    param { 
    lr_mult: 1 
    decay_mult: 1 
    } 
    param { 
    lr_mult: 2 
    decay_mult: 0 
    } 
    convolution_param { 
    num_output: 128 
    pad: 0 
    kernel_size: 4 
    stride: 1 
    weight_filler { 
     type: "xavier" 
    } 
    bias_filler { 
     type: "constant" 
     value: 0.001 
    } 
    } 
} 
layer { 
    name: "relu4" 
    type: "ReLU" 
    bottom: "conv4" 
    top: "relu4" 
} 

layer { 
    name: "conv5" 
    type: "Convolution" 
    bottom: "relu4" 
    top: "conv5" 
    param { 
    lr_mult: 1 
    decay_mult: 1 
    } 
    param { 
    lr_mult: 2 
    decay_mult: 0 
    } 
    convolution_param { 
    num_output: 256 
    pad: 0 
    kernel_size: 4 
    stride: 1 
    weight_filler { 
     type: "xavier" 
    } 
    bias_filler { 
     type: "constant" 
     value: 0.001 
    } 
    } 
} 
layer { 
    name: "relu5" 
    type: "ReLU" 
    bottom: "conv5" 
    top: "relu5" 
} 

layer { 
    name: "conv6" 
    type: "Convolution" 
    bottom: "relu5" 
    top: "conv6" 
    param { 
    lr_mult: 1 
    decay_mult: 1 
    } 
    param { 
    lr_mult: 2 
    decay_mult: 0 
    } 
    convolution_param { 
    num_output: 128 
    pad: 0 
    kernel_size: 4 
    stride: 1 
    weight_filler { 
     type: "xavier" 
    } 
    bias_filler { 
     type: "constant" 
     value: 0.001 
    } 
    } 
} 
layer { 
    name: "relu6" 
    type: "ReLU" 
    bottom: "conv6" 
    top: "relu6" 
} 

layer { 
    name: "pool2" 
    type: "Pooling" 
    bottom: "relu6" 
    top: "pool2" 
    pooling_param { 
    pool: MAX 
    kernel_size: 2 
    stride: 2 
    } 
} 

layer { 
    name: "conv7" 
    type: "Convolution" 
    bottom: "pool2" 
    top: "conv7" 
    param { 
    lr_mult: 1 
    decay_mult: 1 
    } 
    param { 
    lr_mult: 2 
    decay_mult: 0 
    } 
    convolution_param { 
    num_output: 5 
    pad: 3 
    kernel_size: 4 
    stride: 2 
    weight_filler { 
     type: "xavier" 
    } 
    bias_filler { 
     type: "constant" 
     value: 0.001 
    } 
    } 
} 
layer { 
    name: "relu7" 
    type: "ReLU" 
    bottom: "conv7" 
    top: "relu7" 
} 


layer { 
    name: "deconv1" 
    type: "Deconvolution" 
    bottom: "relu7" 
    top: "deconv1" 
    param { 
    lr_mult: 1 
    } 
    convolution_param { 
    num_output: 5 
    bias_term: false 
    kernel_size: 16 
    stride: 8 
    pad: 0 
    weight_filler { 
     type: "bilinear" 
    } 
    } 
} 
layer { 
    name: "relu8" 
    type: "ReLU" 
    bottom: "deconv1" 
    top: "relu8" 
} 


#layer { 
# name: "crop" 
# type: "Crop" 
# bottom: "deconv3" 
# bottom: "data" 
# top: "score" 
#} 
layer { 
    name: "prob" 
    type: "SoftmaxWithLoss" 
    bottom: "relu8" 
    bottom: "label" 
    top: "loss" 
    loss_param { 
    # ignore_label: 255 
    # normalize: true 
    normalize: false 
    } 
} 
+0

학습 속도는 어떻게됩니까? –

+0

안녕하세요, 저는 solver와 config 파일을 편집에 추가했습니다. – shripati007

답변

0

너의 base_lr이 너무 작습니다. 처음에는 0.00001에 보관하고 momentum0.9으로 유지하십시오. 학습률이 너무 낮 으면 수렴 속도가 매우 느려지고 너무 높은 경우 그래디언트 강하가 로컬 미니 마를 초과합니다 (손실이 발생하는 것을 볼 때). 따라서 반복적으로 최적의 가치를 찾아야합니다. 이것을위한 마법의 숫자는 없습니다.

+0

0.001로 시도했지만 문제는 손실이 처음 몇 번의 반복에서 7.51e6까지 발생한다는 것입니다. – shripati007

+0

얼마나 많은 반복을 실행 했습니까? –

+0

처음에는 약 4k 반복 실행했습니다. – shripati007

관련 문제