PyTorch翻译官网教程4-TRANSFORMS

文章介绍了在PyTorch中如何使用Transforms模块对数据进行预处理,特别是针对FashionMNIST数据集。通过ToTensor转换将PIL图像转为张量并归一化,利用Lambda实现标签的one-hot编码,以便于训练机器学习模型。

官网链接

Transforms — PyTorch Tutorials 2.0.1+cu117 documentation

TRANSFORMS

数据并不总是以训练机器学习算法所需的最终处理形式出现,我们使用transforms对数据进行一些操作,使其适合于训练。

所有的TorchVision数据集都有两个参数,transform用于修改特征,target_transform用于修改标签。这两个参数为调用函数,包含转换逻辑。 torchvision.transforms 模块提供了几种常用的开箱即用的transform

FashionMNIST的特征为PIL Image格式,标签为integer格式。为了训练,我们需要将特征转换为归一化处理的张量,将标签转换为one-hot编码的张量。为了完成这些转换,我们使用ToTensor和Lambda。

import torch
from torchvision import datasets
from torchvision.transforms import ToTensor, Lambda

ds = datasets.FashionMNIST(
    root="data",
    train=True,
    download=True,
    transform=ToTensor(),
    target_transform=Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(0, torch.tensor(y), value=1))
)

输出

Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz
Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz to data/FashionMNIST/raw/train-images-idx3-ubyte.gz

  0%|          | 0/26421880 [00:00<?, ?it/s]
  0%|          | 65536/26421880 [00:00<01:12, 362266.80it/s]
  1%|          | 229376/26421880 [00:00<00:38, 680230.69it/s]
  3%|2         | 720896/26421880 [00:00<00:12, 2002640.95it/s]
  6%|5         | 1540096/26421880 [00:00<00:07, 3218256.61it/s]
 16%|#5        | 4227072/26421880 [00:00<00:02, 9447718.64it/s]
 24%|##3       | 6225920/26421880 [00:00<00:01, 10376547.38it/s]
 33%|###3      | 8847360/26421880 [00:01<00:01, 14166293.23it/s]
 42%|####1     | 11042816/26421880 [00:01<00:01, 13678077.39it/s]
 52%|#####1    | 13631488/26421880 [00:01<00:00, 16516067.49it/s]
 60%|######    | 15925248/26421880 [00:01<00:00, 15417830.40it/s]
 70%|######9   | 18448384/26421880 [00:01<00:00, 17609718.89it/s]
 79%|#######9  | 20905984/26421880 [00:01<00:00, 16403516.46it/s]
 88%|########8 | 23298048/26421880 [00:01<00:00, 18134303.49it/s]
 98%|#########7| 25886720/26421880 [00:01<00:00, 17102426.93it/s]
100%|##########| 26421880/26421880 [00:02<00:00, 13182141.90it/s]
Extracting data/FashionMNIST/raw/train-images-idx3-ubyte.gz to data/FashionMNIST/raw

Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz
Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz to data/FashionMNIST/raw/train-labels-idx1-ubyte.gz

  0%|          | 0/29515 [00:00<?, ?it/s]
100%|##########| 29515/29515 [00:00<00:00, 327759.82it/s]
Extracting data/FashionMNIST/raw/train-labels-idx1-ubyte.gz to data/FashionMNIST/raw

Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz
Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz to data/FashionMNIST/raw/t10k-images-idx3-ubyte.gz

  0%|          | 0/4422102 [00:00<?, ?it/s]
  1%|1         | 65536/4422102 [00:00<00:11, 363698.07it/s]
  5%|5         | 229376/4422102 [00:00<00:06, 683312.59it/s]
 14%|#4        | 622592/4422102 [00:00<00:02, 1702377.65it/s]
 36%|###5      | 1572864/4422102 [00:00<00:00, 3401498.22it/s]
 76%|#######5  | 3342336/4422102 [00:00<00:00, 7182283.54it/s]
100%|##########| 4422102/4422102 [00:00<00:00, 5435154.93it/s]
Extracting data/FashionMNIST/raw/t10k-images-idx3-ubyte.gz to data/FashionMNIST/raw

Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz
Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz to data/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz

  0%|          | 0/5148 [00:00<?, ?it/s]
100%|##########| 5148/5148 [00:00<00:00, 31293155.06it/s]
Extracting data/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz to data/FashionMNIST/raw

ToTensor()

ToTensor将PIL图像或NumPy数组转换为FloatTensor。并在[0,1]范围内缩放图像的像素强度值。

Lambda Transforms

Lambda transforms应用于任何用户定义的Lambda函数。在这里,我们定义一个函数来将整数转换为一个one-hot 编码张量。它首先创建一个大小为10的零张量(我们数据集中的标签数量),并调用scatter_,它对标签y给出的索引赋值=1。

target_transform = Lambda(lambda y: torch.zeros(
    10, dtype=torch.float).scatter_(dim=0, index=torch.tensor(y), value=1))

