Complete guide to building, training, and deploying AI models
Example: Predict if an email is spam or not (binary classification).
Define input (email text) and output (spam / not spam).
Emails + their labels (spam or ham)
Could come from databases, CSVs, web scraping, etc.
import pandas as pd
data = pd.read_csv("emails.csv")
Steps may include:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(data["text"], data["label"])
import torch.nn as nn
class SpamClassifier(nn.Module):
def __init__(self, input_size):
super().__init__()
self.fc = nn.Linear(input_size, 1)
def forward(self, x):
return torch.sigmoid(self.fc(x))
# Define model, loss, optimizer
model = SpamClassifier(input_size=100)
criterion = nn.BCELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
# Training loop
for epoch in range(10):
optimizer.zero_grad()
outputs = model(X_train_tensor)
loss = criterion(outputs, y_train_tensor)
loss.backward()
optimizer.step()
from sklearn.metrics import accuracy_score
preds = model(X_test_tensor).round()
acc = accuracy_score(y_test_tensor, preds)
print("Accuracy:", acc)
torch.save(model.state_dict(), "spam_model.pt")
from fastapi import FastAPI
import torch
app = FastAPI()
model = SpamClassifier(input_size=100)
model.load_state_dict(torch.load("spam_model.pt"))
model.eval()
@app.post("/predict")
def predict(email_text: str):
vector = preprocess(email_text) # vectorize input
with torch.no_grad():
output = model(vector)
return {"spam": bool(output.item() > 0.5)}
You might:
As the model gets more data or starts performing poorly: