Я использовал колбу для разработки API-интерфейсов для прогнозирования тегов изображений, которые были развернуты в локальной сети.Я проверил мой API с отправкой времени json с терминала с помощью следующей команды:
time curl http://127.0.0.1:5000/api/ -d '{"image_links":["https://1", "https://2"], "type":"100"}' -H 'Content-Type: application/json'
Я нашел первый раз, чтобы отправить файл json, время прогнозирования каждого тега составляет около: 40 с.Во второй раз при отправке моего файла json время прогнозирования для каждого тега составляет около 60 ~ 70 с, но в третий раз время каждого из них составляет около 100 ~ 110 с.Я обнаружил, что время увеличивается, когда я снова отправляю свой JSON.Но после перезапуска приложения первый раз нормально, а второй увеличивается.Я думаю, что в моем коде есть ошибка, и там около 10 тегов, и у каждого тега есть 5-кратные модели, я использовал keras для обучения своей модели:
def load_model(img_dim, num_label):
print('begin to get model')
input_tensor = Input(shape=img_dim)
base_model = InceptionResNetV2(include_top=False, input_shape=img_dim, weights='imagenet')
x = input_tensor
x = Lambda(preprocess_input, name='preprocessing')(x)
x = base_model(x)
x = GlobalAveragePooling2D()(x)
x = Dropout(0.5)(x)
x = Dense(num_label, activation='softmax', name='softmax')(x)
model = Model(input_tensor, x)
print('finish loading model')
return model
@app.route("/api/", methods=["POST"])
def predict_tag():
print('beginning to prediction')
data = request.get_json()
model_image = load_model(img_dim, num_label)
len_test = validation_batch.shape[0]
for t_image in lst_main_image:
n_fold = 5
preds_test = np.zeros((len_test, 2), dtype=np.float)
print('t_image:', t_image)
tag_i_time = time.time()
for i in range(1, 6):
model_image.load_weights('../model/{}/main_image/{}_aug_inception.fold_{}{}.hdf5'.format(industry, industry, i, t_image))
model_image.compile(optimizer=Adam(lr=1e-4), loss='binary_crossentropy', metrics=['accuracy'])
test_prob = model_image.predict(validation_batch)
preds_test += test_prob
tag_i_e = time.time()
print('each tag the times:', t_image, tag_i_e - tag_i_time)
preds_test /= n_fold
y_pred = preds_test.argmax(axis=-1)
lst_result_image.append(list(y_pred))
print('finish predict the tag:', t_image)
lst_all_result = {}
return jsonify(lst_all_result)
if __name__ == '__main__':
app.run(debug=True)
Я думаю, что это проблема памяти, но какчтобы решить эту проблему, поскольку, когда я перезагружаю свое приложение или жду некоторое время (один час), время предсказания нормальное.