Проблема
У меня есть обученная модель (не моя), по которой я могу сделать выводы с помощью Theano Backend.Мне нужно запустить его на Android, поэтому я пытаюсь преобразовать эту модель в Tensorflow lite (.tflite
).
Перед преобразованием в .tflite
я пытаюсь заставить модель работать с бэкэндом тензорного потока, но яне могу сделать это правильно.(питон с керасом)
Что работает
Это то, что я делаю с моделью theano, theano backend, упорядочением каналов в последнюю очередь, работает нормально:
with open('Model/definition.json', 'r') as f:
model = model_from_json(f.read())
model.load_weights('Model/weights.h5')
p = model.predict_proba(preprocessed_data)
print_results(p)
модель имеет только два выхода (обнаружен или не обнаружен), и он работает нормально.
Что не работает
Когда я просто переключаю бэкэнд на тензор потока и запускаю тот же код, модель не работаетбольше ничего не обнаруживать.
То, что я уже пробовал
Сначала я подумал, что это проблема нечеткого упорядочения, как я видел на следующих страницах, например: Преобразование определения модели Keras на основе Theano вTensorFlow .
- В модели theano должны использоваться измерения с первым каналом.
- В модели с тензорным потоком должны использоваться измерения с последним каналом.
Тамэто также сценарий из этой темы, который я пробовал: https://github.com/keras-team/keras/issues/5374
Он не работает для меня, потому что я думаю, что мои веса уже являются каналами - последний порядок!(Это то, что я предполагал от netron , см. Изображение на Imgur
Последнее, что я попробовал, было convert_all_kernels_in_model () , но я получил этоошибка:
tenorflow.python.framework.errors_impl.FailedPreconditionError: Попытка использовать неинициализированное значение conv2d_1 / kernel [[{{{node _retval_conv2d_1 / kernel_0_0}}]]
* 1049Вопрос
Как вы думаете, что мне нужно сделать на моей модели, чтобы она работала с бэкэндом тензорного потока (чтобы преобразовать ее в tflite ...) ???