У меня есть модель CNN, которая была обучена в Pytorch на основе формата данных N (пакет) x C (канал) x H (высота) x W (ширина). Я сохранил предварительно обученную модель как model.pth. После этого я преобразовал предварительно обученную модель из model.pth -> model.onnx с помощью существующей функции:
torch.onnx.export(model, dummy_input, "model.onnx")
Затем я преобразовал этот model.onnx -> model.pb с помощью модуля ниже:
import onnx
from onnx_tf.backend import prepare
model_onnx = onnx.load('model.onnx')
tf_rep = prepare(model_onnx)
tf_rep.export_graph('model.pb')
Проблема в том, что я хочу использовать этот model.pb на устройстве с ЦП, которому требуется формат данных NHWC. Однако моя модель основана на формате данных NCHW. Есть ли какой-либо метод, который может преобразовать формат данных этого model.pb из NCHW в NHWC?
Уточните свой вопрос, см. Как задать вопрос и предоставьте минимальный воспроизводимый пример. — person MY C schedule 04.02.2020
Извини за это. Я обновил свой вопрос. Это лучше? Спасибо:) — person MY C schedule 04.02.2020
Можете ли вы просто транспонировать входные тензоры? например
input.transpose(1,2).transpose(2,3)
?Привет, вы имеете в виду перед тренировкой в Pytorch? Спасибо за ответ, любые советы помогают! — person MY C; 04.02.2020
да … на любых входах, будь то данные обучения и данные оценки. Любые входы несовместимых размеров. — person MY C; 05.02.2020
Разве torch.nn не использует только канал сначала в качестве формата данных, то есть в данном случае NCHW? Пожалуйста, поправьте меня, если я ошибаюсь. Спасибо. — person MY C; 05.02.2020
Да это правильно. Ваши входные данные можно преобразовать, но я не уверен, какую модель вы пытаетесь запустить. Вы можете следить за работой по последнему каналу поддержки здесь: github.com/pytorch/pytorch/issues/28619 < / а> — person MY C; 09.02.2020
Я использую индивидуальную модель. Я постараюсь следить за упомянутой вами проблемой github. Спасибо, что снова помогли. — person MY C; 11.02.2020
Короткий ответ, вы попали в сложную ситуацию.
Длинный ответ, это сложно, но возможно. Проблема усложняется тем, что ваш график уже обучен. Это неэффективно, но проще преобразовать NCHW- ›NHWC при создании графа обучения. См. Аналогичный ответ здесь и здесь.
Теперь к вашему ответу вам придется перегрузить оператор conv2D пользовательским оператором свертки. Вот псевдокод для начала.