Python 轴不';从h5文件加载模型权重时不匹配数组
我试图从保存的一个加载重量,但我卡在这里。我试图跟踪keras github问题,但没有找到解决方案。从错误,我不明白,为什么它试图转置权重,这似乎是一个错误的原因Python 轴不';从h5文件加载模型权重时不匹配数组,python,tensorflow,keras,h5py,Python,Tensorflow,Keras,H5py,我试图从保存的一个加载重量,但我卡在这里。我试图跟踪keras github问题,但没有找到解决方案。从错误,我不明白,为什么它试图转置权重,这似乎是一个错误的原因 from keras.models import model_from_yaml # load YAML and create model yaml_file = open('model_dir/model-aug-reduce-lr-200-epoch.yaml', 'r') loaded_model_yaml = yaml_fi
from keras.models import model_from_yaml
# load YAML and create model
yaml_file = open('model_dir/model-aug-reduce-lr-200-epoch.yaml', 'r')
loaded_model_yaml = yaml_file.read()
yaml_file.close()
loaded_model = model_from_yaml(loaded_model_yaml)
# load weights into new model
loaded_model.load_weights("model_dir/model-aug-reduce-lr-200-epoch.h5")
print("Loaded model from disk")
它会生成以下错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-147-74cee166e4ca> in <module>()
----> 1 loaded_model.load_weights('model_dir/model-aug-reduce-lr-200-epoch.h5')
/home/ankish1/anaconda3/envs/tensor/lib/python2.7/site-packages/keras/engine/network.pyc in load_weights(self, filepath, by_name, skip_mismatch, reshape)
1164 else:
1165 saving.load_weights_from_hdf5_group(
-> 1166 f, self.layers, reshape=reshape)
1167
1168 def _updated_config(self):
/home/ankish1/anaconda3/envs/tensor/lib/python2.7/site-packages/keras/engine/saving.pyc in load_weights_from_hdf5_group(f, layers, reshape)
1043 original_keras_version,
1044 original_backend,
-> 1045 reshape=reshape)
1046 if len(weight_values) != len(symbolic_weights):
1047 raise ValueError('Layer #' + str(k) +
/home/ankish1/anaconda3/envs/tensor/lib/python2.7/site-packages/keras/engine/saving.pyc in preprocess_weights_for_loading(layer, weights, original_keras_version, original_backend, reshape)
680 weights = convert_nested_time_distributed(weights)
681 elif layer.__class__.__name__ in ['Model', 'Sequential']:
--> 682 weights = convert_nested_model(weights)
683
684 if original_keras_version == '1':
/home/ankish1/anaconda3/envs/tensor/lib/python2.7/site-packages/keras/engine/saving.pyc in convert_nested_model(weights)
668 weights=weights[:num_weights],
669 original_keras_version=original_keras_version,
--> 670 original_backend=original_backend))
671 weights = weights[num_weights:]
672 return new_weights
/home/ankish1/anaconda3/envs/tensor/lib/python2.7/site-packages/keras/engine/saving.pyc in preprocess_weights_for_loading(layer, weights, original_keras_version, original_backend, reshape)
680 weights = convert_nested_time_distributed(weights)
681 elif layer.__class__.__name__ in ['Model', 'Sequential']:
--> 682 weights = convert_nested_model(weights)
683
684 if original_keras_version == '1':
/home/ankish1/anaconda3/envs/tensor/lib/python2.7/site-packages/keras/engine/saving.pyc in convert_nested_model(weights)
656 weights=weights[:num_weights],
657 original_keras_version=original_keras_version,
--> 658 original_backend=original_backend))
659 weights = weights[num_weights:]
660
/home/ankish1/anaconda3/envs/tensor/lib/python2.7/site-packages/keras/engine/saving.pyc in preprocess_weights_for_loading(layer, weights, original_keras_version, original_backend, reshape)
799 weights[0] = np.reshape(weights[0], layer_weights_shape)
800 elif layer_weights_shape != weights[0].shape:
--> 801 weights[0] = np.transpose(weights[0], (3, 2, 0, 1))
802 if layer.__class__.__name__ == 'ConvLSTM2D':
803 weights[1] = np.transpose(weights[1], (3, 2, 0, 1))
/home/ankish1/anaconda3/envs/tensor/lib/python2.7/site-packages/numpy/core/fromnumeric.pyc in transpose(a, axes)
596
597 """
--> 598 return _wrapfunc(a, 'transpose', axes)
599
600
/home/ankish1/anaconda3/envs/tensor/lib/python2.7/site-packages/numpy/core/fromnumeric.pyc in _wrapfunc(obj, method, *args, **kwds)
49 def _wrapfunc(obj, method, *args, **kwds):
50 try:
---> 51 return getattr(obj, method)(*args, **kwds)
52
53 # An AttributeError occurs if the object does not have
ValueError: axes don't match array
你好您是否以任何方式解决了此问题?没有,我最终使用
numpy
格式保存模型的整个权重,并在加载时使用set\u weights
。此错误由lambda层引起
。你可以试试看。
____________
Layer (type) Output Shape Param # Connected to
========================================================
input_1 (InputLayer) (None, 224, 224, 3) 0
________________________________________________________
model_1 (Model) (None, 7, 7, 1024) 3228864 input_1[0][0]
________________________________________________________
DetectionLayer (Conv2D) (None, 7, 7, 60) 61500 model_1[1][0]
________________________________________________________
reshape_1 (Reshape) (None, 7, 7, 10, 6) 0 DetectionLayer[0][0]
__________________________________________________________________________________________________
input_2 (InputLayer) (None, 1, 1, 1, 5, 4 0
__________________________________________________________________________________________________
lambda_1 (Lambda) (None, 7, 7, 10, 6) 0 reshape_1[0][0]
input_2[0][0]
========================================================