【发布时间】:2020-08-13 01:23:13
【问题描述】:
我有一个超级模型,它使用子模型作为特征提取层。我的代码是模块化的,因此我可以轻松地通过更改我分配的任何子模型来切换我正在使用的子模型来执行特征提取:
...
elif FEATURE_EXTRACTOR == "VGG16":
Features = keras.applications.VGG16(
weights = "imagenet",
pooling = FEATURE_POOLING,
include_top = False
)
elif FEATURE_EXTRACTOR == "EfficientNetB0":
Features = keras_applications_master.keras_applications.efficientnet.EfficientNetB0(
# ^ Local copy of official keras repo: https://github.com/keras-team/keras-applications
# because pip install --upgrade keras doesn't install version with efficientnet.
weights = "imagenet",
include_top = False,
pooling = FEATURE_POOLING,
classes = None
)
...
我保存和加载 ubermodel 及其权重的例程也知道哪个子模型用于特征提取:
model.load_weights(submodel_specific_path)
对于任何子模型,我都可以执行初始训练运行并将 ubermodel 保存到磁盘。如果我尝试继续训练或微调任何包含 VGG16 子模型的 ubermodel,使用 load_weights 加载权重,一切正常。但是当我load_weights 任何具有高效网络子模型(或者说,keras.applications.xception.Xception)的 ubermodel 时,我收到以下错误:
Traceback (most recent call last):
File "image_model.py", line 284, in <module>
model.load_weights(model_path)
File "C:\Users\Username\Anaconda3\envs\tensorflow1\lib\site-packages\keras\engine\saving.py", line 492, in load_wrapper
return load_function(*args, **kwargs)
File "C:\Users\Username\Anaconda3\envs\tensorflow1\lib\site-packages\keras\engine\network.py", line 1227, in load_weights
reshape=reshape)
File "C:\Users\Username\Anaconda3\envs\tensorflow1\lib\site-packages\keras\engine\saving.py", line 1294, in load_weights_from_hdf5_group_by_name
reshape=reshape)
File "C:\Users\Username\Anaconda3\envs\tensorflow1\lib\site-packages\keras\engine\saving.py", line 861, in preprocess_weights_for_loading
weights = convert_nested_model(weights)
File "C:\Users\Username\Anaconda3\envs\tensorflow1\lib\site-packages\keras\engine\saving.py", line 836, in convert_nested_model
original_backend=original_backend))
File "C:\Users\Username\Anaconda3\envs\tensorflow1\lib\site-packages\keras\engine\saving.py", line 980, in preprocess_weights_for_loading
weights[0] = np.transpose(weights[0], (3, 2, 0, 1))
File "<__array_function__ internals>", line 6, in transpose
File "C:\Users\Username\Anaconda3\envs\tensorflow1\lib\site-packages\numpy\core\fromnumeric.py", line 651, in transpose
return _wrapfunc(a, 'transpose', axes)
File "C:\Users\Username\Anaconda3\envs\tensorflow1\lib\site-packages\numpy\core\fromnumeric.py", line 61, in _wrapfunc
return bound(*args, **kwds)
ValueError: axes don't match array
我做错了什么?
【问题讨论】:
标签: python tensorflow keras valueerror efficientnet