আমি আমার কেরাস মডেলের পূর্বাভাস সময়টির একটি অনুমান পেতে চেষ্টা করেছি এবং কিছু অদ্ভুত উপলব্ধি করেছি। সাধারনত মোটামুটি দ্রুত গতি ছাড়াও একবারে একবারে মডেলটির ভবিষ্যদ্বাণী নিয়ে আসতে বেশ দীর্ঘ প্রয়োজন। এবং শুধু তাই নয়, এই সময়গুলি আরও বেশি বাড়ায় মডেল চালায়। আমি ত্রুটিটি পুনরুত্পাদন করতে একটি ন্যূনতম কাজের উদাহরণ যুক্ত করেছি।
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
আমার আবেদনের জন্য আমাকে একটি নির্দিষ্ট সময়ে কার্যকর করার গ্যারান্টি দেওয়া দরকার need যদিও আচরণটি বিবেচনা করে এটি অসম্ভব। কি ভুল হচ্ছে? এটি কেরাসে বাগ বা টেনসরফ্লো ব্যাকএন্ডে কোনও বাগ?
সম্পাদনা:
predict_on_batch
একই আচরণ দেখায়, তবে আরও কম:
y_pred = model(sample, training=False).numpy()
কিছু ভারী বিদেশী দেখায়, তবে তারা বাড়ছে না।
সম্পাদনা 2: আমি সর্বশেষতম টেনস্রোফ্লো 1 সংস্করণে (1.15) ডাউনগ্রেড করেছি। সমস্যাটি এখন আর বিদ্যমান নয়, "সাধারণ" পূর্বাভাসের সময়টিও উল্লেখযোগ্যভাবে উন্নত হয়েছে! আমি দুটি স্পাইককে সমস্যাযুক্ত হিসাবে দেখতে পাচ্ছি না, কারণ আমি পরীক্ষার পুনরাবৃত্তি করার সময় সেগুলি উপস্থিত হয় নি (কমপক্ষে একই সূচকগুলিতে এবং লিনিরিয়ালি বৃদ্ধি পাচ্ছিল না) এবং প্রথম প্লটের মতো শতাংশই বড় নয়।
এইভাবে আমরা উপসংহারে পৌঁছাতে পারি যে এটি টেনস্রোফ্লো ২.০-র অন্তর্নিহিত সমস্যা বলে মনে হচ্ছে, যা অন্যান্য পরিস্থিতিতে যেমনটি ওভারলর্ডগোল্ডড্রাগন উল্লেখ করেছে তেমন আচরণ দেখায়।
y_pred = model(sample).numpy()
এবং y_pred = model(sample, training=False).numpy()
?
predict_classes
এখনও এটি দ্রুততম .... মনে হয়। শুধু কি predict
?
predict_on_batch
পরিবর্তে চেষ্টা করেন তবে কী ঘটে ?