网站设计需要哪些技能wordpress 自动图片
- 作者: 五速梦信息网
- 时间: 2026年04月20日 07:29
当前位置: 首页 > news >正文
网站设计需要哪些技能,wordpress 自动图片,淄博做网站的,专业网站推广公司使用 PyTorch 自定义数据集并划分训练、验证与测试集 在图像分类等任务中#xff0c;通常需要将原始训练数据进一步划分为训练集和验证集#xff0c;以便在训练过程中评估模型的性能。下面将详细介绍如何组织数据与注释文件、如何分割训练集和验证集#xff0c;以及如何基于…使用 PyTorch 自定义数据集并划分训练、验证与测试集 在图像分类等任务中通常需要将原始训练数据进一步划分为训练集和验证集以便在训练过程中评估模型的性能。下面将详细介绍如何组织数据与注释文件、如何分割训练集和验证集以及如何基于自定义 Dataset 类构建 DataLoader 以加速模型训练与评估。 一、数据准备 1.1 文件结构 假设你的数据目录结构如下所示 data/ ├── train_data/ │ ├── img1.png │ ├── img2.png │ ├── img3.png │ └── … ├── test_data/ │ ├── img101.png │ ├── img102.png │ ├── img103.png │ └── … ├── train_annotations.csv └── test_annotations.csv注意这里将 train_annotations.csv 和 test_annotations.csv 文件单独放在 data/ 目录下而不放在各自图片的子文件夹中。这样当图片数量非常多时我们也能快速找到并管理这两个 CSV 文件。 1.2 注释文件CSV格式示例 在 train_annotations.csv 和 test_annotations.csv 中一般会包含两列或更多列信息但最关键的通常是 图片文件名filename和 标签label。格式示例如下 train_annotations.csv filename,label img1.png,0 img2.png,1 img3.png,0 …test_annotations.csv filename,label img101.png,0 img102.png,1 img103.png,0 …filename 列表示图像的文件名需要与 train_data/ 或 test_data/ 文件夹下的文件一一对应。label 列表示图像所对应的类别或标签可以是整数也可以是字符串比如 cat、dog 等。训练时通常会将字符串映射到整数标签或独热编码。 二、将训练数据划分为训练集和验证集 在进行模型训练前往往需要将原始训练数据以下简称 “总训练集”拆分成 训练集train 和 验证集val。这里我们使用 scikit-learn 提供的 train_test_split 函数来完成这一步骤。 import pandas as pd from sklearn.model_selection import train_test_split# 读取原始训练集的注释文件此时还未拆分 train_annotations pd.read_csv(data/train_annotations.csv)# 按 80%:20% 的比例拆分为 新的训练集(train_df) 和 验证集(val_df) train_df, val_df train_test_split(train_annotations, test_size0.2, random_state42, stratifytrain_annotations[label] )# 将拆分后的注释文件保存为新的 CSV 文件 train_df.to_csv(data/train_split.csv, indexFalse) val_df.to_csv(data/val_split.csv, indexFalse)关键参数说明 test_size0.2表示将 20% 的样本作为验证集其余 80% 作为新的训练集。random_state42让划分结果可复现方便后续对比不同实验结果。stratifytrain_annotations[label]在划分时保持各类别在训练和验证集中相同比例这在分类任务中尤为重要。 执行完以上步骤后你的 data 目录下会多出两个新的注释文件 data/ ├── train_data/ │ ├── … ├── test_data/ │ ├── … ├── train_annotations.csv # 原始总训练集注释 ├── train_split.csv # 新的训练集注释 └── val_split.csv # 新的验证集注释三、自定义 Dataset 类 PyTorch 提供了 torch.utils.data.Dataset 作为数据集的抽象基类。我们可以通过继承并重写其中的方法来实现灵活的数据加载逻辑。 下面的 CustomImageDataset 类支持通过 CSV 文件包括你在上一步生成的 train_split.csv, val_split.csv 等来读取图像与标签并在取样本时进行必要的预处理操作。 import os import pandas as pd from torch.utils.data import Dataset from PIL import Imageclass CustomImageDataset(Dataset):def init(self, annotations_file, img_dir, transformNone, target_transformNone):初始化数据集。参数:annotations_file (str): CSV 文件路径包含 (filename, label) 等信息img_dir (str): 存放图像的文件夹路径transform (callable, optional): 对图像进行转换和增强的函数或 transforms 组合target_transform (callable, optional): 对标签进行转换的函数self.img_labels pd.read_csv(annotations_file)self.img_dir img_dirself.transform transformself.target_transform target_transformdef len(self):返回整个数据集的样本数量。return len(self.img_labels)def getitem(self, idx):根据索引 idx 获取单个样本。返回:(image, label) 其中 image 可以是一个 PIL 图像或 Tensorlabel 可以是整数或字符串# 1. 获取图像文件名与对应的标签img_path os.path.join(self.img_dir, self.img_labels.iloc[idx, 0])label self.img_labels.iloc[idx, 1]# 2. 读取图像并转换为 RGB 模式如果是灰度则可用 Limage Image.open(img_path).convert(RGB)# 3. 对图像和标签进行必要的变换if self.transform:image self.transform(image)if self.target_transform:label self.target_transform(label)return image, label四、创建训练集、验证集、测试集对应的 DataLoader 有了自定义 Dataset 后就可以利用 PyTorch 自带的 DataLoader 来进行批量数据加载、随机打乱以及多线程读取数据等工作。以下示例展示了如何分别实例化 训练集、验证集 和 测试集 的 Dataset 对象并为每个对象创建 DataLoader。 from torchvision import transforms from torch.utils.data import DataLoader# 定义训练、验证/测试时所需的数据变换 train_transform transforms.Compose([transforms.Resize((224, 224)),transforms.RandomHorizontalFlip(), # 数据增强transforms.ToTensor(),transforms.Normalize(mean[0.485, 0.456, 0.406],std[0.229, 0.224, 0.225]) ])val_test_transform transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),transforms.Normalize(mean[0.485, 0.456, 0.406],std[0.229, 0.224, 0.225]) ])# 实例化训练集 (train_dataset) train_dataset CustomImageDataset(annotations_filedata/train_split.csv, # 注意这里不再是 data/train_annotations.csvimg_dirdata/train_data,transformtrain_transform )# 实例化验证集 (val_dataset) val_dataset CustomImageDataset(annotations_filedata/val_split.csv,img_dirdata/train_data,transformval_test_transform )# 实例化测试集 (test_dataset) test_dataset CustomImageDataset(annotations_filedata/test_annotations.csv,img_dirdata/test_data,transformval_test_transform )# 构建 DataLoader train_loader DataLoader(train_dataset,batch_size64,shuffleTrue, # 训练时常使用 shuffleTrue 来打乱顺序num_workers4, # 根据 CPU 核心数进行调整drop_lastTrue # 避免最后一个 batch 样本数不足时带来的问题 )val_loader DataLoader(val_dataset,batch_size64,shuffleFalse,num_workers4,drop_lastFalse )test_loader DataLoader(test_dataset,batch_size64,shuffleFalse,num_workers4,drop_lastFalse )通过使用 DataLoader你就可以在训练和验证过程中以 批batch为单位获取数据从而显著提升训练速度并方便进行数据增强、随机打乱等操作。 五、完整示例脚本 下面给出一个相对完整的示例脚本整合了数据拆分、自定义数据集加载以及构建 DataLoader 的主要流程。如果你愿意可以将这些步骤拆分到不同的 Python 文件中以保持项目结构清晰。 import os import pandas as pd from sklearn.model_selection import train_test_split from torch.utils.data import Dataset, DataLoader from PIL import Image from torchvision import transforms# 1. 数据集拆分函数 # def split_train_val(annotations_file, output_train_file, output_val_file, test_size0.2, random_state42):df pd.read_csv(annotations_file)train_df, val_df train_test_split(df, test_sizetest_size, random_staterandom_state, stratifydf[label])train_df.to_csv(output_train_file, indexFalse)val_df.to_csv(output_val_file, indexFalse)# 2. 定义自定义 Dataset 类 # class CustomImageDataset(Dataset):def init(self, annotations_file, img_dir, transformNone, target_transformNone):self.img_labels pd.read_csv(annotations_file)self.img_dir img_dirself.transform transformself.target_transform target_transformdef len(self):return len(self.img_labels)def getitem(self, idx):img_path os.path.join(self.img_dir, self.img_labels.iloc[idx, 0])label self.img_labels.iloc[idx, 1]image Image.open(img_path).convert(RGB)if self.transform:image self.transform(image)if self.target_transform:label self.target_transform(label)return image, label# 3. 执行划分并创建训练/验证/测试集 #
假设原始的训练集标注文件位于 data/train_annotations.csv
split_train_val(annotations_filedata/train_annotations.csv,output_train_filedata/train_split.csv,output_val_filedata/val_split.csv,test_size0.2,random_state42 )train_transform transforms.Compose([transforms.Resize((224, 224)),transforms.RandomHorizontalFlip(),transforms.ToTensor(),transforms.Normalize(mean[0.485, 0.456, 0.406],std[0.229, 0.224, 0.225]) ])val_test_transform transforms.Compose([transforms.Resize((224, 224)),transforms.ToTensor(),transforms.Normalize(mean[0.485, 0.456, 0.406],std[0.229, 0.224, 0.225]) ])train_dataset CustomImageDataset(annotations_filedata/train_split.csv,img_dirdata/train_data,transformtrain_transform )val_dataset CustomImageDataset(annotations_filedata/val_split.csv,img_dirdata/train_data,transformval_test_transform )test_dataset CustomImageDataset(annotations_filedata/test_annotations.csv,img_dirdata/test_data,transformval_test_transform )train_loader DataLoader(train_dataset,batch_size64,shuffleTrue,num_workers4,drop_lastTrue )val_loader DataLoader(val_dataset,batch_size64,shuffleFalse,num_workers4,drop_lastFalse )test_loader DataLoader(test_dataset,batch_size64,shuffleFalse,num_workers4,drop_lastFalse )# 4. 简单测试读取一个 batch # for images, labels in train_loader:print(images.shape, labels.shape)break六、在训练循环中使用验证集 构建好训练、验证和测试集的 DataLoader 之后你就可以在模型训练过程中使用验证集来评估模型性能并在完全训练结束后对测试集进行最终评估。以下是一个最简化的示例演示如何在每个 epoch 后进行验证 import torch import torch.nn as nn import torch.optim as optim# 定义简单的神经网络 class SimpleNN(nn.Module):def init(self, num_classes10):super(SimpleNN, self).init()self.flatten nn.Flatten()self.fc1 nn.Linear(224*224*3, 128) # 根据输入图像大小进行调整self.relu nn.ReLU()self.fc2 nn.Linear(128, num_classes)def forward(self, x):x self.flatten(x)x self.relu(self.fc1(x))x self.fc2(x)return x# 初始化模型、损失函数和优化器 device torch.device(cuda if torch.cuda.is_available() else cpu) model SimpleNN(num_classes2).to(device) # 假设有 2 个类别 criterion nn.CrossEntropyLoss() optimizer optim.Adam(model.parameters(), lr0.001)# 训练过程 num_epochs 5 for epoch in range(num_epochs):# 1. 训练阶段model.train()running_loss 0.0for images, labels in train_loader:images images.to(device)labels labels.to(device)optimizer.zero_grad()outputs model(images)loss criterion(outputs, labels)loss.backward()optimizer.step()running_loss loss.item()avg_train_loss running_loss / len(train_loader)# 2. 验证阶段model.eval()correct 0total 0val_loss 0.0with torch.no_grad():for images, labels in val_loader:images images.to(device)labels labels.to(device)outputs model(images)loss criterion(outputs, labels)valloss loss.item(), predicted torch.max(outputs.data, 1)total labels.size(0)correct (predicted labels).sum().item()avg_val_loss val_loss / len(val_loader)val_accuracy 100.0 * correct / totalprint(fEpoch [{epoch1}/{num_epochs}], fTrain Loss: {avg_train_loss:.4f}, fVal Loss: {avg_val_loss:.4f}, fVal Accuracy: {val_accuracy:.2f}%)输出示例 Epoch [1⁄5], Train Loss: 1.2034, Val Loss: 0.4567, Val Accuracy: 85.32% Epoch [2⁄5], Train Loss: 0.9876, Val Loss: 0.3987, Val Accuracy: 88.45% …总结 数据组织将大量图片与注释文件分开存储如 train_annotations.csv 与 test_annotations.csv 单独放在 data/ 目录下可以在图片数量庞大时更方便地管理和检索。数据集拆分使用 train_test_split 将原始训练集拆分为训练集与验证集以便在训练过程中监控模型的过拟合情况。自定义 Dataset通过继承 Dataset 并重写 getitem、len可以灵活处理任意格式的数据并在读入时执行预处理/增强操作。构建 DataLoader使用 PyTorch 的 DataLoader 可以轻松实现批量读取、并行加速、随机打乱等功能大幅提升训练效率。验证与测试在每个 epoch 后对验证集进行评估可以及时发现过拟合和调参问题最终对测试集进行评估可以获得模型的实际泛化性能。
相关文章
-
网站设计需要哪些技能wordpress 文件上传大小
网站设计需要哪些技能wordpress 文件上传大小
- 技术栈
- 2026年04月20日
-
网站设计需求方案学院网站怎么做的
网站设计需求方案学院网站怎么做的
- 技术栈
- 2026年04月20日
-
网站设计行业资讯有没有做定制衣服的网站
网站设计行业资讯有没有做定制衣服的网站
- 技术栈
- 2026年04月20日
-
网站设计需要那些人网站建设合同书注意事项
网站设计需要那些人网站建设合同书注意事项
- 技术栈
- 2026年04月20日
-
网站设计需要什么编程零基础入门课程
网站设计需要什么编程零基础入门课程
- 技术栈
- 2026年04月20日
-
网站设计需要什么群晖nas安装wordpress安装
网站设计需要什么群晖nas安装wordpress安装
- 技术栈
- 2026年04月20日
