PyTorch বনাম TensorFlow/Keras: কখন কোনটা, industry কী চায়

model save/load ও inference (Series 06, Episode 08)

🟢 BEGINNER Series 06 — Deep Learning with PyTorch Episode 08 / 08

📑 এই পর্বে যা যা আছে

🧩 ১. গল্প: "TensorFlow শিখব নাকি PyTorch?"

Series 06-এর শেষ প্রান্তে Rahim একটা দুশ্চিন্তায় — LinkedIn-এ কিছু job-এ "PyTorch", কিছুতে "TensorFlow", কিছুতে "Keras" লেখা। সে ভাবছে, "আমি তো PyTorch শিখলাম, TensorFlow না জানলে কি চাকরি পাব না?"

Rahim: "আপা, দুটোই কি আলাদা করে শিখতে হবে? সময় তো কম।"

Maya: "না। মূল ধারণাগুলো — tensor, layer, loss, gradient descent, training loop — দুটোতেই এক। তুমি যেটা গভীরে শিখেছ (PyTorch), সেটার concept জানলে TensorFlow-তে সুইচ করা কয়েক দিনের ব্যাপার। আজ আমরা পার্থক্যগুলো দেখব, আর সবচেয়ে জরুরি production skill শিখব — model save, load আর inference। কারণ train করা model যদি সেভ করে আবার চালাতে না পারো, সেটা তো deploy-ই হবে না।"

⚖️ ২. দুটোই কী করে — মূলত একই কাজ

PyTorch আর TensorFlow — দুটোই Deep Learning framework। দুটোই দেয়: GPU-সমর্থিত tensor, automatic differentiation (gradient), layer/optimizer/loss-এর tools। মানে এই সিরিজে যা শিখলেন (neuron, activation, backprop, training loop, CNN, transfer learning) — সব ধারণাই দুই জায়গায় প্রযোজ্য। শুধু syntax আলাদা।

মনে রাখবেন: framework একটা হাতিয়ার, ধারণা নয়। concept জানলে হাতিয়ার বদলানো সহজ। Interview-তে recruiter দেখে আপনি DL বোঝেন কিনা, শুধু একটা library-র API মুখস্থ কিনা তা নয়।

🔍 ৩. PyTorch বনাম TensorFlow/Keras — সৎ তুলনা

দিকPyTorchTensorFlow / Keras
Syntax অনুভূতিPythonic, স্বাভাবিকKeras খুব সংক্ষিপ্ত (high-level)
Debuggingসহজ (dynamic graph, সাধারণ Python debugger চলে)আগে কঠিন ছিল; TF2-এ ভালো হয়েছে
Research/paperআজ প্রায় প্রভাবশালীআগে জনপ্রিয় ছিল
Mobile/edge deployউন্নত হচ্ছে (ExecuTorch)পরিণত (TF Lite)
EcosystemHugging Face এর উপর দাঁড়ানোTF Serving, TFX পরিপক্ব
শেখার সহজতা (শুরুতে)মাঝারিKeras দিয়ে খুব সহজ শুরু
এক লাইনের পরামর্শ: junior হিসেবে একটা (PyTorch) গভীরে শিখুন, অন্যটার (Keras) সাথে পরিচিত থাকুন। "PyTorch primary, Keras জানি" — এটাই বেশিরভাগ বাংলাদেশি JD-র জন্য যথেষ্ট।

🇧🇩 ৪. Industry বাংলাদেশে কী চায়?

তাই দুশ্চিন্তা নয়। concept শক্ত থাকলে, প্রথম চাকরিতে কোম্পানির framework-এ মানিয়ে নেওয়া দ্রুত হয়।

💻 ৫. একই MLP: PyTorch বনাম Keras (পাশাপাশি)

পার্থক্যটা চোখে দেখুন — একই ২-layer classifier:

# ---------- PyTorch ---------- import torch.nn as nn model = nn.Sequential( nn.Linear(10, 32), nn.ReLU(), nn.Linear(32, 2), ) # আপনি নিজে training loop লেখেন (zero_grad, forward, loss, # backward, step) — বেশি নিয়ন্ত্রণ, বেশি দৃশ্যমানতা। # ---------- Keras (TensorFlow) ---------- from tensorflow import keras model = keras.Sequential([ keras.layers.Dense(32, activation="relu", input_shape=(10,)), keras.layers.Dense(2, activation="softmax"), ]) model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"]) model.fit(X, y, epochs=30, batch_size=32) # loop লুকানো
মূল পার্থক্য: PyTorch-এ training loop আপনি লেখেন (স্বচ্ছতা ও নিয়ন্ত্রণ বেশি); Keras .fit()-এ loop লুকানো (দ্রুত শুরু, কম boilerplate)। এই সিরিজে আমরা loop নিজে লিখতে শিখেছি ইচ্ছাকৃতভাবে — কারণ ভেতরটা বুঝলে যেকোনো framework সহজ।

