Точность не меняется

Я пытаюсь обучить бинарную модель классификации в caffe, которая сообщает, является ли входное изображение собакой или фоном. У меня 8223 положительных образца и 33472 отрицательных образца. Мой набор проверки содержит 1200 образцов, по 600 каждого класса. На самом деле мои позитивы - это фрагменты, взятые из набора данных MS-COCO. Размер всех изображений изменяется, поэтому размер biiger не превышает 92, а размер меньше не меньше 44. После создания файлов LMDB с использованием create_imagenet.sh (resize=false) я начал тренироваться с решателем и обучать.prototxt ниже. Проблема в том, что я получаю постоянную точность (0,513333 или 0,486667), что указывает на то, что сеть ничего не изучает. Я надеюсь, что кто-то может помочь Спасибо заранее

решающий файл:

    iter_size: 32
    test_iter: 600
    test_interval: 20
    base_lr: 0.001
    display: 2
    max_iter: 20000
    lr_policy: "step"
    gamma: 0.99
    stepsize: 700
    momentum: 0.9
    weight_decay: 0.0001
    snapshot: 40
    snapshot_prefix: "/media/DATA/classifiers_data/dog_object/models/"
    solver_mode: GPU
    net: "/media/DATA/classifiers_data/dog_object/net.prototxt"
    solver_type: ADAM

train.prototxt:

    layer {
      name: "train-data"
      type: "Data"
      top: "data"
      top: "label"
      include {
        phase: TRAIN
      }

      data_param {
        source: "/media/DATA/classifiers_data/dog_object/ilsvrc12_train_lmdb"
        batch_size: 1
        backend: LMDB
      }
    }
    layer {
      name: "val-data"
      type: "Data"
      top: "data"
      top: "label"
      include {
        phase: TEST
      }
      data_param {
        source: "/media/DATA/classifiers_data/dog_object/ilsvrc12_val_lmdb"
        batch_size: 1
        backend: LMDB
      }
    }

    layer {
      name: "scale"
      type: "Power"
      bottom: "data"
      top: "scale"
      power_param {
        scale: 0.00390625

      }
    }

    layer {
      bottom: "scale"
      top: "conv1_1"
      name: "conv1_1"
      type: "Convolution"
      convolution_param {
        num_output: 64
        pad: 1
        kernel_size: 3
      }
      param {
        lr_mult: 1
      }
      param {
        lr_mult: 1
      }
    }
    layer {
      bottom: "conv1_1"
      top: "conv1_1"
      name: "relu1_1"
      type: "ReLU"
    }
    layer {
      bottom: "conv1_1"
      top: "conv1_2"
      name: "conv1_2"
      type: "Convolution"
      convolution_param {
        num_output: 64
        pad: 1
        kernel_size: 3
      }
      param {
        lr_mult: 1
      }
      param {
        lr_mult: 1
      }
    }

    layer {
      bottom: "conv1_2"
      top: "conv1_2"
      name: "relu1_2"
      type: "ReLU"
    }
    layer {
      name: "spatial_pyramid_pooling"
      type: "SPP"
      bottom: "conv1_2"
      top: "spatial_pyramid_pooling"
      spp_param {
        pool: MAX
        pyramid_height : 4
      }
    }
    layer {
      bottom: "spatial_pyramid_pooling"
      top: "fc6"
      name: "fc6"
      type: "InnerProduct"
      inner_product_param {
        num_output: 64
      }
      param {
        lr_mult: 1
      }
      param {
        lr_mult: 1
      }
    }
    layer {
      bottom: "fc6"
      top: "fc6"
      name: "relu6"
      type: "ReLU"
    }
    layer {
      bottom: "fc6"
      top: "fc6"
      name: "drop6"
      type: "Dropout"
      dropout_param {
        dropout_ratio: 0.5
      }
    }
    layer {
      bottom: "fc6"
      top: "fc7"
      name: "fc7"
      type: "InnerProduct"
      inner_product_param {
        num_output: 2
      }
      param {
        lr_mult: 1
      }
      param {
        lr_mult: 1
      }
    }
    layer {
      name: "loss"
      type: "SoftmaxWithLoss"
      bottom: "fc7"
      bottom: "label"
      top: "loss"
    }
    layer {
      name: "accuracy/top1"
      type: "Accuracy"
      bottom: "fc7"
      bottom: "label"
      top: "accuracy"
      include: { phase: TEST }

    }

