Chapter 02

পাইথন রিফ্রেশার

Python Refresher
🎬 কেন এই অধ্যায়?
Deep Learning শেখার ৯০% কাজ হয় Python-এ। তাই আমরা যাত্রা শুরু করার আগে Python-এর সেই অংশগুলো ঝালাই করে নেব যেগুলো সামনের অধ্যায়গুলোতে বারবার লাগবে — list, dict, NumPy, Pandas, এবং সবচেয়ে গুরুত্বপূর্ণ vectorization

কেন Python — Deep Learning-এর প্রিয় ভাষা?

C++ দ্রুত, Java এন্টারপ্রাইজ-ফ্রেন্ডলি, JavaScript ব্রাউজারের রাজা — তবু Deep Learning জগতে Python-ই রাজত্ব করে। কারণ তিনটি: সহজ syntax, বিশাল ecosystem (NumPy, PyTorch, TensorFlow), এবং গবেষকদের প্রথম পছন্দ হওয়ায় নতুন গবেষণা সবার আগে Python-এ আসে।

পড়তে সহজ

ইংরেজির মতো — for x in list: print(x)

লাইব্রেরি

NumPy, Pandas, PyTorch — সব রেডি।

দ্রুত প্রোটোটাইপ

৫ লাইনে মডেল ট্রেইন করা যায়।

GPU সাপোর্ট

CUDA-এর সাথে seamless।

Setup — Google Colab দিয়ে শুরু

কম্পিউটারে কিছুই ইনস্টল করতে হবে না। শুধু colab.research.google.com খুলুন → New Notebook → ফ্রি GPU চালু করুন (Runtime → Change runtime type → GPU)। ব্যস, আপনার Deep Learning ল্যাব রেডি।

Python-এর মূল ডেটা স্ট্রাকচার — ঝটপট রিভিউ

List — সবচেয়ে ব্যবহৃত

# তৈরি
numbers = [1, 2, 3, 4, 5]

# slicing — শুরু থেকে শেষ
print(numbers[1:4])   # [2, 3, 4]
print(numbers[::-1])  # উল্টো — [5, 4, 3, 2, 1]

# comprehension — Pythonic উপায়
squares = [x**2 for x in numbers]
even = [x for x in numbers if x % 2 == 0]

Dictionary — key-value জোড়া

student = {"name": "Rahul", "score": 92, "subjects": ["math", "physics"]}

# access
print(student["name"])
print(student.get("age", 0))   # নেই হলে default 0

# loop
for key, value in student.items():
    print(f"{key} -> {value}")

Function — DL-এ যেভাবে দরকার

def relu(x):
    """Rectified Linear Unit — Deep Learning-এর সবচেয়ে জনপ্রিয় activation।"""
    return x if x > 0 else 0

# default argument + type hint
def predict(x: float, weight: float = 1.0, bias: float = 0.0) -> float:
    return weight * x + bias

print(predict(5, weight=2, bias=1))   # 11

NumPy — সংখ্যার জাদু

NumPy হলো Python-এ ম্যাট্রিক্স ও ভেক্টর নিয়ে কাজ করার লাইব্রেরি। Deep Learning-এর প্রতিটি গণনা আসলে ম্যাট্রিক্স গুণ। NumPy এই গণনাগুলোকে সাধারণ Python loop-এর চেয়ে ১০০ গুণ দ্রুত করে — কারণ ভেতরে C লেখা।

import numpy as np

# array তৈরি
a = np.array([1, 2, 3, 4, 5])
b = np.array([[1, 2], [3, 4]])

# গাণিতিক অপারেশন — element-wise
print(a * 2)        # [2 4 6 8 10]
print(a + a)        # [2 4 6 8 10]

# ম্যাট্রিক্স গুণ (DL-এর মূল অপারেশন)
W = np.array([[1, 2], [3, 4]])
x = np.array([5, 6])
print(W @ x)        # [17 39]

