ось не соответствует массиву при загрузке весов модели из файла h5 - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь загрузить веса из сохраненного, но я застрял здесь.Я пытался отследить проблему с 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_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

Или, если вы можете указать альтернативный способ сохранения и загрузки весов, это было бы очень полезно!

РЕДАКТИРОВАТЬ: Вот описание модели:

____________
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]                    
========================================================
...