python - Keras:load_model ValueError:轴与数组不匹配
问题描述
我正在用我自己的数据集使用keras-gan/wgan-gp示例研究 gan。我保存模型
wgan.generator.save('generator.h5')
wgan.critic.save('critic.h5')
并加载
model = load_model('generator.h5')
model = load_model('critic.h5')
但这仅在第一次运行时效果很好。当我在第二次训练后再次保存模型并运行时
model = load_model('generator.h5')
model = load_model('critic.h5')
再次出现错误:</p>
() ----> 1 model = load_model('generator.h5') 中的 ValueError Traceback (最近一次调用最后一次)
D:\keras\engine\saving.py in load_model(filepath, custom_objects, compile) 262 263 # set weights --> 264 load_weights_from_hdf5_group(f['model_weights'], model.layers) 265 266 if compile:
D:\keras\engine\saving.py in load_weights_from_hdf5_group(f, layers, reshape) 914 original_keras_version, 915 original_backend, --> 916 reshape=reshape) 917 if len(weight_values) != len(symbolic_weights): 918 raise ValueError( '图层#' + str(k) +
D:\keras\engine\saving.py 在 preprocess_weights_for_loading(layer, weights, original_keras_version, original_backend, reshape) 555 weights = convert_nested_time_distributed(weights) 556 elif 层。类。['Model', 'Sequential'] 中的名称:-> 557 weights = convert_nested_model(weights) 558 559 if original_keras_version == '1':
D:\keras\engine\saving.py in convert_nested_model(weights) 543 weights=weights[:num_weights], 544 original_keras_version=original_keras_version, --> 545 original_backend=original_backend)) 546 weights = weights[num_weights:] 547 return new_weights
D:\keras\engine\saving.py 在 preprocess_weights_for_loading(layer, weights, original_keras_version, original_backend, reshape) 555 weights = convert_nested_time_distributed(weights) 556 elif 层。类。['Model', 'Sequential'] 中的名称:-> 557 weights = convert_nested_model(weights) 558 559 if original_keras_version == '1':
D:\keras\engine\saving.py in convert_nested_model(weights) 531 weights=weights[:num_weights], 532 original_keras_version=original_keras_version, --> 533 original_backend=original_backend)) 534 weights = weights[num_weights:] 535
D:\keras\engine\saving.py 在 preprocess_weights_for_loading(layer, weights, original_keras_version, original_backend, reshape) 673 weights[0] = np.reshape(weights[0], layer_weights_shape) 674 elif layer_weights_shape != weights[0]。形状: --> 675 weights[0] = np.transpose(weights[0], (3, 2, 0, 1)) 676 if layer. 类。name == 'ConvLSTM2D': 677 个权重1 = np.transpose(weights 1 , (3, 2, 0, 1))
c:\users\administrator\appdata\local\programs\python\python35\lib\site-packages\numpy\core\fromnumeric.py in transpose(a, axes) 596 597 """ --> 598 return _wrapfunc(a ,'转置',轴)599 600
c:\users\administrator\appdata\local\programs\python\python35\lib\site-packages\numpy\core\fromnumeric.py in _wrapfunc(obj, method, *args, **kwds) 49 def _wrapfunc(obj, method, *args, **kwds): 50 try: ---> 51 return getattr(obj, method)(*args, **kwds) 52 53 # 如果对象没有 AttributeError
ValueError:轴与数组不匹配`
我正在使用
Python 3.5.3
Keras 2.2.2
h5py 2.8.0
tensorflow-gpu 1.9.0
keras-contrib 2.0.8
Keras-Applications 1.0.4
Keras-Preprocessing 1.0.2
任何意见和建议将不胜感激。
解决方案
看起来像中描述的问题:
https://github.com/keras-team/keras/pull/11847
和
https://github.com/tensorflow/tensorflow/issues/27769
虽然该错误尚未修复,但仅当模型中同时存在可训练和不可训练权重时才会出现问题。如果您不需要进一步训练模型,您可以通过在保存之前冻结所有权重来解决此问题:
from keras import models
def freeze(model):
"""Freeze model weights in every layer."""
for layer in model.layers:
layer.trainable = False
if isinstance(layer, models.Model):
freeze(layer)
推荐阅读
- vb.net - 将文本框输入存储到数组中并将其显示到 Visual Basic 中的列表框
- django - Django返回表单错误,但输入似乎是有效的
- julia - Julia语言中结构中的数组问题
- c# - 如何在 ASP.NET Core 中获取 ModelMetadata 的值?
- github - 在 dbeaver(git 集成)中克隆/推送 git 组织存储库时出错
- azure - Application Insights 中的可用性测试自动禁用
- java - Wildfly EJB 通过 HTTP 冻结调用 JBoss
- vb.net - 如果未从 Wizard Installer MSI (Winform, VB.NET) 安装,则执行安装程序包
- scala - 加载到镶木地板时时间戳转换为 UTC
- javascript - CSS 动画不适用于 JavaScript?