মোবাইল অ্যাপের জন্য সাধারণ "এমনিস্ট" মডেল ট্রেনিং, টেন্সরফ্লো লাইট দিয়ে (২)
হালের ফ্যাশন 'এমনিস্ট' ডেটাসেট নিয়ে কাজ করলেও আমার মন পড়েছিল কিভাবে আসল 'এমনিস্ট' নিয়ে কাজ করা যায়। সেই সুযোগটা নিলাম এই মোবাইল অ্যাপ এর জন্য মডেল তৈরি করতে গিয়ে। একই কোড কাজ করবে এখানে, ফ্যাশন এমনিস্টএর মতো। শুধুমাত্র অ্যাডঅন, মডেলটাকে কনভার্ট করবো টেন্সরফ্লো লাইটে - মোবাইল ডিভাইসে চালানোর জন্য
# শুধুমাত্র টেন্সরফ্লো ২.x এর জন্যtry:# %tensorflow_version only exists in Colab.%tensorflow_version 2.xexceptException:passfrom__future__import absolute_import, division, print_function, unicode_literals# টেন্সরফ্লো ২.x এবং tf.kerasimport tensorflow as tffrom tensorflow import keras# সাহায্যকারী লাইব্রেরিimport numpy as npimport matplotlib.pyplot as pltimport randomprint(tf.__version__)
TensorFlow 2.x selected.
2.1.0-rc1
ডাউনলোড করি "এমনিস্ট" ডেটাসেট
একই ৬০,০০০ এবং ১০,০০০ ট্রেনিং এবং টেস্ট ইমেজ তবে এবার হাতেলেখা ০ থেকে ৯ পর্যন্ত ইংরেজি সংখ্যা। ০ থেকে ৯ সংখ্যা মানে আগের মতো ১০টা ক্লাস।
# কেরাস থেকে এপিআই দিয়ে ডাউনলোড করে দেখাচ্ছি, টিএফডিএস নয়, ভ্যারিয়েশন# ট্রেনিং এবং টেস্ট ডেটাসেটmnist = keras.datasets.mnist(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 0s 0us/step
# আগের মতো নর্মালাইজ করে ০ থেকে ১ এর মধ্যে রাখছিtrain_images = train_images /255.0test_images = test_images /255.0print('Pixels are normalized')
Pixels are normalized
টেন্সরফ্লো মডেল তৈরি ডিজিট ক্লাসিফাই করার জন্য
একদম আগের মতো। কোন পার্থক্য় নেই।
# শুরুতে মডেল আর্কিটেকচার ডিফাইন করছিmodel = keras.Sequential([ keras.layers.InputLayer(input_shape=(28, 28)), keras.layers.Reshape(target_shape=(28, 28, 1)), keras.layers.Conv2D(filters=12, kernel_size=(3, 3), activation=tf.nn.relu), keras.layers.MaxPooling2D(pool_size=(2, 2)), keras.layers.Flatten(), keras.layers.Dense(10, activation=tf.nn.softmax)])# মডেলকে ট্রেইন করতে হবে, তার আগে কম্পাইলmodel.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])# ডিজিট ক্লাসিফিকেশন মডেল ট্রেনিংmodel.fit(train_images, train_labels, epochs=5)
এখানে যে বাড়তি ডাইমেনশন আছে None শেপ দিয়ে প্রতিটা লেয়ারে, সেটা আসলে ব্যাচ ডাইমেনশন। যেহেতু ডেটা ব্যাচে প্রসেস হয়, সেকারণে টেন্সরফ্লো নিজে থেকে যোগ করে দেয়।
এই মডেলটাকে ডাউনলোড করছি এখানে যাতে এটাকে অ্যান্ড্রয়েড অ্যাপে ঢুকিয়ে কাজ করতে পারি। এটাকে কপি করে রাখতে হবে দরকারী ফোল্ডারে।
mnist.tflite ফাইলটা একবারে ডাউনলোড না হলে শুধুমাত্র এই সেলটাকে আবার চালাতে হবে।
# ফাইলটাকে সেভ করে রাখি এখানে mnist.tflite হিসেবেf =open('mnist.tflite', "wb")f.write(tflite_float_model)f.close()# ডাউনলোড করি mnist.tflite হিসেবেfrom google.colab import filesfiles.download('mnist.tflite')print('`mnist.tflite` has been downloaded')