Есть ли способ преобразовать формат данных файла .pb из NCHW в NHWC?

У меня есть модель 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

См. также:  Symfony 4 - Ошибка открытия требуется getSwiftmailer_EmailSender_ListenerService
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. MY C

    Можете ли вы просто транспонировать входные тензоры? например input.transpose(1,2).transpose(2,3)?

    >>> torch.randn( (3,3,3,3), names=['n','c','h','w']).transpose(1,2).transpose(2,3).names
    ('n', 'h', 'w', 'c')
    

    Привет, вы имеете в виду перед тренировкой в ​​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

  2. MY C

    Короткий ответ, вы попали в сложную ситуацию.

    Длинный ответ, это сложно, но возможно. Проблема усложняется тем, что ваш график уже обучен. Это неэффективно, но проще преобразовать NCHW- ›NHWC при создании графа обучения. См. Аналогичный ответ здесь и здесь.

    Теперь к вашему ответу вам придется перегрузить оператор conv2D пользовательским оператором свертки. Вот псевдокод для начала.

       tensor Conv2D(X, W, B) {
         int perm[] = {0, 3, 1, 2};
         X = transposeTensor(X, perm);
         W = transposeTensor(W, perm);
         Y = Conv2D_orig(X, W, B, ...) ;
         perm = {0, 2, 3, 1};
         return transposeTensor(Y, perm);
       }
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: