Evaluation Metrics тАУ Confusion Matrix, Precision, Recall

рдЕрдм рд╣рдо Deep Learning рдореЗрдВ рд╕рдмрд╕реЗ рдЬрд╝рд░реВрд░реА рдФрд░ рдЬрд╝реНрдпрд╛рджрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ Evaluation Metrics тАФ рд╡рд┐рд╢реЗрд╖рдХрд░ Confusion Matrix, Precision, рдФрд░ Recall тАФ рдХреЛ рдкреВрд░реА рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕рдордЭреЗрдВрдЧреЗред


ЁЯФ╖ 1. What Are Evaluation Metrics?

Evaluation metrics рдпрд╣ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВ рдХрд┐ trained model рдХрд┐рддрдиреА рд╕рд╣реА predictions рдХрд░ рдкрд╛ рд░рд╣рд╛ рд╣реИ тАФ рдЦрд╛рд╕рдХрд░ classification problems рдореЗрдВред


ЁЯФ╢ 2. Confusion Matrix (рдЧрдбрд╝рдмрдбрд╝реА рдореИрдЯреНрд░рд┐рдХреНрд╕)

Confusion matrix classification prediction рдХреЛ рдЪрд╛рд░ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рддреЛрдбрд╝рддрд╛ рд╣реИ:

Predicted PositivePredicted Negative
Actual Positive (1)тЬЕ TP (True Positive)тЭМ FN (False Negative)
Actual Negative (0)тЭМ FP (False Positive)тЬЕ TN (True Negative)

ЁЯдЦ рдпреЗ matrix binary рдФрд░ multi-class рджреЛрдиреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


тЬЕ Python Code (PyTorch compatible)

from sklearn.metrics import confusion_matrix

y_true = [0, 1, 0, 1, 1, 0] # Ground truth
y_pred = [0, 1, 1, 1, 0, 0] # Model predictions

cm = confusion_matrix(y_true, y_pred)
print("Confusion Matrix:\n", cm)

Output:

[[2 1]
[1 2]]

рдпрд╣ рдХрд╣рддрд╛ рд╣реИ:

  • 2 True Negatives (class 0 рд╕рд╣реА predict рдХрд┐рдпрд╛)
  • 1 False Positive
  • 1 False Negative
  • 2 True Positives

ЁЯФ╢ 3. Precision (рд╕рдЯреАрдХрддрд╛)

Definition:

Model рдиреЗ рдЬрд┐рддрдиреЗ positive predict рдХрд┐рдП, рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рддрдиреЗ рд╕рдЪ рдореЗрдВ positive рдереЗ?

Precision = TP / (TP + FP)

тЬЕ Example:

Model рдиреЗ 10 images рдХреЛ “cat” рдХрд╣рд╛, рдкрд░ рдХреЗрд╡рд▓ 6 рд╣реА рдЕрд╕рд▓реА cat рдереАрдВ тЖТ
Precision = 6 / 10 = 0.60

тЬЕ Code:

from sklearn.metrics import precision_score
precision = precision_score(y_true, y_pred)
print("Precision:", precision)

ЁЯФ╢ 4. Recall (Sensitivity / True Positive Rate)

Definition:

Total actual positive samples рдореЗрдВ рд╕реЗ рдХрд┐рддрдиреЛрдВ рдХреЛ model рдиреЗ рд╕рд╣реА predict рдХрд┐рдпрд╛?

Recall = TP / (TP + FN)

тЬЕ Example:

10 рдореЗрдВ рд╕реЗ 8 рдЕрд╕рд▓реА cats рдереАрдВ, рдФрд░ model рдиреЗ 6 рдХреЛ correctly рдкрдХрдбрд╝рд╛ тЖТ
Recall = 6 / 8 = 0.75

тЬЕ Code:

from sklearn.metrics import recall_score
recall = recall_score(y_true, y_pred)
print("Recall:", recall)

ЁЯФ╢ 5. F1 Score (Precision + Recall рдХрд╛ Balance)

Definition:

Precision рдФрд░ Recall рдХрд╛ harmonic mean:

F1 = 2 * (Precision * Recall) / (Precision + Recall)

тЬЕ Code:

from sklearn.metrics import f1_score
f1 = f1_score(y_true, y_pred)
print("F1 Score:", f1)

ЁЯФ╖ ЁЯФН Visualization (Optional)

