проверка caffe не удалась: kernel_size указан 2 раза; 0 пространственных размеров

У меня есть ошибка caffe "Проверить не удалось", как:

...
I0415 15:35:30.497133 39410 net.cpp:129] Top shape: 1 4096 (4096)
I0415 15:35:30.497135 39410 net.cpp:137] Memory required for data: 2898304
I0415 15:35:30.497138 39410 layer_factory.hpp:77] Creating layer conv1
I0415 15:35:30.497155 39410 net.cpp:84] Creating Layer conv1
I0415 15:35:30.497169 39410 net.cpp:406] conv1 <- ReLU0
I0415 15:35:30.497174 39410 net.cpp:380] conv1 -> conv1
F0415 15:35:30.497185 39410 base_conv_layer.cpp:35] Check failed: num_kernel_dims == 1 || num_kernel_dims == num_spatial_axes_ kernel_size must be specified once, or once per spatial dimension (kernel_size specified 2 times; 0 spatial dims).

а вот небольшая часть файла proto.txt:

...
layer {
  name: "loss0"
  type: "EuclideanLoss"
  bottom: "ampl0"
  bottom: "label_b4_noise"
  top: "loss0"
}
layer {
  name: "ReLU0"
  type: "ReLU"
  bottom: "ampl0"
  top: "ReLU0"
  relu_param {
    negative_slope: 0
  }
}
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "ReLU0"
  top: "conv1"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  convolution_param {
    num_output: 16
    bias_term: false
    pad: 0
    pad: 0
    kernel_size: 1
    kernel_size: 5
    group: 1
    stride: 1
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
    axis: 1
  }
}
...

не могли бы вы сказать мне, почему «Проверка не удалась»?

что означает «kernel_size, указанный 2 раза; 0 пространственных размеров»?

какой здесь num_spatial_axes_kernel_size? извините, если мой вопрос банален.


person Nima    schedule 15.04.2018    source источник


Ответы (1)


Посмотрите на ввод для вашего слоя ("ReLU0"):

I0415 15:35:30.497133 39410 net.cpp:129] Top shape: 1 4096 (4096)

Его размеры 1x4096, то есть он имеет 1 пакет с 4096 каналами с без ширины и без высоты (то есть ширина и высота являются одноэлементными размерами, которые обычно игнорируются).
Теперь вы хотите применить "conv1" ядро ​​1x5. Как вы хотите применить свертку к блобу, который не имеет пространственных измерений?!

Это ошибка, которую вы получили от caffe: вы указали 2 пространственных измерения для ядра conv (вы указали kernel_size дважды), но ваш входной блоб вообще не имеет пространственных измерений, то есть его num_spatial_axes_==0.

person Shai    schedule 16.04.2018
comment
пожалуйста, поправьте меня, если я ошибаюсь: так что это отсутствие ширины и высоты вызвано потерей 0? (у меня потеря 0 в середине сети!) - person Nima; 16.04.2018
comment
@NimaHatami Я подозреваю, что ваш сигнал становится 1D до того, как он будет передан в слой потерь. Проверьте журнал, чтобы увидеть формы капель, вы должны увидеть, где ваш сигнал становится 1D. Обычно это происходит, если у вас есть слой "InnerProduct". - person Shai; 16.04.2018
comment
да, вы так правы, перед loss0 есть слой InnerProduct! как я должен изменить его, чтобы адаптироваться к следующему слою? - person Nima; 16.04.2018
comment
слой { имя: ampl0 тип: InnerProduct низ: unet1 верх: ampl0 param { lr_mult: 1 Decay_mult: 1 } inner_product_param { num_output: 4096bias_term: false weight_filler { type: gaussian std: 0.01 }bias_filler { type: значение константы: 0.2 } } } - person Nima; 16.04.2018
comment
Итак, вы можете сказать мне, как добавить ширину и высоту? 1 4096 => 1 1 1 4096? как использовать изменение формы здесь? - person Nima; 16.04.2018
comment
вы можете использовать параметр axis: 0 для conv1, тем самым определяя второе измерение как пространственное измерение. Тогда вам нужно только kernel_size: 5 (один раз), так как у вас есть 1D-сигнал с 1D-ядром. @НимаХатами - person Shai; 16.04.2018