新闻资讯

新闻资讯 媒体报道

python - 如何在Keras中从HDF5文件加载模型?

编辑:016     时间:2021-12-30

在Keras中如何从HDF5文件加载模型?

我试过的保存模型的代码如下:

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 

 

最佳办法

load_weights仅设置网络的权重。在调用load_weights之前,您仍然需要定义其体系结构:

def create_model(): 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')) return model def train(): model = create_model()
   sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
   model.compile(loss='binary_crossentropy', optimizer=sgd)

   checkpointer = ModelCheckpoint(filepath="/tmp/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]) def load_trained_model(weights_path): model = create_model()
   model.load_weights(weights_path)

 

次佳办法

如果您将完整的模型(不仅是权重)存储在HDF5文件中,那么它就很简单了

from keras.models import load_model
model = load_model('model.h5')

 

第三种办法

请参阅以下示例代码,了解如何构建基本的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))

Keras模型


郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

回复列表

相关推荐