PyTorch中view()与cat()函数讲解浴与实例--(已解决)

本文介绍了PyTorch中的view()和cat()函数。view()类似于numpy的reshape,用于张量的重塑,允许一个维度设为-1。cat()函数则用于在特定维度上连接多个张量,需要输入是张量序列,且张量的形状和类型要匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学习,记录一下:

1.view()函数

  view()函数有些像numpy中的reshape函数,是用来的tensor(张量)形式的数据进行围堵重构的,直接用程序来说明用法。

import torch

torch.manual_seed(0)	# 用来控制内部的随机机制使每次得到的随机数一样

tt = torch.rand(3,4)
# tensor([[0.4963, 0.7682, 0.0885, 0.1320],
#         [0.3074, 0.6341, 0.4901, 0.8964],
#         [0.4556, 0.6323, 0.3489, 0.4017]])

print(tt.view((2,-1)))
# tensor([[0.4963, 0.7682, 0.0885, 0.1320, 0.3074, 0.6341],
#         [0.4901, 0.8964, 0.4556, 0.6323, 0.3489, 0.4017]])
print(tt.view(2,-1))
# tensor([[0.4963, 0.7682, 0.0885, 0.1320, 0.3074, 0.6341],
#         [0.4901, 0.8964, 0.4556, 0.6323, 0.3489, 0.4017]])

  其中-1表示不对这一维度的数量做具体限定,算出来是多少就是多少,注意在所有维度中只能有一个维度指定为-1。

### PyTorch 猫 示例代码 为了展示如何使用 PyTorch 进行图像分类,特别是针对猫的图片识别任务,下面提供了一个简单的示例代码。此代码展示了如何加载数据集并训练模型来区分不同类别的动物,这里假设类别之一为猫。 #### 数据准备 首先定义 `DataLoader` 来处理输入的数据集: ```python from torchvision import datasets, transforms import torch.utils.data as data transform = transforms.Compose([ transforms.Resize((64, 64)), transforms.ToTensor() ]) dataset_train = datasets.ImageFolder(root='path_to_cat_dataset', transform=transform) train_loader = data.DataLoader( dataset_train, batch_size=32, shuffle=True, num_workers=4 )[^1] ``` 这段代码设置了用于预处理图像的操作链,并创建了 `ImageFolder` 实例指向存储猫图的位置。接着通过设置合适的参数配置了 `DataLoader` 对象以便后续迭代读取批次样本。 #### 定义网络结构 接下来构建卷积神经网络 (CNN),这是一种常用来做图像分类的任务架构: ```python import torch.nn as nn import torch.nn.functional as F class Net(nn.Module): def __init__(self): super().__init__() self.conv1 = nn.Conv2d(in_channels=3, out_channels=6, kernel_size=5) self.pool = nn.MaxPool2d(kernel_size=2, stride=2) self.conv2 = nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 2) # Assuming binary classification between cat and non-cat def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = x.view(-1, 16 * 5 * 5) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x ``` 上述代码实现了一种基础版本的 CNN 架构,其中包含了两个卷积层和三个全连接层。最后一层输出维度设为2,表示这是一个二元分类问题——即判断给定图片是否属于“猫”。 #### 训练过程 最后编写一段脚本来执行实际的学习流程: ```python device = 'cuda' if torch.cuda.is_available() else 'cpu' net = Net().to(device) criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) for epoch in range(EPOCHS): running_loss = 0.0 for i, (inputs, labels) in enumerate(train_loader): inputs, labels = inputs.to(device), labels.to(device) optimizer.zero_grad() outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() print('Finished Training') ``` 该部分初始化了损失函数、优化器并将整个计算转移到 GPU 上运行(如果可用)。循环遍历所有的 mini-batches 并更新权重直到完成指定轮次的训练。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值