你输入的命令: ```bash conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia ``` 是一个 **使用 Conda 安装 PyTorch 深度学习框架及其相关组件,并启用 CUDA 11.8 支持** 的标准命令。下面我将详细解释这个命令的每一部分、它的作用、适用场景以及常见问题和解决方案。 --- ## ✅ 命令详解 ```bash conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia ``` | 部分 | 含义 | |------|------| | `conda install` | 使用 Anaconda/Miniconda 的包管理器安装软件 | | `pytorch` | 主体:PyTorch 框架(用于张量计算和深度神经网络) | | `torchvision` | 扩展库:提供图像数据处理工具(如 transforms)、预训练模型(ResNet 等)和常用数据集(CIFAR, ImageNet) | | `torchaudio` | 扩展库:音频处理支持(加载 WAV 文件、频谱图等) | | `pytorch-cuda=11.8` | 指定使用 NVIDIA CUDA 11.8 版本进行 GPU 加速运算 | | `-c pytorch` | 添加官方 [PyTorch 的 Conda 渠道](https://anaconda.org/pytorch)(必须!否则找不到包) | | `-c nvidia` | 添加 NVIDIA 的 Conda 渠道,用于获取 CUDA 相关依赖 | > 🔔 这个命令会自动安装与 CUDA 11.8 兼容的 PyTorch 构建版本,让你可以在支持的 GPU 上运行深度学习模型。 --- ## 📦 安装了哪些内容? | 包名 | 功能 | |------|------| | `pytorch` | 核心深度学习框架,支持动态计算图、自动求导、GPU 计算 | | `torchvision` | 图像处理模块:<br>• `transforms` 数据增强<br>• `models.resnet50()` 等预训练模型<br>• `datasets.ImageFolder` 加载图片数据 | | `torchaudio` | 音频处理模块:<br>• 读取 `.wav` 文件<br>• 提取梅尔频谱图(Mel-spectrogram)<br>• 集成 Kaldi 工具 | | `pytorch-cuda=11.8` | 不是独立库,而是“虚拟包”,用来触发 Conda 安装包含 CUDA 支持的 PyTorch 构建版本 | --- ## 💻 示例:验证是否安装成功 安装完成后,在 Python 中运行以下代码测试: ```python import torch print("PyTorch version:", torch.__version__) print("CUDA available:", torch.cuda.is_available()) print("CUDA version:", torch.version.cuda) print("Number of GPUs:", torch.cuda.device_count()) if torch.cuda.is_available(): print("Current GPU:", torch.cuda.get_device_name(0)) ``` ✅ 正常输出示例(表示 GPU 可用): ``` PyTorch version: 2.0.1 CUDA available: True CUDA version: 11.8 Number of GPUs: 1 Current GPU: NVIDIA GeForce RTX 3080 ``` ❌ 如果 `CUDA available: False`,说明没有正确启用 GPU,请查看下方“常见问题”。 --- ## ⚠️ 常见问题与解决方法 ### ❌ 问题 1:`CondaError: Packages missing in current channels` > 报错原因:未添加 `-c pytorch` 或网络连接失败 ✅ 解决方案: 确保完整命令中包含两个渠道: ```bash conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia ``` 不要漏掉 `-c pytorch`! 也可以尝试先更新 conda: ```bash conda update conda ``` --- ### ❌ 问题 2:CUDA 不可用(`torch.cuda.is_available()` 返回 `False`) 请检查以下几点: 1. **是否有 NVIDIA 显卡?** - Intel/AMD 集成显卡不支持 CUDA 2. **是否安装了最新版 NVIDIA 驱动?** - 打开命令提示符运行: ```bash nvidia-smi ``` - 输出应显示驱动版本和 GPU 信息 3. **驱动版本是否支持 CUDA 11.8?** - 一般要求驱动版本 ≥ 520.xx 4. **是否在正确的环境中激活?** ```bash conda activate your_env_name ``` --- ### 🐍 替代方式:使用 pip 安装(推荐速度更快) 如果你发现 conda 安装慢或冲突多,可以用 pip: ```bash pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 ``` - `cu118` 表示 CUDA 11.8 - 更快、更灵活,社区主流选择 > 官方推荐安装方式见:👉 https://pytorch.org/get-started/locally/ --- ## 🧩 推荐做法:创建独立虚拟环境安装 避免污染 base 环境,建议创建专属环境: ```bash # 1. 创建新环境(名为 pytorch_env) conda create -n pytorch_env python=3.9 # 2. 激活环境 conda activate pytorch_env # 3. 安装 PyTorch + CUDA 支持 conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia ``` 这样你的项目依赖完全隔离,安全又干净。 --- ## 🖼️ 总结图示 ``` 你的电脑 ├── 操作系统 Windows/Linux/macOS ├── NVIDIA 显卡 + 驱动 ├── CUDA Driver (由 nvidia-smi 显示) └── Anaconda └── 虚拟环境 pytorch_env ├── python=3.9 ├── pytorch (with CUDA 11.8 support) ├── torchvision └── torchaudio → 在 PyCharm/Jupyter 中设置解释器为此环境即可使用 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值