부분적으로 훈련 된 Keras 모델을 저장하고 모델을 다시로드 한 후 교육을 계속할 수 있는지 궁금합니다.훈련 된 Keras 모델로드 및 계속 교육
이유는 앞으로 더 많은 교육 데이터를 보유하게 될 것이므로 전체 모델을 다시 교육하고 싶지 않기 때문입니다. 내가 사용하고
기능은 다음과 같습니다
#Partly train model
model.fit(first_training, first_classes, batch_size=32, nb_epoch=20)
#Save partly trained model
model.save('partly_trained.h5')
#Load partly trained model
from keras.models import load_model
model = load_model('partly_trained.h5')
#Continue training
model.fit(second_training, second_classes, batch_size=32, nb_epoch=20)
편집 1 : 추가 완벽하게 작동 예를
첫 번째 데이터 세트와 신 (新) 시대 마지막 시대의 손실 (10) 이후에하는 것이 될 것입니다 0.0748이고 정확도는 0.9863입니다.
모델을 저장, 삭제 및 다시로드 한 후 두 번째 데이터 집합에서 훈련 된 모델의 손실 및 정확도는 각각 0.1711 및 0.9504입니다.
이것은 새로운 교육 데이터 또는 완전히 재 훈련 된 모델에 의한 것입니까?
"""
Model by: http://machinelearningmastery.com/
"""
# load (downloaded if needed) the MNIST dataset
import numpy
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import np_utils
from keras.models import load_model
numpy.random.seed(7)
def baseline_model():
model = Sequential()
model.add(Dense(num_pixels, input_dim=num_pixels, init='normal', activation='relu'))
model.add(Dense(num_classes, init='normal', activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
if __name__ == '__main__':
# load data
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# flatten 28*28 images to a 784 vector for each image
num_pixels = X_train.shape[1] * X_train.shape[2]
X_train = X_train.reshape(X_train.shape[0], num_pixels).astype('float32')
X_test = X_test.reshape(X_test.shape[0], num_pixels).astype('float32')
# normalize inputs from 0-255 to 0-1
X_train = X_train/255
X_test = X_test/255
# one hot encode outputs
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
num_classes = y_test.shape[1]
# build the model
model = baseline_model()
#Partly train model
dataset1_x = X_train[:3000]
dataset1_y = y_train[:3000]
model.fit(dataset1_x, dataset1_y, nb_epoch=10, batch_size=200, verbose=2)
# Final evaluation of the model
scores = model.evaluate(X_test, y_test, verbose=0)
print("Baseline Error: %.2f%%" % (100-scores[1]*100))
#Save partly trained model
model.save('partly_trained.h5')
del model
#Reload model
model = load_model('partly_trained.h5')
#Continue training
dataset2_x = X_train[3000:]
dataset2_y = y_train[3000:]
model.fit(dataset2_x, dataset2_y, nb_epoch=10, batch_size=200, verbose=2)
scores = model.evaluate(X_test, y_test, verbose=0)
print("Baseline Error: %.2f%%" % (100-scores[1]*100))
테스트 해 보셨습니까? 그 일을하지 않을 이유는 없습니다. – maz
지금 보았던 것은 정확하게 모델을로드 한 후 약 10 %의 정확도로 떨어졌습니다 (첫 번째 신기원에서만). 리로딩이 작동하는 경우 이는 물론 새로운 교육 데이터로 인해 발생합니다. 그러나 나는 이것이 정말로 사실인지 확실히하고 싶다. –
model.save를 사용하여 모델을 직접 저장하거나 모델 체크 포인트 (https://keras.io/callbacks/#example-model-checkpoints)를 사용하고 있습니까? model.save를 사용하는 경우 최상의 모델 (최하위 오류) 대신 최신 모델 (즉, 마지막 에포크)을 저장할 가능성이 있습니까? 실제 코드를 제공 할 수 있습니까? – maz