如何将 keras tensorflow 转换为 keras mxnet

How to convert keras tensorflow to keras mxnet

我在带有 tensorflow 后端的 keras 中有一个有效的 python 代码。我正在利用 VGG16 的迁移学习。一切都很好。

我想使用 mxnet 后端,但遇到了一些问题:

from keras.preprocessing.image import ImageDataGenerator
from keras import applications
from helper import target_size, batch_size
from math import ceil
import numpy as np

datagen = ImageDataGenerator(rescale=1./255)

loading vgg16 model, excluding the top fully connected layers

model = applications.VGG16(include_top=False, weights='imagenet' , input_shape=(224, 224 , 3))

以上代码 (shape(224,224,3)) 给出:

ValueError: The input must have 3 channels; got input_shape=(224, 224, 3)

如果我使用:shape(3,224,24)

'Redefinition of variable %s' % self.name AssertionError: Redefinition of variable block1_conv1/kernel1

如何在工作代码中正确使用 mxnet 而不是 tensorflow 后端?

注:keras.json:

{
"epsilon": 1e-07, 
"floatx": "float32", 
"image_data_format": "channels_first", 
"backend": "mxnet"
}

编辑 1

当我将后端从 tensorflow 更改为 mxnet 时,keras 是否需要为 mxnet 重新下载 vgg16 模型?

解决方案:

将 data_format 设置为 'channels_last'。

详情:

VGG16 图像网络权重采用 'channels_last' 格式。您应该将 keras 配置设置为 'channels_last' 以使其与 MXNet 后端一起使用。

我们有一个 Github 问题,正在努力让 MXNet 后端加载不同 data_format 中的其他后端训练权重。即,假设您有一个使用 channels_last 格式训练的 TF 后端训练模型。如果您尝试在 data_format 设置为 'channels_first' 的 MXNet 后端加载它,则不会发生从 channels_last 到 channels_first 的自动转换。

问题原因:

MXNet 后端在以 channels_last 格式调用层时转置 Conv 层输入和内核以​​加速。而且,这将导致预训练的其他未转置的后端模型权重出现问题。我们正在努力修复它并启用该功能。