মোবাইল অ্যাপের জন্য সাধারণ "এমনিস্ট" মডেল ট্রেনিং, টেন্সরফ্লো লাইট দিয়ে (২)
হালের ফ্যাশন 'এমনিস্ট' ডেটাসেট নিয়ে কাজ করলেও আমার মন পড়েছিল কিভাবে আসল 'এমনিস্ট' নিয়ে কাজ করা যায়। সেই সুযোগটা নিলাম এই মোবাইল অ্যাপ এর জন্য মডেল তৈরি করতে গিয়ে। একই কোড কাজ করবে এখানে, ফ্যাশন এমনিস্টএর মতো। শুধুমাত্র অ্যাডঅন, মডেলটাকে কনভার্ট করবো টেন্সরফ্লো লাইটে - মোবাইল ডিভাইসে চালানোর জন্য
# শুধুমাত্র টেন্সরফ্লো ২.x এর জন্য
try:
# %tensorflow_version only exists in Colab.
%tensorflow_version 2.x
except Exception:
pass
from __future__ import absolute_import, division, print_function, unicode_literals
# টেন্সরফ্লো ২.x এবং tf.keras
import tensorflow as tf
from tensorflow import keras
# সাহায্যকারী লাইব্রেরি
import numpy as np
import matplotlib.pyplot as plt
import random
print(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.0
test_images = test_images / 255.0
print('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 files
files.download('mnist.tflite')
print('`mnist.tflite` has been downloaded')