AI项目实战
项目案例
1. 图像分类项目
使用PyTorch实现图像分类系统。
# 项目结构 project/ ├── data/ │ ├── train/ │ ├── val/ │ └── test/ ├── models/ │ ├── model.py │ └── utils.py ├── train.py ├── evaluate.py └── predict.py # 模型定义 import torch.nn as nn class ImageClassifier(nn.Module): def __init__(self, num_classes): super().__init__() self.features = nn.Sequential( nn.Conv2d(3, 64, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(64, 128, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=2, stride=2), nn.Conv2d(128, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=2, stride=2), ) self.classifier = nn.Sequential( nn.Linear(256 * 28 * 28, 512), nn.ReLU(inplace=True), nn.Dropout(), nn.Linear(512, num_classes), ) def forward(self, x): x = self.features(x) x = x.view(x.size(0), -1) x = self.classifier(x) return x # 训练脚本 def train(model, train_loader, criterion, optimizer, device): model.train() running_loss = 0.0 correct = 0 total = 0 for inputs, labels in train_loader: inputs, labels = inputs.to(device), labels.to(device) optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() _, predicted = outputs.max(1) total += labels.size(0) correct += predicted.eq(labels).sum().item() return running_loss / len(train_loader), 100. * correct / total
2. 自然语言处理项目
使用Transformer实现文本分类系统。
# 项目结构 project/ ├── data/ │ ├── raw/ │ └── processed/ ├── models/ │ ├── transformer.py │ └── tokenizer.py ├── train.py ├── evaluate.py └── predict.py # 模型定义 import torch.nn as nn from transformers import BertModel class TextClassifier(nn.Module): def __init__(self, num_classes): super().__init__() self.bert = BertModel.from_pretrained('bert-base-uncased') self.dropout = nn.Dropout(0.1) self.classifier = nn.Linear(768, num_classes) def forward(self, input_ids, attention_mask): outputs = self.bert( input_ids=input_ids, attention_mask=attention_mask ) pooled_output = outputs[1] pooled_output = self.dropout(pooled_output) logits = self.classifier(pooled_output) return logits # 训练脚本 def train(model, train_loader, criterion, optimizer, device): model.train() total_loss = 0 correct = 0 total = 0 for batch in train_loader: input_ids = batch['input_ids'].to(device) attention_mask = batch['attention_mask'].to(device) labels = batch['labels'].to(device) optimizer.zero_grad() outputs = model(input_ids, attention_mask) loss = criterion(outputs, labels) loss.backward() optimizer.step() total_loss += loss.item() _, predicted = outputs.max(1) total += labels.size(0) correct += predicted.eq(labels).sum().item() return total_loss / len(train_loader), 100. * correct / total
3. 推荐系统项目
使用协同过滤实现推荐系统。
# 项目结构 project/ ├── data/ │ ├── ratings.csv │ └── items.csv ├── models/ │ ├── collaborative_filtering.py │ └── evaluation.py ├── train.py ├── evaluate.py └── recommend.py # 模型定义 import torch.nn as nn class CollaborativeFiltering(nn.Module): def __init__(self, num_users, num_items, num_factors): super().__init__() self.user_factors = nn.Embedding(num_users, num_factors) self.item_factors = nn.Embedding(num_items, num_factors) # 初始化权重 nn.init.normal_(self.user_factors.weight, std=0.1) nn.init.normal_(self.item_factors.weight, std=0.1) def forward(self, user_ids, item_ids): user_emb = self.user_factors(user_ids) item_emb = self.item_factors(item_ids) return (user_emb * item_emb).sum(dim=1) # 训练脚本 def train(model, train_loader, criterion, optimizer, device): model.train() total_loss = 0 for user_ids, item_ids, ratings in train_loader: user_ids = user_ids.to(device) item_ids = item_ids.to(device) ratings = ratings.float().to(device) optimizer.zero_grad() predictions = model(user_ids, item_ids) loss = criterion(predictions, ratings) loss.backward() optimizer.step() total_loss += loss.item() return total_loss / len(train_loader)