케라스에서 HDF5 파일에서 모델을 로드하는 방법은 무엇입니까?
케라스에서 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
중량뿐만 아니라 전체 모델을 HDF5 파일에 저장했다면 다음과 같이 간단합니다.
from keras.models import load_model
model = load_model('model.h5')
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)
기본 Keras Neural Net 모델을 구축하고 모델(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-i-install-hdf5 또는 h5py-to-save-my-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 을 설치해야 하는 경우
저는 이 오류로 인해 잠시 어려움을 겪다가 실수로 사용하고 있다는 것을 깨달았습니다.
with open(f'path_to_filename/{filename.h5}', "rb") as file:
loaded_model = tf.keras.models.load_model(file)
이 구문은 이 부하 모델 함수와 함께 사용되지 않습니다.
이 글을 쓰는 평범한 방법은 나에게 효과가 있었습니다.
loaded_model = tf.keras.models.load_model('path_to_filename/filename.h5')
이런 식으로 했습니다.
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)
언급URL : https://stackoverflow.com/questions/35074549/how-to-load-a-model-from-an-hdf5-file-in-keras
'programing' 카테고리의 다른 글
디렉토리 구조에서 가장 큰 10개의 파일을 찾는 방법 (0) | 2023.08.04 |
---|---|
웹 API에서 여러 필터를 사용한 실행 순서 (0) | 2023.08.04 |
NumberPicker에서 소프트 키보드 사용 (0) | 2023.08.04 |
포지셔닝포지셔닝화면 중앙의 요소 (0) | 2023.08.04 |
Unix 새 줄에서 Windows 새 줄로(Windows의 경우 (0) | 2023.08.04 |