import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# ———- 1. 生成模拟数据(替换成你的真实数据) ———-
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 标准化(对神经网络很重要)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 转为PyTorch张量
X_train_t = torch.tensor(X_train, dtype=torch.float32)
y_train_t = torch.tensor(y_train, dtype=torch.long)
X_test_t = torch.tensor(X_test, dtype=torch.float32)
y_test_t = torch.tensor(y_test, dtype=torch.long)
# 创建DataLoader
train_loader = DataLoader(TensorDataset(X_train_t, y_train_t), batch_size=32, shuffle=True)
# ———- 2. 定义模型结构 ———-
class MLP(nn.Module):
def __init__(self, input_dim, hidden_dim=64, output_dim=2):
super().__init__()
self.net = nn.Sequential(
nn.Linear(input_dim, hidden_dim),
nn.ReLU(),
nn.Linear(hidden_dim, hidden_dim // 2),
nn.ReLU(),
nn.Linear(hidden_dim // 2, output_dim)
)
def forward(self, x):
return self.net(x)
model = MLP(input_dim=20)
# ———- 3. 训练配置 ———-
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# ———- 4. 训练循环 ———-
epochs = 50
for epoch in range(epochs):
model.train()
total_loss = 0
for batch_x, batch_y in train_loader:
optimizer.zero_grad()
outputs = model(batch_x)
loss = criterion(outputs, batch_y)
loss.backward()
optimizer.step()
total_loss += loss.item()
if (epoch + 1) % 10 == 0:
print(f"Epoch {epoch+1}/{epochs}, Loss: {total_loss/len(train_loader):.4f}")
# ———- 5. 评估 ———-
model.eval()
with torch.no_grad():
logits = model(X_test_t)
preds = torch.argmax(logits, dim=1)
acc = (preds == y_test_t).float().mean()
print(f"Test Accuracy: {acc:.4f}")
# ———- 6. 推理(对新样本预测) ———-
def predict(new_data):
model.eval()
with torch.no_grad():
new_data_scaled = scaler.transform(new_data)
tensor_data = torch.tensor(new_data_scaled, dtype=torch.float32)
logits = model(tensor_data)
probs = torch.softmax(logits, dim=1)
return probs.numpy()
# 示例:预测一条新数据
sample = X_test[0:1] # 用测试集第一条模拟新数据
print("预测概率:", predict(sample))
模型训练例
# 例:使用预训练的ResNet进行图像分类
from torchvision import models, transforms
resnet = models.resnet18(pretrained=True)
resnet.eval()
# 例:使用HuggingFace的文本分类模型
from transformers import pipeline
classifier = pipeline("sentiment-analysis")
result = classifier("I love this AI!")
print(result)
求三连呀。

