首页 > 分享 > pytorch 鸢尾花分类

pytorch 鸢尾花分类

文章目录 前言一、鸢尾花数据集介绍二、使用步骤1.引入库2.读入数据3.划分训练集和测试集4.构建神经网络训练模型测试模型部分数据展示

前言

pytorch 鸢尾花分类

一、鸢尾花数据集介绍

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

鸢尾花数据集(Iris dataset)是统计学和机器学习领域中常用的数据集之一,由英国统计学家和生物学家Ronald A. Fisher于1936年首次引入。这个数据集包含了三个不同种类的鸢尾花的测量数据,每个类别有50个样本,总共包含150个样本。
这三个鸢尾花的种类是:

山鸢尾(Iris setosa): 这种鸢尾花通常较小,花瓣较短,花朵颜色鲜艳,常见于北美。

变色鸢尾(Iris versicolor): 这种鸢尾花的花瓣和花萼都较长,颜色较为丰富。

维吉尼亚鸢尾(Iris virginica): 这种鸢尾花通常较大,花瓣较长,花朵颜色深沉。
每个样本都包含了以下四个特征的测量值:

花萼长度(sepal length)(单位:厘米)
花萼宽度(sepal width)(单位:厘米)
花瓣长度(petal length)(单位:厘米)
花瓣宽度(petal width)(单位:厘米)

二、使用步骤

1.引入库

代码如下(示例):

import torch import torch.nn as nn import torch.optim as optim from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris from sklearn.preprocessing import StandardScaler 1234567

其中,from sklearn.datasets import load_iris 是导入 scikit-learn 中的 load_iris 函数,用于加载鸢尾花数据集。这个函数返回一个包含鸢尾花数据集的对象,通常包括数据(特征矩阵)和目标值(标签)。

2.读入数据

代码如下(示例):

# 加载鸢尾花数据集 iris = load_iris() X = iris.data y = iris.target 1234

Number of samples: 150
Number of features: 4

3.划分训练集和测试集

# 加载鸢尾花数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) 12

test_size=0.2 意味着将20%的数据用于测试,80%用于训练。
random_state=42 是为了确保每次运行代码时划分的训练集和测试集保持一致,以便结果可复现。

# 转换为 PyTorch 张量 X_train = torch.FloatTensor(X_train) y_train = torch.LongTensor(y_train) X_test = torch.FloatTensor(X_test) y_test = torch.LongTensor(y_test) 12345

4.构建神经网络

# 定义神经网络模型 class IrisClassifier(nn.Module): def __init__(self, input_size, hidden_size, num_classes): super(IrisClassifier, self).__init__() self.layer1 = nn.Linear(input_size, hidden_size) self.relu = nn.ReLU() self.layer2 = nn.Linear(hidden_size, num_classes) def forward(self, x): x = self.layer1(x) x = self.relu(x) x = self.layer2(x) return x # 创建模型、损失函数和优化器 # 设置模型参数 input_size = 4 # 输入特征的数量 hidden_size = 8 # 隐藏层神经元的数量 num_classes = 3 # 输出类别的数量 model = IrisClassifier(input_size, hidden_size, num_classes) criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.01)

1234567891011121314151617181920212223

这里使用了交叉熵损失函数 (CrossEntropyLoss),它是用于多分类任务的常见损失函数。在这个例子中,由于鸢尾花分类是一个多类别任务,所以交叉熵损失是一个合适的选择。损失函数用于度量模型输出与真实标签之间的差异,目标是通过调整模型参数来最小化这个差异。
使用 Adam 优化器 (Adam),用于更新神经网络模型的参数。model.parameters() 提供了所有模型参数的迭代器,这些参数将通过优化器进行更新。lr=0.01 指定了学习率,它是控制模型参数更新步长的超参数。调整学习率可以影响模型的收敛速度和性能。

训练模型

# 加载鸢尾花数据集 num_epochs = 100 for epoch in range(num_epochs): # 前向传播 outputs = model(X_train) loss = criterion(outputs, y_train) # 反向传播和优化 optimizer.zero_grad() loss.backward() optimizer.step() if (epoch + 1) % 10 == 0: print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}') 1234567891011121314

其中,backward进行反向传播
step()进行参数的更新

测试模型

# 测试模型 with torch.no_grad(): model.eval() outputs = model(X_test) _, predicted = torch.max(outputs, 1) accuracy = (predicted == y_test).sum().item() / y_test.size(0) print(f'Test Accuracy: {accuracy:.4f}') 1234567

torch.no_grad() 是一个上下文管理器(Context Manager),在这个上下文中的操作将不会被记录用于梯度计算。使用 torch.no_grad() 主要有两个目的:
1.禁用梯度计算: 在深度学习中,有时我们需要进行一些不需要梯度计算的操作,例如在模型推断(inference)阶段或者对于一些参数的更新。通过使用 torch.no_grad(),可以显式地告诉 PyTorch 在这个上下文中不要计算梯度,这有助于减少内存消耗并提高计算速度。

2.减少内存消耗: 在模型推断阶段,我们通常只是使用已经训练好的模型进行预测,而不需要在这个过程中进行梯度计算。通过使用 torch.no_grad(),可以避免存储梯度所需的额外内存。

部分数据展示

输入数据
[-5.25060772e-02 -1.05276654e+00 1.37546573e-01 8.77547895e-04]
输出
1

outputs的输出格例如
tensor([[-5.4479e-01, -3.5709e-02, 3.8968e-01],], grad_fn=)

相关知识

搭建简单的神经网络——使用pytorch实现鸢尾花的分类
Python基于Pytorch Transformer实现对iris鸢尾花的分类预测,分别使用CPU和GPU训练
鸢尾花、葡萄酒分类数据集
pytorch 花朵的分类识别
【机器学习】基于KNN算法实现鸢尾花数据集的分类
Python sklearn实现SVM鸢尾花分类
神经网络分类鸢尾花数据与可视化展示
深度学习鸢尾花分类实验报告 鸢尾花实验目的
神经网络鸢尾花
pytorch深度学习框架——实现病虫害图像分类

网址: pytorch 鸢尾花分类 https://m.huajiangbk.com/newsview1842664.html

所属分类:花卉
上一篇: 教你一个认识鸢尾的技巧
下一篇: 鸢尾属植物的分类及应用价值.pd