keras2cpp icon indicating copy to clipboard operation
keras2cpp copied to clipboard

Не понимаю где косячу) or assert on BatchNormalization

Open pikot opened this issue 5 years ago • 1 comments

Привет. Пытаюсь адаптировать keras модель в сишном коде с помощью данной библиотеки. Есть простая модель, на вход подаю картинку 100 на 100.

модель начинается так.

input_shape = (100, 100, 3)
model.add(Conv2D(32, (3, 3), padding="same", input_shape=input_shape))
model.add(Activation("relu"))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(3, 3)))
model.add(Dropout(0.25))

гружу картинку из opencv в модель приблизительно таким кодом

        keras2cpp::Tensor in{mat.cols , mat.rows , 3};
        float *fptr = mat.ptr<float>(0);
        in.data_.insert( in.data_.begin() , fptr, fptr + mat.total()  );
        keras2cpp::Stream mfile("my.model");
        keras2cpp::Model _model( mfile );
        keras2cpp::Tensor out = _model(in);
        out.print();

и получаю

keras2cpp/src/tensor.cc:56] 'dims_ == scale.dims_' failed

на строчке 56 ассерт -- kassert(dims_ == scale.dims_)

print_shape -- (98, 98, 32) для dims_  
scale.print_shape -- (32)
bias.print_shape -- (32)

Смотрел в python код пакера модели, там шейпы для тензоров scale и bias должны быть 1d, получается я даю на вход чтото не правильное, но судя по коду Tensor с dim_ = (98, 98, 32) появляется в Conv2D и далее проваливается через Activation без каких либо ошибок. И вот тут происходит непонимание, почему ассерт ясно, а как починить, не очень.

С керасом работаю первую неделю, так что осознаю что оч многого не знаю, прошу подсказки в какую сторону посмотреть

pikot avatar Aug 28 '19 12:08 pikot

Я думаю что данные не в правильном формате. Возможно из за этого. Стоит попробовать иначе перевезти их в тензор.

gosha20777 avatar Sep 26 '19 17:09 gosha20777