Я использую PyCaffe для реализации нейронной сети, созданной сетью VGG 16. Я хочу использовать предварительно подготовленную модель, доступную из их GitHub page. Как правило, это работает путем сопоставления имен слоев.Ошибка несоответствия формы кофе с использованием предварительно обработанной модели VGG-16
Для моего "fc6"
слоя у меня есть следующее определение в моем файле train.prototxt:
layer {
name: "fc6"
type: "InnerProduct"
bottom: "pool5"
top: "fc6"
inner_product_param {
num_output: 4096
}
}
Here является файл prototxt для развертывания архитектуры VGG-16. Обратите внимание, что "fc6"
в их прототекс идентичен моей (за исключением скорости обучения, но это не имеет значения). Также стоит отметить, что в моей модели все входы одинакового размера: 3-канальные изображения 224x224px.
Я следовал this tutorial довольно тесно, и блок кода, который дает мне вопрос заключается в следующем:
solver = caffe.SGDSolver(osp.join(model_root, 'solver.prototxt'))
solver.net.copy_from(model_root + 'VGG_ILSVRC_16_layers.caffemodel')
solver.test_nets[0].share_with(solver.net)
solver.step(1)
Первая строка загружает мой решатель prototxt, а затем вторая копия строки веса от предварительно обученная модель (VGG_ILSVRC_16_layers.caffemodel
). При запуске решателя, я получаю эту ошибку:
Cannot copy param 0 weights from layer 'fc6'; shape mismatch. Source param
shape is 1 1 4096 25088 (102760448); target param shape is 4096 32768 (134217728).
To learn this layer's parameters from scratch rather than copying from a saved
net, rename the layer.
Суть ее в том, что их модель предполагает, что слой будет размером 1x1x4096 в то время как у меня это просто 4096. Но я не понимаю, как я могу изменить это ?
Я нашел this answer в группе пользователей Google, которая поручила мне сделать чистую операцию, чтобы переделать предварительно подготовленную модель перед копированием, но для этого мне нужны файлы lmdb
из слоев данных исходной архитектуры, t (он вызывает ошибку, когда я пытаюсь запустить сценарий чистой операции).
У вас нет проблем с выходным размером '4096', но с входным размером: у вас есть вход с 25088 тусклым, в то время как VGG ожидает ввода dim 32768. вы что-то изменили вдоль слоев conv, которые изменили особенность размер. – Shai