簡體   English   中英

減少預測概率所需的時間

[英]Reducing time taken to predict probabilities

我在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,100,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毫秒

但是,如果我只對一個預測運行循環,如下所示,

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:54:40.683225 11:54:41.144969


因此,對於1個預測,花費的時間是11:54:40.683225減去11:54:41.144969,這也是大約440毫秒。

無論調用多少,模型似乎花費的時間都是固定的。 我該如何減少呢?

這是可以預期的,因為您要預測單個輸入並且計算圖(模型)是相同的,所以預測將花費相同的時間。 就像您期望針對同一計算的不同運行時不會發生那樣。

現在有一種加速的方法:不必預測單個元素,而是將它們轉換為ndarray(樣本,特征),然后調用model.predict進行批量處理,並根據您的后端設置並行運行計算。

另一點是您無需編譯即可預測。 編譯會將損失和優化器操作添加到圖形中,如果您只是預測,則不需要。 這將減少將模型加載到內存等中的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM