我正在使用带有Tensorflow后端的Keras。一旦我有了模型,我就使用model.predict_proba来预测概率。此预测函数所花费的时间似乎与数组的大小无关,或者更少依赖于它预测的数组的大小。
我可以做些什么来减少这段时间?
首先,我运行循环100次并按预期计算时间
fname_model = folder+"/my_modelbuy_rocbased.h5"
best_model = load_model(fname_model)
best_model.compile(loss='categorical_crossentropy', optimizer='Adam',
metrics=['acc'])
X_test_orig = pd.read_csv(folder+"/ret_out_20170402.csv",sep=",")
x_test = X_test_orig.as_matrix()
y1=np.array([x_test[1]])
print y1.shape
t1=datetime.now().strftime("%H:%M:%S.%f")
for i in range(0,1,1):
prob1= best_model.predict_proba(y1)
t2=datetime.now().strftime("%H:%M:%S.%f")
print "time taken ", t1,t2
**********************************************后运行***********************
时间11:50:53.909226 11:50:54.372596
因此,对于100次预测,所用时间为11:50:54.372596减去11:50:53.909226,大约是463毫秒,这意味着每次预测为4.63毫秒
但是如果我只为一个预测运行循环,如下所示,
$_FILES['photo']['error']
**********************************************后运行***********************
时间为11:54:40.683225 11:54:41.144969
因此,对于1次预测,所花费的时间是11:54:40.683225减去11:54:41.144969,这也是大约440毫秒。
无论呼叫次数多少,模型似乎都会有固定的时间。我怎样才能减少这个?
答案 0 :(得分:0)
这是预期的,因为您预测单个输入并且计算图(模型)是相同的,因此预测需要相同的时间。就像你期望同一计算的运行时间不同而不会发生。
现在有一种方法可以加速:不是预测单个元素,而是将它们转换为ndarray(样本,功能),只需调用model.predict
,它将在批处理中处理并运行并行计算取决于您的后端设置。
另一点是你不需要编译来预测。编译会将损失和优化器操作添加到图表中,如果您只是预测,则不需要该操作。这将减少模型在内存中加载的时间等。