💾 ৬. Model save/load — সবচেয়ে জরুরি production skill

Train করা model মেমরিতে থাকে; program বন্ধ হলে হারিয়ে যায়। Deploy করতে হলে সেটা disk-এ save করে পরে load করতে হবে। PyTorch-এ সবচেয়ে ভালো উপায় — state_dict (শুধু weight) save করা:

import torch import torch.nn as nn model = nn.Sequential(nn.Linear(10, 32), nn.ReLU(), nn.Linear(32, 2)) # ... train ... # ---- SAVE (শুধু weight — recommended) ---- torch.save(model.state_dict(), "model.pt") # ---- LOAD (আলাদা program/server-এ) ---- # 1) আগে একই architecture বানাতে হবে loaded = nn.Sequential(nn.Linear(10, 32), nn.ReLU(), nn.Linear(32, 2)) # 2) weight ঢালা loaded.load_state_dict(torch.load("model.pt", map_location="cpu")) # 3) inference mode loaded.eval()
কেন state_dict, পুরো model object নয়? শুধু weight save করা portable ও নিরাপদ — পুরো object (pickle) save করলে ঠিক একই code/version লাগে, ভঙ্গুর হয়। তাই industry-তে state_dict মানক।

🚀 ৭. Inference: training শেষ, এখন ব্যবহার

মনে রাখবেন — training ≠ inference। Training একবার (offline, ব্যয়বহুল)। Inference বারবার (production-এ, প্রতিটা user request-এ, সস্তা)। Inference-এ দুটো জিনিস অপরিহার্য:

loaded.eval() # 1) eval mode (dropout/batchnorm ঠিক আচরণ) with torch.no_grad(): # 2) gradient বন্ধ (দ্রুত, কম memory) x = torch.randn(1, 10) # একটা নতুন sample logits = loaded(x) probs = torch.softmax(logits, dim=1) pred = probs.argmax(1).item() print("prediction:", pred, "| probability:", probs.max().item())
দুটো ভুলে গেলে বিপদ: (১) model.eval() না দিলে dropout/batchnorm inference-এ ভুল করবে; (২) torch.no_grad() না দিলে অকারণে gradient হিসাব হয়ে ধীর ও memory-খেকো হবে।

🖼️ ৮. Visual: train → save → load → inference

[ TRAINING ] (একবার, offline, GPU, ব্যয়বহুল) │ model.state_dict() ▼ [ SAVE ] ──> model.pt (disk) │ load_state_dict() ▼ [ LOAD ] (server চালু হলে একবার) │ model.eval() + torch.no_grad() ▼ [ INFERENCE ] (বারবার, প্রতি request, সস্তা, দ্রুত)

🔄 ৯. ONNX — framework-এর গণ্ডি পেরোনো (আভাস)

কখনো দরকার হয় PyTorch-এ train করা model অন্য পরিবেশে (C++, mobile, TF-based serving) চালানো। তখন model-কে ONNX নামের একটা common format-এ export করা যায় — যা framework-নিরপেক্ষ।

Learn Later: ONNX, TorchScript, quantization — এগুলো এখন junior হিসেবে master করতে হবে না। শুধু জানুন এগুলো আছে, deployment/optimization-এ কাজে লাগে। বিস্তারিত Series 09-এ (inference optimization)।

🇧🇩 ১০. বাংলাদেশের বাস্তব উদাহরণ

একটা কোম্পানিতে data scientist model train করে state_dict save করে দেন; ML engineer সেটা একটা FastAPI server-এ load করে eval() mode-এ inference চালান। user শুধু দ্রুত উত্তর পায়। এই "train একজায়গায়, serve আরেক জায়গায়" workflow-ই বাস্তব। তাই save/load/inference জানা মানে আপনি model-কে notebook থেকে বের করে আসল product-এ নিতে পারেন।

💼 ১১. Boss Question

Boss: "আমরা PyTorch-এ model বানালাম। কিন্তু আমাদের production team তো অন্য framework/ভাষায় কাজ করে। তাহলে কি আবার সব নতুন করে বানাতে হবে?"

উত্তর: "না স্যার। model-টা একবার train করে save করে রাখলেই হয় — production team সেই saved model লোড করে শুধু inference চালাবে। দরকার হলে ONNX-এ export করে অন্য framework-এও চালানো যায়। মানে একবারের training, বহুবার-বহু-জায়গায় ব্যবহার — ফ্রেমওয়ার্ক নিয়ে আটকে থাকতে হয় না।"

