나는 keras를 사용하여 분류 프로그램을 구현했습니다. 큰 이미지 세트가 있고 for 루프를 사용하여 각 이미지를 예측하고 싶습니다.keras는 메모리 스왑 증가를 무기한 예측합니다
그러나 새 이미지가 계산 될 때마다 스왑 메모리가 증가합니다. 나는 예측 함수 내부의 모든 변수를 삭제하려고 시도했지만 (문제가있는 것은이 함수 내부에 있다고 확신 함) 메모리는 여전히 증가합니다.
for img in images:
predict(img, model, categ_par, gl_par)
및 해당 기능 :
def predict(image_path, model, categ_par, gl_par):
print("[INFO] loading and preprocessing image...")
orig = cv2.imread(image_path)
image = load_img(image_path, target_size=(gl_par.img_width, gl_par.img_height))
image = img_to_array(image)
# important! otherwise the predictions will be '0'
image = image/255
image = np.expand_dims(image, axis=0)
# build the VGG16 network
if(categ_par.method == 'VGG16'):
model = applications.VGG16(include_top=False, weights='imagenet')
if(categ_par.method == 'InceptionV3'):
model = applications.InceptionV3(include_top=False, weights='imagenet')
# get the bottleneck prediction from the pre-trained VGG16 model
bottleneck_prediction = model.predict(image)
# build top model
model = Sequential()
model.add(Flatten(input_shape=bottleneck_prediction.shape[1:]))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(categ_par.n_class, activation='softmax'))
model.load_weights(categ_par.top_model_weights_path)
# use the bottleneck prediction on the top model to get the final classification
class_predicted = model.predict_classes(bottleneck_prediction)
probability_predicted = (model.predict_proba(bottleneck_prediction))
classe = pd.DataFrame(list(zip(categ_par.class_indices.keys(), list(probability_predicted[0])))).\
rename(columns = {0:'type', 1: 'prob'}).reset_index(drop=True)
#print(classe)
del model
del bottleneck_prediction
del image
del orig
del class_predicted
del probability_predicted
return classe.set_index(['type']).T
예측이 이루어질 때마다 새 모델을 만드는 것처럼 보입니다. 그게 틀림 없습니까? –