pytorch实现感知机模型
感知机是一种简单的二分类模型,通常用于线性分类任务。
以下是使用 PyTorch 和 Python 实现感知机模型的示例代码,并附有注释。
python
import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
import numpy as np
# 生成一些随机的线性可分数据
np.random.seed(42)
num_samples = 100
features = 2
x = 10 * np.random.rand(num_samples, features) # 生成随机输入特征
w_true = np.array([2, -3.4]) # 真实的权重
b_true = 4.2 # 真实的偏置
y_true = np.dot(x, w_true) + b_true + 0.1 * np.random.randn(num_samples) # 添加噪声
y_true = np.where(y_true > 0, 1, -1) # 将输出标签转换为二分类问题
# 将数据转换为 PyTorch 的 Tensor
x = torch.tensor(x, dtype=torch.float32)
y_true = torch.tensor(y_true, dtype=torch.float32)
# 定义感知机模型
class Perceptron(nn.Module):
def __init__(self, input_size):
super(Perceptron, self).__init__()
self.linear = nn.Linear(input_size, 1)
def forward(self, x):
return torch.sign(self.linear(x))
# 初始化感知机模型
perceptron = Perceptron(input_size=features)
# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.SGD(perceptron.parameters(), lr=0.01)
# 训练感知机模型
num_epochs = 100
for epoch in range(num_epochs):
# 前向传播
y_pred = perceptron(x)
# 计算损失
loss = criterion(y_pred.view(-1), y_true)
# 反向传播和优化
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 打印损失
if (epoch + 1) % 10 == 0:
print(f'Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}')
# 在训练数据上进行预测
with torch.no_grad():
predictions = perceptron(x).numpy()
# 可视化结果
plt.scatter(x[:, 0], x[:, 1], c=predictions.flatten(), cmap='coolwarm', marker='o')
plt.title('Perceptron Model')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
这个示例包括以下步骤:
1. 生成一个简单的线性可分数据集。
2. 定义了一个简单的感知机模型。
3. 使用均方误差(MSE)作为损失函数,随机梯度下降(SGD)作为优化器。
4. 训练感知机模型。
5. 使用训练后的模型在训练数据上进行预测。
6. 可视化模型的决策边界。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)