Eric12219180 2023-04-18 15:06 采纳率: 62.2%
浏览 120
已结题

分类问题转换成回归问题

我有四个文件夹分别放着四个不同class的data。
比方说: 飞机, 船, 汽车, 电视。
我要怎么用pytorch或tensorflow从一个看似多分类的问题变成一个回归问题(regression)。
原本可能是input图片output class的名字,现在变成input一张图片 output一个0~1范围的数字代表不同
class。
总之就是多分类问题转成回归(regression)问题,该怎么做?
最后要与也要输出confusion matrix。

  • 写回答

11条回答 默认 最新

  • 守时间的孤岛 2023-04-18 15:43
    关注

    该回答引用chatgpt:
    将多分类问题转换成回归问题的思路是使用一个输出节点来表示目标值(即0~1范围的数字),这个输出节点的值代表每个类别的概率分数,最后选择分数最高的类别作为预测结果。

    具体实现方法如下:

    定义模型结构
    使用卷积神经网络(CNN)作为模型结构,并将最后一层全连接层的输出节点数设置为1。

    
    import torch.nn as nn
    
    class Net(nn.Module):
        def __init__(self):
            super(Net, self).__init__()
            self.conv1 = nn.Conv2d(3, 32, 3, padding=1)
            self.conv2 = nn.Conv2d(32, 64, 3, padding=1)
            self.pool = nn.MaxPool2d(2, 2)
            self.fc1 = nn.Linear(64 * 8 * 8, 512)
            self.fc2 = nn.Linear(512, 1)
    
        def forward(self, x):
            x = self.pool(F.relu(self.conv1(x)))
            x = self.pool(F.relu(self.conv2(x)))
            x = x.view(-1, 64 * 8 * 8)
            x = F.relu(self.fc1(x))
            x = torch.sigmoid(self.fc2(x))
            return x
    
    
    

    2定义损失函数
    使用均方误差(MSE)作为损失函数,目标值为0或1的概率分数

    criterion = nn.MSELoss()
    
    
    

    3定义优化器
    使用随机梯度下降(SGD)优化器,并设置学习率和动量

    
    import torch.optim as optim
    
    optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)
    
    

    4加载数据集
    使用PyTorch的torchvision模块加载数据集。

    
    import torchvision.datasets as datasets
    import torchvision.transforms as transforms
    
    train_data = datasets.ImageFolder('path/to/train/data', transform=transforms.ToTensor())
    test_data = datasets.ImageFolder('path/to/test/data', transform=transforms.ToTensor())
    
    

    5训练模型
    使用PyTorch的torch.utils.data.DataLoader模块加载数据,定义训练循环,更新模型参数。

    
    train_loader = torch.utils.data.DataLoader(train_data, batch_size=32, shuffle=True)
    test_loader = torch.utils.data.DataLoader(test_data, batch_size=32, shuffle=False)
    
    num_epochs = 10
    
    for epoch in range(num_epochs):
        running_loss = 0.0
        for i, data in enumerate(train_loader, 0):
            inputs, labels = data
            optimizer.zero_grad()
            outputs = net(inputs)
            loss = criterion(outputs, labels.float())
            loss.backward()
            optimizer.step()
            running_loss += loss.item()
    
        print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / len(train_loader)))
    
    print('Finished Training')
    
    

    6评估模型
    使用测试集评估模型的性能,并输出分类准确率

    
    correct = 0
    total = 0
    with torch.no_grad
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 4月26日
  • 修改了问题 4月19日
  • 创建了问题 4月18日

悬赏问题

  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数