Некоторые вопросы по преобразованию модели кафе в факел

Я использую torch-caffe-binding для преобразования модели кафе в torch. И я хочу в конце удалить слой потерь и добавить другие слои с факелами, могу ли я просто удалить слой в файле .prototxt и обучить модель получать файл .caffemodel и импортировать его в факел?
И модель использует Данные типа lmdb, когда я использую net:forward(input) для обучения модели, модель просто использует данные, определенные на уровне данных, вместо использования inputdata. Итак, как обучить модель, которая использует данные lmdb?
модель caffe имеет некоторый настраиваемый слой, поэтому я не могу использовать loadcaffe для загрузки модели в torch


person SiMen.StrEak    schedule 18.09.2017    source источник


Ответы (1)


У вас здесь 3 проблемы -

  1. Вероятно, вам понадобится слой потерь для обучения (это то, что вы хотите минимизировать). Так что тренируйтесь с ним, и после того, как обучение будет завершено, удалите его из своего прототипа перед преобразованием в torch.
  2. Чтобы использовать lmdb вместо уровня данных, подключите свой ввод к первому сверточному слою (при условии, что ваш первый не входной слой является conv, например, скажем, у вас есть

    layer {
      name: "input-data"
      type: "DummyData"
      top: "data"
      top: "im_info"
      dummy_data_param {
        shape { dim: 1 dim: 3 dim: 224 dim: 224 }
      }
    }
    

    а также

    input: "data"
    input_shape: {
    dim: 1
    dim: 3
    dim: 224
    dim: 224
    }
    

    а потом

    layer {
      name: "conv1"
      type: "Convolution"
      bottom: "data" --> **here put data instead of input-data**
      top: "conv1"
      convolution_param {
        num_output: 96
        kernel_size: 3
        pad: 1
        stride: 1
      }
    }
    
  3. Что касается настраиваемого слоя, вам придется найти эквивалентную реализацию в torch или реализовать ее самостоятельно.
person rkellerm    schedule 18.09.2017
comment
когда я удаляю слой потерь в протоколе, консоль показывает следующее: I0923 20:56:19.437440 23288 net.cpp:200] conv1 does not need backward computation. все слои имеют сообщение о сохранении. и я не могу использовать torch для его обучения. Когда я добавляю слой потерь, все идет правильно, как я могу удалить слой потерь, в то время как все слои нуждаются в обратном? Заранее спасибо. - person SiMen.StrEak; 23.09.2017
comment
я нашел, как это решить, просто добавьте loss_weight: 1 в последний слой. спасибо за вашу помощь - person SiMen.StrEak; 23.09.2017
comment
когда я использую net = caffe.Net('test.prototxt','test.caffemodel','train') и net:getParameters() для получения netGradParameters. но я получаю [torch.DoubleTensor with no dimension], и я не могу тренировать его в Torch. Итак, если модель кафе не может тренироваться в Torch или я использую неправильный способ обучения? - person SiMen.StrEak; 24.09.2017