ฉันพยายามประเมินเวลาทำนายของโมเดล keras ของฉันและตระหนักถึงสิ่งที่แปลก นอกเหนือจากความรวดเร็วตามปกติทุกครั้งในขณะที่แบบจำลองต้องใช้เวลานานในการทำนาย และไม่เพียงแค่นั้นเวลาเหล่านั้นยังเพิ่มโมเดลที่ยาวขึ้น ฉันเพิ่มตัวอย่างการทำงานขั้นต่ำเพื่อทำให้เกิดข้อผิดพลาดซ้ำ
import time
import numpy as np
from sklearn.datasets import make_classification
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
# Make a dummy classification problem
X, y = make_classification()
# Make a dummy model
model = Sequential()
model.add(Dense(10, activation='relu',name='input',input_shape=(X.shape[1],)))
model.add(Dense(2, activation='softmax',name='predictions'))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(X, y, verbose=0, batch_size=20, epochs=100)
for i in range(1000):
# Pick a random sample
sample = np.expand_dims(X[np.random.randint(99), :], axis=0)
# Record the prediction time 10x and then take the average
start = time.time()
for j in range(10):
y_pred = model.predict_classes(sample)
end = time.time()
print('%d, %0.7f' % (i, (end-start)/10))
เวลาไม่ขึ้นอยู่กับตัวอย่าง (กำลังสุ่มเลือก) หากการทดสอบซ้ำดัชนีในลูปที่การทำนายใช้เวลานานจะเป็น (เกือบ) เหมือนเดิมอีกครั้ง
ฉันกำลังใช้:
tensorflow 2.0.0
python 3.7.4
สำหรับใบสมัครของฉันฉันจำเป็นต้องรับประกันการใช้งานในเวลาที่กำหนด อย่างไรก็ตามนี่เป็นสิ่งที่เป็นไปไม่ได้เมื่อพิจารณาถึงพฤติกรรมนั้น เกิดอะไรขึ้น? มันเป็นข้อบกพร่องใน Keras หรือข้อผิดพลาดในแบ็กเอนด์เทนโฟลว์?
แก้ไข:
predict_on_batch
แสดงพฤติกรรมเดียวกัน แต่กระจัดกระจายมากขึ้น:
y_pred = model(sample, training=False).numpy()
แสดงค่าผิดปกติบางอย่างเช่นกัน แต่จะไม่เพิ่มขึ้น
แก้ไข 2: ฉันปรับลดรุ่นเป็น tensorflow 1 เวอร์ชันล่าสุด (1.15) ไม่เพียง แต่ปัญหาจะไม่มีอยู่อีกต่อไป แต่ยังมีการทำนายเวลา "ปกติ" ที่ดีขึ้นอย่างมาก! ฉันไม่เห็นหนามแหลมสองตัวเป็นปัญหาเนื่องจากไม่ปรากฏขึ้นเมื่อฉันทำการทดสอบซ้ำ (อย่างน้อยก็ไม่ได้ที่ดัชนีเดียวกันและเพิ่มขึ้นเป็นเส้นตรง) และมีค่าร้อยละไม่ใหญ่เท่ากับในพล็อตแรก
เราสามารถสรุปได้ว่านี่เป็นปัญหาที่เกิดขึ้นกับ tensorflow 2.0 ซึ่งแสดงพฤติกรรมที่คล้ายคลึงกันในสถานการณ์อื่น ๆ เช่น @OverLordGoldDragon กล่าวถึง
y_pred = model(sample).numpy()
และด้วยy_pred = model(sample, training=False).numpy()
?
predict_classes
ก็ยังเร็วที่สุด .... ดูเหมือนว่า เกี่ยวกับpredict
อะไร
predict_on_batch
แทน