seo网站内部优化方案,免费设计房子的软件,wordpress赞助插件,上海十大营销策划公司排名目录
一、实验介绍 二、实验环境
1. 配置虚拟环境
2. 库版本介绍
三、实验内容 0. 导入必要的工具包
1. 直接加载鸢尾花数据集
a. 加载数据集
b. 数据归一化
c. 洗牌操作
d. 打印数据
2. 定义类封装数据
a. __init__(构造函数#xff1a;用于初始化数据集对象)
b.…目录
一、实验介绍 二、实验环境
1. 配置虚拟环境
2. 库版本介绍
三、实验内容 0. 导入必要的工具包
1. 直接加载鸢尾花数据集
a. 加载数据集
b. 数据归一化
c. 洗牌操作
d. 打印数据
2. 定义类封装数据
a. __init__(构造函数用于初始化数据集对象)
b. __getitem__(获取指定索引处的样本)
c. __len__(获取数据集的长度)
3. 构建数据集批量加载训练、验证、测试集
4. 代码整合 一、实验介绍 在本系列先前的代码中借助深度学习框架的帮助已经完成了前馈神经网络的大部分功能。本文将基于鸢尾花数据集构建一个数据迭代器以便在每次迭代时从全部数据集中获取指定数量的数据。借助深度学习框架中的Dataset类和DataLoader类来实现此功能
【深度学习】Pytorch 系列教程十三PyTorch数据结构5、数据加载器DataLoader_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132924381?spm1001.2014.3001.5502 二、实验环境 本系列实验使用了PyTorch深度学习框架相关操作如下
1. 配置虚拟环境
conda create -n DL python3.7
conda activate DL
pip install torch1.8.1cu102 torchvision0.9.1cu102 torchaudio0.8.1 -f https://download.pytorch.org/whl/torch_stable.htmlconda install matplotlib conda install scikit-learn
2. 库版本介绍
软件包本实验版本目前最新版matplotlib3.5.33.8.0numpy1.21.61.26.0python3.7.16scikit-learn0.22.11.3.0torch1.8.1cu1022.0.1torchaudio0.8.12.0.2torchvision0.9.1cu1020.15.2 三、实验内容
ChatGPT 前馈神经网络Feedforward Neural Network是一种常见的人工神经网络模型也被称为多层感知器Multilayer PerceptronMLP。它是一种基于前向传播的模型主要用于解决分类和回归问题。 前馈神经网络由多个层组成包括输入层、隐藏层和输出层。它的名称前馈源于信号在网络中只能向前流动即从输入层经过隐藏层最终到达输出层没有反馈连接。 以下是前馈神经网络的一般工作原理 输入层接收原始数据或特征向量作为网络的输入每个输入被表示为网络的一个神经元。每个神经元将输入加权并通过激活函数进行转换产生一个输出信号。 隐藏层前馈神经网络可以包含一个或多个隐藏层每个隐藏层由多个神经元组成。隐藏层的神经元接收来自上一层的输入并将加权和经过激活函数转换后的信号传递给下一层。 输出层最后一个隐藏层的输出被传递到输出层输出层通常由一个或多个神经元组成。输出层的神经元根据要解决的问题类型分类或回归使用适当的激活函数如Sigmoid、Softmax等将最终结果输出。 前向传播信号从输入层通过隐藏层传递到输出层的过程称为前向传播。在前向传播过程中每个神经元将前一层的输出乘以相应的权重并将结果传递给下一层。这样的计算通过网络中的每一层逐层进行直到产生最终的输出。 损失函数和训练前馈神经网络的训练过程通常涉及定义一个损失函数用于衡量模型预测输出与真实标签之间的差异。常见的损失函数包括均方误差Mean Squared Error和交叉熵Cross-Entropy。通过使用反向传播算法Backpropagation和优化算法如梯度下降网络根据损失函数的梯度进行参数调整以最小化损失函数的值。 前馈神经网络的优点包括能够处理复杂的非线性关系适用于各种问题类型并且能够通过训练来自动学习特征表示。然而它也存在一些挑战如容易过拟合、对大规模数据和高维数据的处理较困难等。为了应对这些挑战一些改进的网络结构和训练技术被提出如卷积神经网络Convolutional Neural Networks和循环神经网络Recurrent Neural Networks等。 本系列为实验内容对理论知识不进行详细阐释
咳咳其实是没时间整理待有缘之时回来填坑 0. 导入必要的工具包
import torch
from sklearn.datasets import load_iris
from torch.utils.data import Dataset, DataLoaderDataset和DataLoader类用于处理数据集和数据加载 1. 直接加载鸢尾花数据集 加载鸢尾花数据进行归一化并可选地进行洗牌操作以便于后续的深度学习任务。
import torch
from sklearn.datasets import load_irisdef load_data(shuffleTrue):x torch.tensor(load_iris().data)y torch.tensor(load_iris().target)# 数据归一化x_min torch.min(x, dim0).valuesx_max torch.max(x, dim0).valuesx (x - x_min) / (x_max - x_min)if shuffle:idx torch.randperm(x.shape[0])x x[idx]y y[idx]return x, y
a. 加载数据集 调用load_iris().data函数加载数据并使用torch.tensor将数据转换为PyTorch张量将结果赋值给变量x。 调用load_iris().target函数加载目标变量并使用torch.tensor将数据转换为PyTorch张量将结果赋值给变量y。
b. 数据归一化 计算矩阵x每列的最小值。 torch.min函数的dim参数设置为0表示按列计算最小值.values属性获取最小值的张量。 计算矩阵x每列的最大值。 torch.max函数的dim参数设置为0表示按列计算最大值.values属性获取最大值的张量。 x (x-x_min)/(x_max-x_min)对矩阵x进行归一化处理将每个元素减去最小值然后除以最大值与最小值之差。这样可以将数据缩放到0和1之间。
c. 洗牌操作 if shuffle:如果shuffle参数为True执行以下代码块。 idx torch.randperm(x.shape[0])生成一个随机排列的索引范围从0到x的行数减1。torch.randperm函数返回一个随机排列的整数序列。 x x[idx]根据生成的随机索引对矩阵x进行行重排打乱数据的顺序。 y y[idx]根据生成的随机索引对向量y进行行重排保持目标变量与输入数据的对应关系。 return x, y返回处理后的输入特征矩阵x和目标变量向量y。
d. 打印数据
x, y load_data()
print(Input features (x):)
print(x)
print(Target variables (y):)
print(y) 2. 定义类封装数据 创建一个用于处理鸢尾花数据集的自定义数据集继承自Dataset类该自定义数据集类可以用于创建鸢尾花数据集的训练集、验证集或测试集对象并提供给__getitem__和__len__方法以便能够使用DataLoader类进行数据加载和批处理操作。 class IrisDataset(Dataset):def __init__(self, modetrain, num_train120, num_dev15):super(IrisDataset,self).__init__()x, y load_data(shuffleTrue)if mode train:self.x, self.y x[:num_train], y[:num_train]elif mode dev:self.x, self.y x[num_train:num_train num_dev], y[num_train:num_train num_dev]else:self.x, self.y x[num_train num_dev:], y[num_train num_dev:]def __getitem__(self, idx):return self.x[idx], self.y[idx]def __len__(self):return len(self.x) class IrisDataset(Dataset):定义了一个名为IrisDataset的类该类继承自Dataset类表示一个自定义的数据集。
a. __init__(构造函数用于初始化数据集对象) 该函数接受三个参数 mode表示数据集模式默认为train num_train表示训练样本的数量默认为120 num_dev表示验证样本的数量默认为15。 super(IrisDataset, self).__init__()调用父类Dataset的构造函数确保正确地初始化基类。 x, y load_data(shuffleTrue)调用之前定义的load_data函数加载数据集。 如果数据集模式为train 将前num_train个训练样本赋值给类的成员变量self.x和self.y表示训练数据集。 如果数据集模式为dev 将从第num_train个样本开始的num_dev个样本赋值给类的成员变量self.x和self.y表示验证数据集。 如果数据集模式不是train也不是dev 将从第num_train num_dev个样本开始的剩余样本赋值给类的成员变量self.x和self.y表示测试数据集。
b. __getitem__(获取指定索引处的样本) return self.x[idx], self.y[idx]根据索引idx返回对应位置的输入特征和目标变量。
c. __len__(获取数据集的长度) return len(self.x)返回数据集的长度即样本数量。 3. 构建数据集批量加载训练、验证、测试集
batch_size 16# 分别构建训练集、验证集和测试集
train_dataset IrisDataset(modetrain)
dev_dataset IrisDataset(modedev)
test_dataset IrisDataset(modetest)train_loader DataLoader(train_dataset, batch_sizebatch_size,shuffleTrue)
dev_loader DataLoader(dev_dataset, batch_sizebatch_size)
test_loader DataLoader(test_dataset, batch_size1, shuffleTrue)
使用自定义的数据封装类加载鸢尾花数据集的训练集、验证集和测试集并使用DataLoader进行批量加载。 train_dataset是要加载的数据集对象batch_size是批量大小表示每个批次的样本数量shuffleTrue表示在每个迭代周期中对数据进行随机洗牌。将验证集数据集加载到dev_loader中未指定shuffle参数默认为False不进行洗牌。将测试集数据集加载到test_loader中将batch_size设置为1表示每个批次只包含一个样本同时指定shuffleTrue在每个迭代周期中对数据进行随机洗牌。 4. 代码整合
# 导入必要的工具包
import torch
from sklearn.datasets import load_iris
from torch.utils.data import Dataset, DataLoader# 此函数用于加载鸢尾花数据集
def load_data(shuffleTrue):x torch.tensor(load_iris().data)y torch.tensor(load_iris().target)# 数据归一化x_min torch.min(x, dim0).valuesx_max torch.max(x, dim0).valuesx (x - x_min) / (x_max - x_min)if shuffle:idx torch.randperm(x.shape[0])x x[idx]y y[idx]return x, y# 构建自己的数据集,继承自Dataset类
class IrisDataset(Dataset):def __init__(self, modetrain, num_train120, num_dev15):super(IrisDataset, self).__init__()x, y load_data(shuffleTrue)if mode train:self.x, self.y x[:num_train], y[:num_train]elif mode dev:self.x, self.y x[num_train:num_train num_dev], y[num_train:num_train num_dev]else:self.x, self.y x[num_train num_dev:], y[num_train num_dev:]def __getitem__(self, idx):return self.x[idx], self.y[idx]def __len__(self):return len(self.x)batch_size 16# 分别构建训练集、验证集和测试集
train_dataset IrisDataset(modetrain)
dev_dataset IrisDataset(modedev)
test_dataset IrisDataset(modetest)train_loader DataLoader(train_dataset, batch_sizebatch_size,shuffleTrue)
dev_loader DataLoader(dev_dataset, batch_sizebatch_size)
test_loader DataLoader(test_dataset, batch_size1, shuffleTrue)