Keras:load_model ValueError:轴与数组不匹配

时间:2018-08-21 08:43:10

标签: python keras deep-learning

我正在用自己的数据集研究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')

再次,发生错误:

  

ValueError跟踪(最近一次通话最近)    在()中   ----> 1个模型= load_model('generator.h5')

     

D:load_model中的D:\ keras \ engine \ saving.py(文件路径,custom_objects,编译)       262       263#设定砝码   -> 264 load_weights_from_hdf5_group(f ['model_weights'],model.layers)       265       266(如果编译):

     

D:load_weights_from_hdf5_group中的D:\ keras \ engine \ saving.py(f,图层,重塑)       第914章       915 original_backend,   -> 916 reshape = reshape)       第917章真相大白       918提高ValueError('Layer#'+ str(k)+

     在preprocess_weights_for_loading中的

D:\ keras \ engine \ saving.py(图层,权重,original_keras_version,original_backend,重塑)       555权重= convert_nested_time_distributed(权重)       556个Elif图层。名称在['Model','Sequential']中:   -> 557权重= convert_nested_model(权重)       558       559,如果original_keras_version =='1':

     

D:\ keras \ engine \ saving.py在convert_nested_model中(权重)       543 weights = weights [:num_weights],       544 original_keras_version = original_keras_version,   -> 545 original_backend = original_backend))       546权重=权重[num_weights:]       547返回new_weights

     在preprocess_weights_for_loading中的

D:\ keras \ engine \ saving.py(图层,权重,original_keras_version,original_backend,重塑)       555权重= convert_nested_time_distributed(权重)       556个Elif图层。名称在['Model','Sequential']中:   -> 557权重= convert_nested_model(权重)       558       559,如果original_keras_version =='1':

     

D:\ keras \ engine \ saving.py在convert_nested_model中(权重)       531 weights = weights [:num_weights],       532 original_keras_version = original_keras_version,   -> 533 original_backend = original_backend))       534重量=重量[num_weights:]       535

     在preprocess_weights_for_loading中的

D:\ keras \ engine \ saving.py(图层,权重,original_keras_version,original_backend,重塑)       673权重[0] = np.reshape(权重[0],layer_weights_shape)       674 elif layer_weights_shape!= weights [0] .shape:   -> 675 weights [0] = np.transpose(weights [0],(3,2,0,1))       676 if layer。名称 =='ConvLSTM2D':       677权重1 = np.transpose(权重1,(3,2,0,1))

     

c:\ users \ administrator \ appdata \ local \ programs \ python \ python35 \ lib \ site-packages \ numpy \ core \ fromnumeric.py在转置(a,轴)中       596       597“”“   -> 598 return _wrapfunc(a,'transpose',axes)       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次尝试:   ---> 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

任何建议都将受到赞赏。

3 个答案:

答案 0 :(得分:0)

尝试将keras版本降级为2.1.5。它为我解决了这个问题。

答案 1 :(得分:0)

看起来像下面描述的问题:

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)

答案 2 :(得分:0)

您是否在同一台机器上执行训练和预测? 将Tensorflow的版本更改为用于训练和预测机器的相同版本对我来说解决了这个问题