import seaborn as sns
import matplotlib.pyplot as plt

sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')
plt.xlabel("Predicted")
plt.ylabel("Actual")
plt.title("Confusion Matrix")
plt.show()

ЁЯза рдХрдм рдХреНрдпрд╛ Use рдХрд░реЗрдВ?

MetricUse When…
AccuracyData balanced рд╣реЛ
PrecisionFalse Positive рд╕реЗ рдмрдЪрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реЛ (e.g. spam)
RecallFalse Negative рд╕реЗ рдмрдЪрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реЛ (e.g. cancer detection)
F1 ScorePrecision рдФрд░ Recall рджреЛрдиреЛрдВ рдЬрд╝рд░реВрд░реА рд╣реЛрдВ

ЁЯУЭ Objective Questions:

  1. Confusion matrix рдХреЗ 4 parts рдХреНрдпрд╛ рд╣реЛрддреЗ рд╣реИрдВ?
  2. Precision рдФрд░ Recall рдореЗрдВ рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ?
  3. Precision рдХрдм рдЬрд╝реНрдпрд╛рджрд╛ important рд╣реЛрддрд╛ рд╣реИ?
  4. f1_score metric рдХрдм use рдХрд░рддреЗ рд╣реИрдВ?
  5. Confusion matrix рдХрд╛ visualization рдХреИрд╕реЗ рдХрд░реЗрдВ?

ЁЯФЪ Summary

MetricFormulaMeaning
PrecisionTP / (TP + FP)Predicted Positives рдореЗрдВ рд╕реЗ рд╕рд╣реА рдХрд┐рддрдиреЗ
RecallTP / (TP + FN)Actual Positives рдореЗрдВ рд╕реЗ рд╕рд╣реА рдХрд┐рддрдиреЗ
F1 ScoreHarmonic mean of P & RBalance of both metrics
Confusion MatrixTP, FP, FN, TNOverall prediction structure

What is Model Evaluation and Deployment

рдЕрдм рдЖрдкрдиреЗ deep learning models рдмрдирд╛рдирд╛, train рдХрд░рдирд╛ рдФрд░ save/load рдХрд░рдирд╛ рд╕реАрдЦ рд▓рд┐рдпрд╛ рд╣реИ тАФ рдЕрдЧрд▓рд╛ рдЬрд╝рд░реВрд░реА рдХрджрдо рд╣реИ:Model Evaluation and Deployment

ЁЯФ╖ Part 1: ЁЯУК Model Evaluation

Model рдХреЛ train рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдЬрд╛рдирдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ рдХрд┐ рд╡реЛ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ тАФ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо evaluation metrics рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


тЬЕ 1. Accuracy (рд╢реБрджреНрдзрддрд╛)

  • Classification рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрдо metric
  • Formula:
    Accuracy = рд╕рд╣реА рдЕрдиреБрдорд╛рди / рдХреБрд▓ рдЙрджрд╛рд╣рд░рдг
# Keras
model.evaluate(X_test, y_test)

# PyTorch
with torch.no_grad():
preds = model(X_test)
predicted = preds.round()
acc = (predicted == y_test).float().mean()

тЬЕ 2. Confusion Matrix

Classification output рдХреЛ True Positives, False Positives, True Negatives, рдФрд░ False Negatives рдореЗрдВ рдмрд╛рдВрдЯрддрд╛ рд╣реИред

from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_true, y_pred))

тЬЕ 3. Precision, Recall, F1 Score

MetricMeaning
PrecisionPositive prediction рдореЗрдВ рд╕реЗ рдХрд┐рддрдиреЗ рд╕рд╣реА рдереЗ
RecallрдХрд┐рддрдиреЗ actual positive рд╕рд╣реА рдкрдХрдбрд╝реЗ рдЧрдП
F1 ScorePrecision рдФрд░ Recall рдХрд╛ balance
from sklearn.metrics import classification_report
print(classification_report(y_true, y_pred))

тЬЕ 4. Loss Curve / Accuracy Curve (Visualization)

import matplotlib.pyplot as plt

plt.plot(history.history['loss'], label='loss')
plt.plot(history.history['val_loss'], label='val_loss')
plt.legend()
plt.show()

ЁЯФ╖ Part 2: ЁЯЪА Model Deployment

