Как загрузить модель из файла HDF5 в Keras?
Что пробовал:
model = Sequential()
model.add(Dense(64, input_dim=14, init='uniform'))
model.add(LeakyReLU(alpha=0.3))
model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
model.add(Dropout(0.5))
model.add(Dense(64, init='uniform'))
model.add(LeakyReLU(alpha=0.3))
model.add(BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None))
model.add(Dropout(0.5))
model.add(Dense(2, init='uniform'))
model.add(Activation('softmax'))
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd)
checkpointer = ModelCheckpoint(filepath="/weights.hdf5", verbose=1, save_best_only=True)
model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True, validation_split=0.2, verbose = 2, callbacks=[checkpointer])
Приведенный выше код успешно сохраняет лучшую модель в файл с именем weights.hdf5. Что я хочу сделать, так это загрузить эту модель. В приведенном ниже коде показано, как я пытался это сделать:
model2 = Sequential()
model2.load_weights("/Users/Desktop/SquareSpace/weights.hdf5")
Это ошибка, которую я получаю:
IndexError Traceback (most recent call last)
<ipython-input-101-ec968f9e95c5> in <module>()
1 model2 = Sequential()
----> 2 model2.load_weights("/Users/Desktop/SquareSpace/weights.hdf5")
/Applications/anaconda/lib/python2.7/site-packages/keras/models.pyc in load_weights(self, filepath)
582 g = f['layer_{}'.format(k)]
583 weights = [g['param_{}'.format(p)] for p in range(g.attrs['nb_params'])]
--> 584 self.layers[k].set_weights(weights)
585 f.close()
586
IndexError: list index out of range
from keras.models import load_model
тогдаmodel = load_model('model.h5')
Если вы сохранили полную модель, а не только веса, в файле HDF5, это так же просто, как
from keras.models import load_model model = load_model('model.h5')
источник
encoder = autoencoder.layers[0] encoder.get_weights()
Но я получаю:FailedPreconditionError: Attempting to use uninitialized value lstm_1/kernel
См. Следующий пример кода о том, как построить базовую модель нейронной сети Keras, сохранить модель (JSON) и веса (HDF5) и загрузить их:
# create model model = Sequential() model.add(Dense(X.shape[1], input_dim=X.shape[1], activation='relu')) #Input Layer model.add(Dense(X.shape[1], activation='relu')) #Hidden Layer model.add(Dense(output_dim, activation='softmax')) #Output Layer # Compile & Fit model model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(X,Y,nb_epoch=5,batch_size=100,verbose=1) # serialize model to JSON model_json = model.to_json() with open("Data/model.json", "w") as json_file: json_file.write(simplejson.dumps(simplejson.loads(model_json), indent=4)) # serialize weights to HDF5 model.save_weights("Data/model.h5") print("Saved model to disk") # load json and create model json_file = open('Data/model.json', 'r') loaded_model_json = json_file.read() json_file.close() loaded_model = model_from_json(loaded_model_json) # load weights into new model loaded_model.load_weights("Data/model.h5") print("Loaded model from disk") # evaluate loaded model on test data # Define X_test & Y_test data first loaded_model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) score = loaded_model.evaluate(X_test, Y_test, verbose=0) print ("%s: %.2f%%" % (loaded_model.metrics_names[1], score[1]*100))
источник
Согласно официальной документации https://keras.io/getting-started/faq/#how-can-i-install-hdf5-or-h5py-to-save-my-models-in-keras
ты можешь сделать :
сначала проверьте, установлен ли у вас h5py, запустив
import h5py
если у вас нет ошибок при импорте h5py, вы можете сэкономить:
from keras.models import load_model model.save('my_model.h5') # creates a HDF5 file 'my_model.h5' del model # deletes the existing model # returns a compiled model # identical to the previous one model = load_model('my_model.h5')
Если вам нужно установить h5py http://docs.h5py.org/en/latest/build.html
источник
Я сделал таким образом
from keras.models import Sequential from keras_contrib.losses import import crf_loss from keras_contrib.metrics import crf_viterbi_accuracy # To save model model.save('my_model_01.hdf5') # To load the model custom_objects={'CRF': CRF,'crf_loss': crf_loss,'crf_viterbi_accuracy':crf_viterbi_accuracy} # To load a persisted model that uses the CRF layer model1 = load_model("/home/abc/my_model_01.hdf5", custom_objects = custom_objects)
источник