🔎 ১২. Job Requirement Decoder

"Proficiency in PyTorch or TensorFlow; model deployment basics."
প্রশ্নউত্তর
কী বোঝায়?একটা DL framework-এ দক্ষ + train করা model save/load/inference করতে পারেন।
কেন চায়?model তখনই মূল্যবান যখন সেটা deploy ও ব্যবহার করা যায়, শুধু train নয়।
কোন সমস্যা সমাধান করে?"notebook-এ model আছে, কিন্তু production-এ চলে না" — এই ফাঁক।
junior-এর কী জানা লাগে?একটা framework গভীরে (PyTorch), অন্যটার সাথে পরিচিতি, state_dict save/load, eval()+no_grad() inference।
এখনই কী master লাগে না?দুই framework সমান দক্ষতা, ONNX/TorchScript/quantization-এর গভীরতা।
GitHub-এ কীভাবে দেখাবে?train script + আলাদা inference script যা saved model load করে predict করে।
interview-তে কী?"PyTorch বনাম TensorFlow?", "model কীভাবে save/deploy করবেন?", "eval() কেন?"

⚠️ ১৩. সাধারণ ভুল ধারণা

ভুল ১: "দুটো framework আলাদা করে master করতে হবে।" → না, concept এক; একটা গভীরে যথেষ্ট।

ভুল ২: inference-এ model.eval() না দেওয়া → dropout/batchnorm ভুল ফল।

ভুল ৩: load করার সময় architecture আলাদা → load_state_dict ব্যর্থ।

ভুল ৪: পুরো model pickle save করে version mismatch-এ ভাঙা → state_dict ভালো।

ভুল ৫: "framework জানা = DL জানা।" → concept না জানলে framework মুখস্থ অর্থহীন।

🎤 ১৪. Interview Prep

প্রশ্ন ১: PyTorch বনাম TensorFlow — কোনটা কখন?
উত্তর: concept এক; PyTorch Pythonic ও research-প্রিয়, TF/Keras দ্রুত prototyping ও পরিপক্ব deployment (TF Lite/Serving)। যেকোনো একটায় দক্ষ হলেই চলে।

প্রশ্ন ২: model কীভাবে save/deploy করবেন?
উত্তর: state_dict save; load করে eval()+no_grad()-এ inference; দরকারে API/ONNX।

প্রশ্ন ৩: Training আর inference-এর পার্থক্য?
উত্তর: training একবার (gradient, ব্যয়বহুল); inference বারবার (শুধু forward pass, সস্তা)।

প্রশ্ন ৪: eval()no_grad() কেন?
উত্তর: eval() dropout/batchnorm ঠিক করে; no_grad() gradient বন্ধ করে দ্রুত ও কম memory।

✍️ ১৫. হাতে-কলমে

১. E06-এর CNN বা E07-এর ResNet model state_dict দিয়ে save করুন।
২. একটা নতুন Python file বানিয়ে সেই model load করে একটা ছবিতে predict করুন (আলাদা inference script)।
৩. model.eval() বাদ দিয়ে চালিয়ে দেখুন ফল বদলায় কিনা।
৪. (ঐচ্ছিক) একই MLP Keras-এ লিখে .fit() দিয়ে চালান — syntax পার্থক্য অনুভব করুন।

🏁 ১৬. Series 06 সারসংক্ষেপ ও পরবর্তী Series

এই পর্বে শিখলাম:
✓ PyTorch ও TensorFlow মূলত একই কাজ করে; concept জানলে framework বদলানো সহজ
✓ সৎ তুলনা ও বাংলাদেশের industry-তে কী চায়
state_dict দিয়ে model save/load — production-এর অপরিহার্য skill
✓ inference-এ eval() + no_grad(); training ≠ inference
✓ ONNX-এর আভাস (Learn Later)
🎓 পুরো Series 06-এ আমরা যা অর্জন করলাম: neural network কেন ও কখন → neuron/activation/forward → backprop/gradient descent → PyTorch hands-on → MLP → CNN (P4 image classifier) → transfer learning → framework ও deployment basics। আপনি এখন একটা DL model বানাতে, train করতে, টিউন করতে, save/inference করতে পারেন। এটাই junior AI engineer-এর Deep Learning-এর "Must Know" ভিত্তি।
পরবর্তী Series (07 — NLP, Transformers ও LLM): এবার ছবি ছেড়ে ভাষায় যাব — computer কীভাবে text বোঝে, tokenization থেকে embedding, RNN থেকে attention, তারপর Transformer ও LLM-এর ভিত্তি। এই DL জ্ঞানই সেখানে কাজে লাগবে।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.