Model рдХреЛ рджреБрдирд┐рдпрд╛ рддрдХ рдкрд╣реБрдБрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЙрд╕реЗ deploy рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ тАФ рдпрд╛рдиреА рдХрд┐рд╕реА app, API, рдпрд╛ web server рдкрд░ рдЪрд▓рд╛рдирд╛ред


тЬЕ 1. Deployment Methods:

MethodUse Case
Flask APISimple Web/API deployment
TensorFlow ServingProduction-ready serving
TorchScriptPyTorch model serialization
ONNXCross-platform compatibility
TF LiteMobile apps (Android/iOS)
TF.jsBrowser-based models
Gradio / StreamlitQuick UI + demo

тЬЕ 2. PyTorch Model Export (TorchScript)

traced_model = torch.jit.trace(model, torch.rand(1, 2))
traced_model.save("model.pt")

Use in any PyTorch-enabled environment.


тЬЕ 3. TensorFlow/Keras Model Export

pythonCopyEditmodel.save("model.h5")  # Full model (Keras)

Convert to TF Lite for mobile:

converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with open('model.tflite', 'wb') as f:
f.write(tflite_model)

тЬЕ 4. Simple Flask API for Inference

from flask import Flask, request, jsonify
import torch

app = Flask(__name__)
model = torch.load("model.pt")
model.eval()

@app.route('/predict', methods=['POST'])
def predict():
data = request.json
input_tensor = torch.tensor(data['input'])
with torch.no_grad():
prediction = model(input_tensor).item()
return jsonify({'prediction': prediction})

app.run(debug=True)

тЬЕ 5. Deployment Tools

ToolPurpose
DockerContainerize model + environment
KubernetesDeploy at scale
HerokuSimple web hosting
AWS/GCP/AzureCloud deployment
Hugging Face SpacesDeploy public demos

ЁЯУЭ Practice Questions:

  1. Accuracy рдФрд░ F1-score рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?
  2. PyTorch рдореЗрдВ confusion matrix рдХреИрд╕реЗ calculate рдХрд░рддреЗ рд╣реИрдВ?
  3. Model рдХреЛ Flask API рдореЗрдВ рдХреИрд╕реЗ deploy рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
  4. torch.jit.trace() рдФрд░ model.save() рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?
  5. TensorFlow Lite рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдФрд░ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

ЁЯза Summary Table

TaskPyTorchTensorFlow/Keras
Accuracy Eval(preds == y).float().mean()model.evaluate()
Save for Deploymenttorch.jit.save()model.save()
MobileONNX or TorchScriptTF Lite
APIFlask/FastAPIFlask/FastAPI
Web UIGradio / StreamlitGradio / Streamlit

Using GPUs and TPUs in Deep Learning

рдЕрдм рдЬрдм рдЖрдк PyTorch рдФрд░ Keras рджреЛрдиреЛрдВ рдореЗрдВ model рдмрдирд╛ рдФрд░ train рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ performance boost рдХреЗ рд▓рд┐рдП GPU/TPU рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ тАФ рдЦрд╛рд╕рдХрд░ рдмрдбрд╝реЗ datasets рдпрд╛ deep models рдХреЗ рд▓рд┐рдПред


ЁЯФ╖ 1. ЁЯФе Why Use GPUs?

CPU vs GPUGPU Advantage
SequentialParallel computing
Few coresThousands of cores
Slower matrix opsFaster tensor operations
General-purposeSpecial for ML/DL, CUDA-optimized

ЁЯФ╢ PyTorch рдореЗрдВ GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ?

тЬЕ Step 1: Check GPU Availability

import torch

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print("Using device:", device)

тЬЕ Step 2: Model рдФрд░ Data рдХреЛ GPU рдкрд░ рднреЗрдЬрдирд╛

model = MyNet().to(device)  # Model рдХреЛ GPU рдкрд░ рднреЗрдЬреЗрдВ
X = X.to(device)
y = y.to(device)

тЬЕ Training Code рдореЗрдВ рдмрджрд▓рд╛рд╡:

for epoch in range(1000):
y_pred = model(X)
loss = criterion(y_pred, y)

optimizer.zero_grad()
loss.backward()
optimizer.step()

рдмрд╕ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ model рдФрд░ data рджреЛрдиреЛрдВ рдПрдХ рд╣реА device рдкрд░ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред


ЁЯФ╖ 2. GPU рд╕реЗ Prediction (Inference)

