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.])
```

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

Transformer发轫于NLP(自然语言处理),并跨界应用到CV(计算机视觉)领域。 Swin Transformer是基于Transformer的计算机视觉骨干网,在图像分类、目标检测、实例分割、语义分割等多项下游CV应用中取得了SOTA的性能。该项工作也获得了ICCV 2021顶会最佳论文奖。 本课程将手把手地教大家使用labelImg标注使用Swin Transformer训练自己的数据集。  本课程将介绍Transformer及在CV领域的应用、Swin Transformer的原理。 课程以多目标检测(足球梅西同时检测)为例进行Swin Transformer实战演示。 课程在WindowsUbuntu系统上分别做项目演示。包括:安装软件环境、安装Pytorch、安装Swin-Transformer-Object-Detection、标注自己的数据集、准备自己的数据集(自动划分训练验证集)、数据集格式转换(Python脚本完成)、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计、日志分析。  相关课程: 《Transformer原理与代码精讲(PyTorch)》https://edu.youkuaiyun.com/course/detail/36697《Transformer原理与代码精讲(TensorFlow)》https://edu.youkuaiyun.com/course/detail/36699《ViT(Vision Transformer)原理与代码精讲》https://edu.youkuaiyun.com/course/detail/36719《DETR原理与代码精讲》https://edu.youkuaiyun.com/course/detail/36768《Swin Transformer实战目标检测:训练自己的数据集》https://edu.youkuaiyun.com/course/detail/36585《Swin Transformer实战实例分割:训练自己的数据集》https://edu.youkuaiyun.com/course/detail/36586《Swin Transformer原理与代码精讲》 https://download.youkuaiyun.com/course/detail/37045
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Earth explosion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值