如何将keras张量流转换为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)

加载vgg16模型,不包括最上面的全连接层


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

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


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


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


'变量%s的重新定义'%self.name断言错误:重新定义了变量block1_conv1 / kernel1


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


注意:keras.json:


{

"epsilon": 1e-07, 

"floatx": "float32", 

"image_data_format": "channels_first", 

"backend": "mxnet"

}

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


富国沪深
浏览 159回答 1
1回答

ITMISS

解决方案:将data_format设置为“ channels_last”。细节:VGG16 imagenet权重采用“ channels_last”格式。您应该将keras配置设置为'channels_last'以使其与MXNet后端一起使用。我们遇到了Github问题,正在努力使MXNet后端以不同的data_format加载其他经过后端训练的权重。即,假设您有一个经过TFs后端训练的模型,该模型是使用channels_last格式训练的。如果您尝试在data_format设置为'channels_first'的情况下将其加载到MXNet后端中,则不会自动从channels_last转换为channels_first。问题原因:当使用channels_last格式调用图层时,MXNet后端会转换Conv图层的输入和内核,以加快速度。并且,这将导致未训练的其他后端模型权重的问题。我们正在修复它并启用该功能。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python