Ошибка при попытке конвертировать простую сверточную модель в CoreML - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь преобразовать простой генератор GAN (из ClusterGAN):

self.name = 'generator'
self.latent_dim = latent_dim
self.n_c = n_c
self.x_shape = x_shape
self.ishape = (128, 7, 7)
self.iels = int(np.prod(self.ishape))
self.verbose = verbose

self.model = nn.Sequential(
    # Fully connected layers
    torch.nn.Linear(self.latent_dim + self.n_c, 1024),
    nn.BatchNorm1d(1024),
    nn.LeakyReLU(0.2, inplace=True),
    torch.nn.Linear(1024, self.iels),
    nn.BatchNorm1d(self.iels),
    nn.LeakyReLU(0.2, inplace=True),

    # Reshape to 128 x (7x7)
    Reshape(self.ishape),

    # Upconvolution layers
    nn.ConvTranspose2d(128, 64, 4, stride=2, padding=1, bias=True),
    nn.BatchNorm2d(64),
    nn.LeakyReLU(0.2, inplace=True),

    nn.ConvTranspose2d(64, 1, 4, stride=2, padding=1, bias=True),
    nn.Sigmoid()
)

Но onnx-coreml не работает с Error while converting op of type: BatchNormalization. Error message: provided number axes 2 not supported

Я думал, что это BatchNorm2d, поэтому Я попытался изменить форму и применить BatchNorm1d, но я получаю ту же ошибку. Какие-нибудь мысли? Я очень удивлен, что у меня возникают проблемы при конвертации такой простой модели, поэтому я предполагаю, что мне не хватает чего-то очевидного.

Я нацеливаюсь на iOS 13 и использую Opset v10 для конвертация onnx.

1 Ответ

0 голосов
/ 29 марта 2020

Core ML не имеет одномерной нормы партии. Тензор должен иметь по крайней мере ранг 3.

Если вы хотите преобразовать эту модель, вам следует сложить весовые коэффициенты партии в весовые коэффициенты предыдущего слоя и удалить слой нормы партии. (Я не думаю, что у PyTorch есть способ автоматически сделать это для вас.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...