当前位置: 首页 > news >正文

MLP生成一些训练和预测数据

下面是一个使用 PyTorch 实现的简单多层感知机(MLP)的示例,包括生成一些数据用于训练和预测。

### 步骤:
1. 生成随机数据。
2. 定义一个简单的MLP模型。
3. 训练模型。
4. 使用模型进行预测。

```python
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np

# 1. 生成随机数据
# 假设我们有一个二分类问题,每个样本有两个特征

# 生成1000个样本,每个样本有两个特征
num_samples = 1000
input_dim = 2

# 生成特征数据,形状为 (num_samples, input_dim)
X = torch.randn(num_samples, input_dim)

# 生成标签,假设标签是线性可分的,加一点噪声
y = (X.sum(dim=1) > 0).float()  # 如果特征和大于0,标签为1,否则为0

# 添加一些噪声
y[np.random.rand(num_samples) < 0.1] = 1 - y[np.random.rand(num_samples) < 0.1]

# 2. 定义MLP模型
class MLP(nn.Module):
    def __init__(self, input_dim):
        super(MLP, self).__init__()
        self.fc1 = nn.Linear(input_dim, 64)  # 输入层到隐藏层
        self.fc2 = nn.Linear(64, 32)         # 隐藏层到隐藏层
        self.fc3 = nn.Linear(32, 1)          # 隐藏层到输出层
        self.relu = nn.ReLU()               # 激活函数
        self.sigmoid = nn.Sigmoid()         # 输出层的激活函数(二分类问题)

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

# 3. 训练模型
model = MLP(input_dim)

# 损失函数和优化器
criterion = nn.BCELoss()  # 二元交叉熵损失函数
optimizer = optim.Adam(model.parameters(), lr=0.01)

# 训练循环
num_epochs = 100
for epoch in range(num_epochs):
    # 前向传播
    outputs = model(X)
    loss = criterion(outputs.squeeze(), y)

    # 反向传播
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    if (epoch+1) % 10 == 0:
        print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

# 4. 使用模型进行预测
with torch.no_grad():
    predicted = (model(X).squeeze() > 0.5).float()
    accuracy = (predicted == y).float().mean()
    print(f'Accuracy of the model on the training data: {accuracy.item() * 100:.2f}%')

# 你可以使用下面的代码来预测新的数据
new_data = torch.randn(5, input_dim)  # 生成5个新的样本
with torch.no_grad():
    predicted_new = (model(new_data).squeeze() > 0.5).float()
    print(f'Predictions on new data: {predicted_new}')
```

### 代码解释:
1. **生成数据**:我们生成了1000个样本,每个样本有两个特征,标签是基于特征的和是否大于0来决定的(二分类问题)。
2. **MLP模型**:定义了一个简单的MLP,包含两个隐藏层,使用ReLU激活函数,输出层使用Sigmoid激活函数。
3. **训练模型**:使用二元交叉熵损失函数和Adam优化器进行训练。
4. **预测**:训练完成后,使用模型对训练数据和新的数据进行预测。

### 输出示例:
```
Epoch [10/100], Loss: 0.6868
Epoch [20/100], Loss: 0.6216
Epoch [30/100], Loss: 0.5429
...
Epoch [100/100], Loss: 0.3932
Accuracy of the model on the training data: 86.60%
Predictions on new data: tensor([0., 1., 1., 0., 1.])
```

你可以根据需要调整模型的结构、学习率、训练次数等参数。

相关文章:

  • 时序逻辑电路——有限状态机FSM
  • 一文速通C++非类型模板参数
  • 《几何原本》命题I.2
  • 神经网络代码入门解析
  • Docker项目部署-部署Java应用
  • 二分查找-I(C++)
  • 【通俗讲解电子电路】——从零开始理解生活中的电路(二)
  • Tomcat部署
  • 无问西东、继续前行!!
  • 机器学习预备知识
  • Leetcode1 两数之和 python两种方法实现
  • 基于SpringBoot的绿城郑州爱心公益网站设计与实现现(源码+SQL脚本+LW+部署讲解等)
  • ASP.NET MVC项目部署到IIS后,w3wp.exe程序报错重启
  • 【服务治理中间件】consul介绍和基本原理
  • 《玩转AI大模型:从入门到创新实践》(12)LLM初步(2)
  • C++ final和override
  • Linux上用C++和GCC开发程序实现两个不同PostgreSQL实例下单个数据库中多个Schema稳定高效的数据迁移到其它PostgreSQL实例
  • yarn application命令中各参数的详细解释
  • 物以类聚的Kmeans:数据分群的暴力美学
  • 知识库适配DeepSeek,企业微信支持自动登录,授权支持过期时间设置,zyplayer-doc 2.4.9 发布啦!
  • win2003建网站/百度广告一级代理
  • 成都科技网站建设电/网页设计参考网站
  • 做网站空间重要还是程序重要/外汇交易平台
  • 企业国际网站建设/网站测速工具
  • 新日源建设集团有限公司网站/营销是什么意思
  • 做短视频网站好/快速排名优化推广手机