часть учебного журнала:

I1125 15: 52: 36.604038 2326 solver.cpp: 362] Итерация 40, Тестирование сети (#0)

I1125 15: 52: 36.604071 2326 net.cpp: 723] Игнорирование данных поезда исходного уровня

I1125 15: 52: 47.127979 2326 solver.cpp: 429] Проверка чистых выходных данных № 0: точность = 0,486667

I1125 15: 52: 47.128067 2326 solver.cpp: 429] Проверка чистого выхода # 1: потери = 0,694894 (* 1 = потери 0,694894)

I1125 15: 52: 48.937928 2326 solver.cpp: 242] Итерация 40 (0,141947 т / с, 14,0897 с / 2 итер), потери = 0,67717

I1125 15: 52: 48.938014 2326 solver.cpp: 261] Чистый выход поезда № 0: потери = 0,655692 (* 1 = потери 0,655692)

I1125 15: 52: 48.938040 2326 sgd_solver.cpp: 106] Итерация 40, lr = 0,001

I1125 15: 52: 52.858757 2326 solver.cpp: 242] Итерация 42 (0,510097 т / с, 3,92083 с / 2 итер), потери = 0,673962

I1125 15: 52: 52.858841 2326 solver.cpp: 261] Чистая выходная мощность поезда № 0: потери = 0,653978 (* 1 = потери 0,653978)

I1125 15: 52: 52.858875 2326 sgd_solver.cpp: 106] Итерация 42, lr = 0,001

I1125 15: 52: 56.581573 2326 solver.cpp: 242] Итерация 44 (0,53723 тера / с, 3,7228 с / 2 итера), потери = 0,673144

I1125 15: 52: 56.581656 2326 solver.cpp: 261] Чистый выход поезда № 0: потери = 0,652269 (* 1 = потери 0,652269)

I1125 15: 52: 56.581689 2326 sgd_solver.cpp: 106] Итерация 44, lr = 0,001

I1125 15: 53: 00.192082 2326 solver.cpp: 242] Итерация 46 (0,553941 iter/s, 3.61049s/2 iter), потеря = 0.669606

I1125 15: 53: 00.192167 2326 solver.cpp: 261] Чистый выход поезда № 0: потери = 0,650559 (* 1 = потери 0,650559)

I1125 15: 53: 00.192200 2326 sgd_solver.cpp: 106] Итерация 46, lr = 0,001

I1125 15: 53: 04.195417 2326 solver.cpp: 242] Итерация 48 (0,499585 т / с, 4,00332 с / 2 т), потери = 0,674327

I1125 15: 53: 04.195691 2326 solver.cpp: 261] Чистый выход поезда № 0: потери = 0,648808 (* 1 = потери 0,648808)

I1125 15: 53: 04.195736 2326 sgd_solver.cpp: 106] Итерация 48, lr = 0,001

I1125 15: 53: 07.856842 2326 solver.cpp: 242] Итерация 50 (0,546265 iter/s, 3.66123s/2 iter), потеря = 0.661835

I1125 15: 53: 07.856925 2326 solver.cpp: 261] Чистый выход поезда № 0: потери = 0,647097 (* 1 = потери 0,647097)

I1125 15: 53: 07.856957 2326 sgd_solver.cpp: 106] Итерация 50, lr = 0,001

I1125 15: 53: 11.681635 2326 solver.cpp: 242] Итерация 52 (0,522906 итер / с, 3,82478с / 2 итер), потери = 0,66071

I1125 15: 53: 11.681720 2326 solver.cpp: 261] Чистый выход поезда № 0: потери = 0,743264 (* 1 = потери 0,743264)

