首页 文章

如何将keras tensorflow转换为keras mxnet

提问于
浏览
1

我在keras wit tensorflow后端有一个工作的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)

加载vgg16模型,不包括顶部完全连接的图层

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

上面的代码(形状(224,224,3))给出:

ValueError:输入必须有3个通道;得到input_shape =(224,224,3)

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

'重新定义变量%s'%self.name AssertionError:重新定义变量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模型?

1 回答

  • 2

    解:

    将data_format设置为'channels_last' .

    细节:

    VGG16 imagenet权重采用'channels_last'格式 . 您应该将keras配置设置为'channels_last'以使其与MXNet后端一起使用 .

    我们有一个Github问题,并致力于允许MXNet后端在不同的data_format中加载其他后端训练的权重 . 即,假设你有一个TF后端训练的模型,该模型是用channels_last格式训练的 . 如果您尝试在MXNet后端加载此数据并将data_format设置为'channels_first',则不会发生从channels_last到channels_first的自动转换 .

    发行原因:

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

相关问题