model.eval()
with torch.no_grad():
test = torch.tensor([[1., 0.]]).to(device)
output = model(test)
print("Prediction:", output.item())

ЁЯФ╖ 3. Keras (TensorFlow) рдореЗрдВ GPU рдХрд╛ рдЙрдкрдпреЛрдЧ

TensorFlow рдЕрдкрдиреЗ рдЖрдк GPU рдХреЛ detect рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдЕрдЧрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛ)ред рдмрд╕ ensure рдХрд░реЗрдВ рдХрд┐:

  • TensorFlow-GPU version install рд╣реЛ
  • NVIDIA Drivers + CUDA Toolkit рд╕рд╣реА рд╕реЗ install рд╣реЛ

тЬЕ Check GPU:

import tensorflow as tf
print("Num GPUs Available:", len(tf.config.list_physical_devices('GPU')))

тЬЕ Tensor рдФрд░ Model GPU рдкрд░ рдЪрд▓реЗрдВрдЧреЗ рдЕрдкрдиреЗ рдЖрдк:

model.fit(X, y, epochs=10)  # If GPU available, TensorFlow will use it

тЬЕ Manually GPU select рдХрд░рдирд╛:

with tf.device('/GPU:0'):
model = tf.keras.Sequential([...])
model.compile(...)
model.fit(...)

ЁЯФ╖ 4. Google Colab рдореЗрдВ GPU/TPU Use

тЬЕ GPU Enable рдХрд░реЗрдВ:

Runtime тЖТ Change runtime type тЖТ Hardware accelerator тЖТ GPU or TPU

тЬЕ Check GPU/TPU:

import tensorflow as tf
print(tf.config.list_physical_devices('GPU')) # For GPU
print(tf.config.list_logical_devices('TPU')) # For TPU

ЁЯФ╖ 5. TPUs рдХреНрдпрд╛ рд╣реЛрддреЗ рд╣реИрдВ?

AspectDetail
TPUTensor Processing Unit (Google рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛)
SpeedGPU рд╕реЗ рднреА рддреЗрдЬрд╝ рд╣реИ рдХреБрдЫ tasks рдореЗрдВ
Best forVery large models, production-level serving
UseMainly in Google Colab, Cloud TPUs, TensorFlow

ЁЯУЭ Practice Questions:

  1. PyTorch рдореЗрдВ GPU support рдХреИрд╕реЗ check рдХрд░рддреЗ рд╣реИрдВ?
  2. Model рдХреЛ GPU рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрдирд╕рд╛ syntax рд╣реИ?
  3. TensorFlow GPU vs TPU рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?
  4. Google Colab рдореЗрдВ GPU enable рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?
  5. рдХреНрдпрд╛ CPU рд╕реЗ GPU training рдореЗрдВ рдлрд░реНрдХ рдЖрддрд╛ рд╣реИ?

ЁЯза Summary Table

TaskPyTorchKeras (TF)
GPU Checktorch.cuda.is_available()tf.config.list_physical_devices()
Send to GPUx.to(device)Automatic
Model to GPUmodel.to(device)Automatic
Use Colab GPURuntime > Change > GPUSame
TPU SupportтЭМ (Limited)тЬЕ (Good)

Model Training, Saving, and Loading in Keras

рдЕрдм рд╣рдо Keras (рдЬреЛ TensorFlow рдХрд╛ high-level API рд╣реИ) рдореЗрдВ Deep Learning Model рдХреЛ Train, Save, рдФрд░ Load рдХрд░рдирд╛ рд╕реАрдЦреЗрдВрдЧреЗ тАФ step-by-step рдФрд░ practical examples рдХреЗ рд╕рд╛рдеред


ЁЯФ╖ 1. тЬЕ Model Training in Keras (Step-by-Step)

ЁЯУМ Step 1: Import Libraries

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

ЁЯУМ Step 2: Define Model

model = Sequential([
Dense(8, activation='relu', input_shape=(2,)),
Dense(1, activation='sigmoid')
])

ЁЯУМ Step 3: Compile Model

model.compile(
optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy']
)

ЁЯУМ Step 4: Prepare Data

import numpy as np

X = np.array([[0,0], [0,1], [1,0], [1,1]])
y = np.array([0, 1, 1, 0])

ЁЯУМ Step 5: Train Model

model.fit(X, y, epochs=100, batch_size=2, verbose=1)

