人工智能第三次作业

pytorch实现三分类

代码:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import Dataset, DataLoader
import numpy as np
import matplotlib.pyplot as plt

# 生成随机数据
num_samples = 300
input_size = 28 * 28
num_classes = 3

data = np.random.randn(num_samples, input_size)
labels = np.random.randint(0, num_classes, num_samples)

# 划分训练集和测试集
train_data, test_data = data[:200], data[200:]
train_labels, test_labels = labels[:200], labels[200:]


class CustomDataset(Dataset):
    def __init__(self, data, labels):
        self.data = data
        self.labels = labels

    def __len__(self):
        return len(self.labels)

    def __getitem__(self, idx):
        return self.data[idx], self.labels[idx]


train_dataset = CustomDataset(train_data, train_labels)
test_dataset = CustomDataset(test_data, test_labels)

train_loader = DataLoader(train_dataset, batch_size=16, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=16, shuffle=False)


class FullyConnectedNN(nn.Module):
    def __init__(self, input_size, hidden_size, num_classes):
        super(FullyConnectedNN, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_size, num_classes)

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


hidden_size = 128

model = FullyConnectedNN(input_size, hidden_size, num_classes)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 训练
num_epochs = 20
loss_values = []

for epoch in range(num_epochs):
    epoch_loss = 0
    for i, (inputs, labels) in enumerate(train_loader):
        inputs, labels = inputs.float(), labels.long()

        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        epoch_loss += loss.item()

    epoch_loss /= len(train_loader)
    loss_values.append(epoch_loss)
    print(f"Epoch [{epoch + 1}/{num_epochs}], Loss: {epoch_loss}")

# 测试
with torch.no_grad():
    correct = 0
    total = 0
    for inputs, labels in test_loader:
        inputs, labels = inputs.float(), labels.long()
        outputs = model(inputs)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

    print(f"Accuracy: {100 * correct / total}%")

# 绘制损失曲线
plt.plot(loss_values)
plt.xlabel("Epoch")
plt.ylabel("Loss")
plt.title("Loss Curve")
plt.show()

运行截图:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
人工智能原理与算法第四次作业主要包括以下内容: 1. 线性回归:线性回归是一种常见的机器学习算法,用于建立输入变量与输出变量之间的线性关系。通过拟合最优的直线来进行预测和判断。 2. 逻辑回归:逻辑回归是一种常用于分类问题的线性模型。通过将线性回归的结果通过sigmoid函数进行转换,将输出限制在0-1之间,从而进行二分类预测。 3. 决策树:决策树是一种基于树结构的分类方法。通过一系列的决策节点和叶节点来对样本进行分类。决策树的训练过程包括选择最佳的节点和最优的划分特征。 4. K近邻算法:K近邻算法是一种基于实例的学习方法,通过计算输入样本与训练样本之间的距离,选择K个最近邻的样本来进行分类或回归。 5. 支持向量机:支持向量机是一种常用的二分类算法。通过将样本转换到高维空间,将样本分割为不同的类别,构造最优的超平面来进行分类。 6. 朴素贝叶斯:朴素贝叶斯是一种基于贝叶斯概率理论的分类方法。通过统计样本的特征向量在每个类别中的条件概率来进行分类。 7. 随机森林:随机森林是一种集成学习方法,通过多个决策树的集成来进行分类或回归。每个决策树使用不同的训练集和特征子集进行训练。 8. 神经网络:神经网络是一种模仿人脑神经元之间连接方式的计算模型。通过多个神经元的连接和权重调整来进行分类、回归等任务。 以上是人工智能原理与算法第四次作业的内容,涵盖了常用的机器学习算法和分类方法,这些方法在实际应用中具有广泛的应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值