Не удается загрузить модель из файла Json или Yaml или с помощью функции load_model

#python #json #keras #yaml #lstm

#python #json #keras #yaml #lstm

Вопрос:

Я пытаюсь загрузить модель следующими способами, но, похоже, ничего не работает.

Json:

 model_json = model.to_json()
with open('C:/Users/path/model.json', "w") as json_file:
    json_file.write(model_json)
# serialize weights to HDF5
model.save_weights("C:/Users/path/ΔΙΠΛΩΜΑΤΙΚΗ/model_json_1.h5")
print("Saved model to disk")
 

Загрузка из файла Json:

 json_file = open('C:/Users/path/model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json, {"tf":tf})
# load weights into new model
loaded_model.load_weights("C:/Users/path/model_json_1.h5")
print("Loaded model from disk")
 

Yaml:

 model_yaml = model.to_yaml()
with open("C:/Users/path/model.yaml", "w") as yaml_file:
    yaml_file.write(model_yaml)
# serialize weights to HDF5
model.save_weights("C:/Users/path/model_yam.h5")
print("Saved model to disk")
 

Загрузить модель из файла Yaml:

 yaml_file = open('C:/Users/path/model.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("C:/Users/path/model_yam.h5")
print("Loaded model from disk")
 

Я также пытаюсь выполнить следующее:

 model.save("C:/Users/user/Desktop/ΔΙΠΛΩΜΑΤΙΚΗ/model_save.h5")
 

Загрузить модель:

 model = load_model('C:/Users/path/model_save.h5', compile = False)
 

Я получаю ту же ошибку всеми вышеперечисленными способами.
ОШИБКА:

 AttributeError: 'str' object has no attribute 'decode'
 

Я строю свою модель следующим образом.

Модель:

  print('Build model...')
    main_input = Input(shape=(maxlen, num_features), name='main_input')
    
    l1 = LSTM(100, implementation=2, kernel_initializer='glorot_uniform', return_sequences=True, dropout=0.2)(main_input) # the shared layer
    
    b1 = BatchNormalization()(l1)
  
    l2_1 = LSTM(100, implementation=2, kernel_initializer='glorot_uniform', return_sequences=False, dropout=0.2)(b1) # the layer specialized in activity prediction
   
    b2_1 = BatchNormalization()(l2_1)
    
    l2_2 = LSTM(100, implementation=2, kernel_initializer='glorot_uniform', return_sequences=False, dropout=0.2)(b1) # the layer specialized in time prediction
   
    b2_2 = BatchNormalization()(l2_2)
    
    act_output = Dense(len(target_chars), activation='softmax', kernel_initializer='glorot_uniform', name='act_output')(b2_1)
    
    time_output = Dense(1, kernel_initializer='glorot_uniform', name='time_output')(b2_2)
    
    model = Model(inputs=[main_input], outputs=[act_output, time_output])
    
    opt = Nadam(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=1e-08, schedule_decay=0.004, clipvalue=3)
  
    lr_reducer = ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=10, verbose=0, mode='auto', min_delta=0.0001, cooldown=0, min_lr=0)
   
model.fit(X, {'act_output':y_a, 'time_output':y_t}, validation_split=0.2, verbose=2, callbacks=[early_stopping, model_checkpoint, lr_reducer], batch_size=maxlen, epochs=500)
 

Возможно, эта ошибка означает, что я неправильно строю свою модель.?
Что я могу сделать, чтобы исправить эту ошибку.?

Спасибо.

Комментарии:

1. Возможно, версия TensorFlow, которую вы использовали для сохранения модели, отличается от той, которую вы используете для загрузки модели

2. Попробуйте это: load_model(model_path, compile=False)