ЁЯФ╖ 2. ЁЯТ╛ Saving a Keras Model

тЬЕ Option 1: Save Full Model (Best Practice)

model.save("my_model.h5")  # Saves architecture + weights + optimizer state

OR in newer format:

model.save("my_model.keras")  # New native format

тЬЕ Option 2: Save Only Weights

model.save_weights("model_weights.h5")

ЁЯФ╖ 3. ЁЯУВ Loading a Saved Model

тЬЕ Load Full Model:

from tensorflow.keras.models import load_model

model = load_model("my_model.h5")

This will return the model ready to use тАФ no need to recompile or redefine.


тЬЕ Load Only Weights:

First define the model architecture same as before:

model = Sequential([
Dense(8, activation='relu', input_shape=(2,)),
Dense(1, activation='sigmoid')
])

Then load the weights:

model.load_weights("model_weights.h5")

ЁЯФ╖ 4. ЁЯФБ Save and Load during Training (Checkpointing)

тЬЕ Use ModelCheckpoint Callback

from tensorflow.keras.callbacks import ModelCheckpoint

checkpoint = ModelCheckpoint("best_model.h5", save_best_only=True, monitor="loss")

model.fit(X, y, epochs=50, callbacks=[checkpoint])

ЁЯФ╖ 5. ЁЯзк Inference (Prediction)

pred = model.predict(np.array([[1, 0]]))
print("Prediction:", pred[0][0])

ЁЯза Use .predict() method for classification, regression, or output generation.


ЁЯФз Extra: Exporting to TF Lite (Mobile/Edge)

converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()

with open('model.tflite', 'wb') as f:
f.write(tflite_model)

ЁЯУЭ Practice Questions:

  1. Keras рдореЗрдВ model train рдХрд░рдиреЗ рдХреЗ steps рдХреНрдпрд╛ рд╣реИрдВ?
  2. .h5 рдФрд░ .keras рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?
  3. model.save() рдФрд░ model.save_weights() рдореЗрдВ рдХреНрдпрд╛ рдлрд░реНрдХ рд╣реИ?
  4. Training рдХреЗ рджреМрд░рд╛рди best model рдХреИрд╕реЗ save рдХрд░рддреЗ рд╣реИрдВ?
  5. Model load рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж inference рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?

ЁЯза Summary Table

TaskKeras Method
Train Modelmodel.fit()
Save Full Modelmodel.save("model.h5")
Save Only Weightsmodel.save_weights()
Load Full Modelload_model("model.h5")
Load Weights Onlymodel.load_weights()
Predict / Inferencemodel.predict(x)
Save Best during TrainingModelCheckpoint(callback)

Model Training, Saving, and Loading in PyTorch

рдЕрдм рд╣рдо PyTorch рдореЗрдВ Model Training, рдлрд┐рд░ рдЙрд╕реЗ Save рдФрд░ Load рдХрд░рдиреЗ рдХреА рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕реАрдЦрддреЗ рд╣реИрдВ тАФ
рдЬреЛ рдХрд┐рд╕реА рднреА Deep Learning project рдХрд╛ core рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред


ЁЯФ╖ 1. ЁЯФБ Model Training in PyTorch

ЁЯз▒ Training Steps Overview:

  1. Model рдмрдирд╛рдирд╛ (nn.Module)
  2. Loss function рдЪреБрдирдирд╛ (nn.CrossEntropyLoss, etc.)
  3. Optimizer рд╕реЗрдЯ рдХрд░рдирд╛ (torch.optim)
  4. Forward pass рдХрд░рдирд╛
  5. Loss calculate рдХрд░рдирд╛
  6. Backward pass (loss.backward())
  7. Optimizer step (optimizer.step())

ЁЯзк Full Example (Classifier):

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset

# Sample data
X = torch.tensor([[0.,0.],[0.,1.],[1.,0.],[1.,1.]])
y = torch.tensor([[0.],[1.],[1.],[0.]])

dataset = TensorDataset(X, y)
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)

# Step 1: Model
class XORNet(nn.Module):
def __init__(self):
super(XORNet, self).__init__()
self.fc1 = nn.Linear(2, 4)
self.fc2 = nn.Linear(4, 1)

def forward(self, x):
x = torch.relu(self.fc1(x))
return torch.sigmoid(self.fc2(x))

model = XORNet()