I1125 15: 53: 11.681754 2326 sgd_solver.cpp: 106] Итерация 52, lr = 0,001

I1125 15: 53: 15.544859 2326 solver.cpp: 242] Итерация 54 (0,517707 т / с, 3,86319 с / 2 т), потери = 0,656414

I1125 15: 53: 15.544950 2326 solver.cpp: 261] Чистая выходная мощность поезда № 0: потери = 0,643741 (* 1 = потери 0,643741)

I1125 15: 53: 15.544986 2326 sgd_solver.cpp: 106] Итерация 54, lr = 0,001

I1125 15: 53: 19.354320 2326 solver.cpp: 242] Итерация 56 (0,525012 т / с, 3,80943 с / 2 итер), потери = 0,645277

I1125 15: 53: 19.354404 2326 solver.cpp: 261] Чистый выход поезда № 0: потери = 0,747059 (* 1 = потери 0,747059)

I1125 15: 53: 19.354431 2326 sgd_solver.cpp: 106] Итерация 56, lr = 0,001

I1125 15: 53: 23.195466 2326 solver.cpp: 242] Итерация 58 (0,520681 итер / с, 3,84112с / 2 итер), потери = 0,677604

I1125 15: 53: 23.195549 2326 solver.cpp: 261] Чистая выходная поезд № 0: потери = 0,640145 (* 1 = потери 0,640145)

I1125 15: 53: 23.195575 2326 sgd_solver.cpp: 106] Итерация 58, lr = 0,001

I1125 15: 53: 25.140920 2326 solver.cpp: 362] Итерация 60, Тестирование сети (#0)

I1125 15: 53: 25.140965 2326 net.cpp: 723] Игнорирование данных поезда исходного уровня

I1125 15: 53: 35.672775 2326 solver.cpp: 429] Проверка выходной сети № 0: точность = 0,513333

I1125 15: 53: 35.672937 2326 solver.cpp: 429] Проверка чистого выхода # 1: потери = 0,69323 (* 1 = 0,69323 потери)

I1125 15: 53: 37.635395 2326 solver.cpp: 242] Итерация 60 (0,138503 и / с, 14,4401 / 2 итер), потери = 0,655983

I1125 15: 53: 37.635478 2326 solver.cpp: 261] Чистый выход поезда № 0: потери = 0,638368 (* 1 = потери 0,638368)

I1125 15: 53: 37.635512 2326 sgd_solver.cpp: 106] Итерация 60, lr = 0,001

I1125 15: 53: 41.458472 2326 solver.cpp: 242] Итерация 62 (0,523143 т / с, 3,82305 с / 2 итер), потери = 0,672996

I1125 15: 53: 41.458555 2326 solver.cpp: 261] Чистый выход поезда № 0: потери = 0,753101 (* 1 = потери 0,753101)

I1125 15: 53: 41.458588 2326 sgd_solver.cpp: 106] Итерация 62, lr = 0,001

I1125 15: 53: 45.299643 2326 solver.cpp: 242] Итерация 64 (0,520679 т / с, 3,84114 с / 2 итер), потери = 0,668675

I1125 15: 53: 45.299737 2326 solver.cpp: 261] Чистый выход поезда № 0: потери = 0,634894 (* 1 = потери 0,634894)

1 ответ

Несколько комментариев:
1. Ваш тестовый набор содержит 1200 образцов, но вы проверяете только на 600 каждый раз: test_iter*batch_size= 600. Смотрите этот ответ для более подробной информации.
2. Вы перетасовывали свои тренировочные данные, когда создавали свой lmdb? Смотрите этот ответ для более подробной информации.
3. Как вы начали свои веса? кажется, нет никакого вызова для fillers в вашем файле prototxt. Если вы не определите явно fillers, ваш вес равен нулю. Это очень сложная отправная точка для SGD. Смотрите этот ответ для более подробной информации.
4. Вы пробовали установку debug_info: true в вашем решателе и заглянуть в журнал отладки, чтобы отследить причину вашей проблемы? Смотрите эту тему для более подробной информации.

Другие вопросы по тегам