keras2cpp
keras2cpp copied to clipboard
Не понимаю где косячу) or assert on BatchNormalization
Привет. Пытаюсь адаптировать 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 без каких либо ошибок. И вот тут происходит непонимание, почему ассерт ясно, а как починить, не очень.
С керасом работаю первую неделю, так что осознаю что оч многого не знаю, прошу подсказки в какую сторону посмотреть
Я думаю что данные не в правильном формате. Возможно из за этого. Стоит попробовать иначе перевезти их в тензор.