# Step 2: Loss and Optimizer
criterion = nn.BCELoss()
optimizer = optim.Adam(model.parameters(), lr=0.1)

# Step 3: Training loop
for epoch in range(500):
for xb, yb in dataloader:
y_pred = model(xb)
loss = criterion(y_pred, yb)

optimizer.zero_grad()
loss.backward()
optimizer.step()

if epoch % 100 == 0:
print(f"Epoch {epoch}, Loss: {loss.item():.4f}")

ЁЯФ╖ 2. ЁЯТ╛ Saving a PyTorch Model

PyTorch рдореЗрдВ 2 рддрд░реАрдХреЗ рд╣реИрдВ model save рдХрд░рдиреЗ рдХреЗ:

тЬЕ Option 1: State Dict Only (Recommended)

torch.save(model.state_dict(), "xor_model.pth")

рдпрд╣ рдХреЗрд╡рд▓ model рдХреЗ weights save рдХрд░рддрд╛ рд╣реИ, architecture рдирд╣реАрдВред


тЬЕ Option 2: Complete Model (Not Recommended)

torch.save(model, "xor_model_full.pth")

рдпрд╣ рдкреВрд░рд╛ model + structure save рдХрд░рддрд╛ рд╣реИ, рдкрд░ version compatibility issues рдЖ рд╕рдХрддреЗ рд╣реИрдВред


ЁЯФ╖ 3. ЁЯУВ Loading a Model

ЁЯФБ Load from State Dict (Best Practice):

model = XORNet()  # рдкрд╣рд▓реЗ architecture рдмрдирд╛рдУ
model.load_state_dict(torch.load("xor_model.pth"))
model.eval() # evaluation mode рдореЗрдВ рдбрд╛рд▓рдирд╛ рдЬрд╝рд░реВрд░реА

ЁЯФН .eval() inference рдХреЗ рд╕рдордп BatchNorm / Dropout рдХреЛ deactivate рдХрд░рддрд╛ рд╣реИред


ЁЯза Bonus: GPU Compatibility (Saving/Loading)

тЬЕ Save on GPU, Load on CPU:

# Save (from GPU)
torch.save(model.state_dict(), "model_gpu.pth")

# Load on CPU
device = torch.device("cpu")
model.load_state_dict(torch.load("model_gpu.pth", map_location=device))

ЁЯзк Example: Inference After Loading

model.eval()
with torch.no_grad():
test = torch.tensor([[1., 1.]])
output = model(test)
print("Predicted:", output.item())

ЁЯУж Advanced Tip: Save Optimizer State Too

torch.save({
'model_state': model.state_dict(),
'optimizer_state': optimizer.state_dict(),
}, "checkpoint.pth")

Load Later:

checkpoint = torch.load("checkpoint.pth")
model.load_state_dict(checkpoint['model_state'])
optimizer.load_state_dict(checkpoint['optimizer_state'])

ЁЯза Evaluation Tips

  • рд╣рдореЗрд╢рд╛ model.eval() use рдХрд░реЗрдВ inference рдХреЗ рд▓рд┐рдП
  • torch.no_grad() рдореЗрдВ prediction рдХрд░реЗрдВ (memory efficiency рдХреЗ рд▓рд┐рдП)
  • Large models рдХреЗ рд▓рд┐рдП model checkpoints рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

ЁЯУЭ Practice Questions:

  1. PyTorch рдореЗрдВ model train рдХрд░рдиреЗ рдХреЗ рдореБрдЦреНрдп steps рдХреНрдпрд╛ рд╣реИрдВ?
  2. State dict рдФрд░ full model saving рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?
  3. Optimizer state рдХреНрдпреЛрдВ save рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
  4. .eval() рдФрд░ .train() modes рдореЗрдВ рдХреНрдпрд╛ рдлрд░реНрдХ рд╣реИ?
  5. Inference рдореЗрдВ torch.no_grad() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?

ЁЯза Summary Table

TaskMethod
ЁЯФз TrainForward тЖТ Loss тЖТ Backward тЖТ Optimizer
ЁЯТ╛ Save Weightstorch.save(model.state_dict(), path)
ЁЯУВ Load Weightsmodel.load_state_dict(torch.load(path))
ЁЯУМ Inferencemodel.eval() + with torch.no_grad()
ЁЯФБ Save with OptimizerUse checkpoint = {'model': ..., 'opt': ...}