# shape দেখা
print(b.shape)      # (2, 2)
print(b.reshape(4)) # [1 2 3 4]
🔑 Vectorization — DL-এর সবচেয়ে বড় শিক্ষা
কখনো for loop দিয়ে array-তে অপারেশন করবেন না। NumPy-এর built-in অপারেশন ব্যবহার করুন। এটাকেই বলে vectorization। GPU-তে এটা আরো ১০০০ গুণ দ্রুত হয়।
# ❌ ধীর — Python loop
result = []
for i in range(1_000_000):
    result.append(i * 2)

# ✅ দ্রুত — vectorized
arr = np.arange(1_000_000)
result = arr * 2

Pandas — ডেটা টেবিল

Pandas হলো Excel-এর Python ভার্সন। CSV পড়া, ফিল্টার, গ্রুপিং — সব এক লাইনে।

import pandas as pd

# CSV পড়া
df = pd.read_csv("students.csv")

# প্রথম ৫ row
print(df.head())

# ফিল্টার — যাদের score 80-এর বেশি
top = df[df["score"] > 80]

# নতুন column
df["grade"] = df["score"].apply(lambda s: "A" if s > 85 else "B")

# গড় বের করা
print(df["score"].mean())

Matplotlib — ছবি আঁকা

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5, 5, 100)
y = np.maximum(0, x)   # ReLU function

plt.plot(x, y)
plt.title("ReLU Activation")
plt.xlabel("Input")
plt.ylabel("Output")
plt.grid(True)
plt.show()

Class — মডেল লেখার ভিত্তি

PyTorch-এ প্রতিটি মডেল একটা class। তাই OOP-এর basic বোঝা জরুরি।

class Neuron:
    def __init__(self, weight, bias):
        self.weight = weight
        self.bias = bias

    def forward(self, x):
        return self.weight * x + self.bias

n = Neuron(weight=2, bias=1)
print(n.forward(5))   # 11

সাধারণ ভুল ধারণা

⚠️ যা এড়িয়ে চলবেন
  • List-এ লক্ষ লক্ষ সংখ্যা রাখবেন না — NumPy array ব্যবহার করুন।
  • NumPy array-এ for loop দিয়ে অপারেশন — মহাপাপ। Vectorize করুন।
  • Pandas DataFrame-এ row by row iterate করবেন না — .apply() বা vectorized অপারেশন ব্যবহার করুন।
  • Python-এ == আর is এক না — is object identity check করে।

অনুশীলন

১. ১ থেকে ১০০ পর্যন্ত শুধু জোড় সংখ্যার বর্গফল list comprehension দিয়ে বানান।

২. NumPy দিয়ে 3×3 random matrix তৈরি করে তার transpose ও determinant বের করুন।

৩. একটি CSV ফাইল পড়ে Pandas দিয়ে সর্বোচ্চ ও সর্বনিম্ন value-র row দেখান।

৪. Neuron class-কে modify করুন যাতে এটা list of weights নিতে পারে এবং dot product করে।

মিনি প্রজেক্ট

🚀 আজকের চ্যালেঞ্জ
একটি Python function লিখুন mean_squared_error(y_true, y_pred) — যেটা NumPy array নেবে এবং MSE ফেরত দেবে। কোনো for loop ব্যবহার করা যাবে না। (Hint: np.mean((y_true - y_pred)**2))

ইন্টারভিউ প্রশ্ন

  1. Python list ও NumPy array-এর মধ্যে পার্থক্য কী?
  2. Vectorization কী এবং কেন গুরুত্বপূর্ণ?
  3. Pandas-এ lociloc-এর পার্থক্য কী?
  4. *args এবং **kwargs কী কাজে আসে?
  5. Python-এ shallow copy ও deep copy-এর পার্থক্য?

সারসংক্ষেপ

✨ এই অধ্যায়ে যা শিখলাম
  • Python-ই কেন DL-এর প্রিয় ভাষা।
  • List, dict, function, class — দ্রুত রিভিউ।
  • NumPy দিয়ে vectorized গণনা — DL-এর প্রাণ।
  • Pandas দিয়ে ডেটা ম্যানিপুলেশন।
  • Matplotlib দিয়ে visualization।
  • পরের অধ্যায়ে আমরা গণিতের সেই অংশগুলো শিখব যা DL বোঝার জন্য লাগবেই।