transform常用语法

本文详细介绍了CGAffineTransform中的transform修改视图大小的方法,包括transform的.b和.c变量如何影响视图变化,以及CGAffineTransformScale和CGAffineTransformMakeScale这两个方法的使用方式和参数说明。

如图,transform修改视图的大小时改变的是transform的.b和.c变量

CGAffineTransformScale该方法三个参数,第一个是改变的之前的transform,后两个为X,和Y方向上拉伸的倍数,即从原有transform的基础上再次改变;

CGAffineTransformMakeScale,该方法直接从视图最开始RectMake的基础上放大



PyTorch 是一个广泛使用的深度学习框架,它提供了丰富的张量操作和自动求导机制,适用于构建和训练神经网络模型。以下是一些 PyTorch 中常用语法和使用方法: ### 张量操作 张量是 PyTorch 中最基本的数据结构,类似于 NumPy 的数组,但支持 GPU 加速计算。 - **创建张量**:可以使用 `torch.tensor`、`torch.zeros`、`torch.ones` 等函数来创建张量。 ```python import torch x = torch.tensor([1, 2, 3]) y = torch.zeros(3, 4) # 创建一个3x4的全零张量 z = torch.ones(2, 2) # 创建一个2x2的全一张量 ``` - **张量运算**:包括加法、减法、乘法等基本运算。 ```python a = torch.randn(2, 3) b = torch.randn(2, 3) c = a + b # 张量加法 d = a * b # 张量逐元素乘法 ``` - **矩阵运算**:如矩阵乘法可以使用 `torch.mm` 或者 `@` 运算符。 ```python e = torch.randn(2, 3) f = torch.randn(3, 4) g = torch.mm(e, f) # 矩阵乘法 h = e @ f # 使用@运算符进行矩阵乘法 ``` - **转置**:使用 `t()` 方法对张量进行转置。 ```python i = torch.randn(2, 3) j = i.t() # 转置 ``` - **索引和切片**:与 Python 列表类似,可以通过索引来访问特定的元素或子张量。 ```python k = torch.randn(4, 5) l = k[0, :] # 获取第一行 m = k[:, 1] # 获取第二列 ``` - **广播机制**:PyTorch 支持广播机制,允许不同形状的张量进行算术运算。 ```python n = torch.randn(3, 1) o = torch.randn(1, 4) p = n + o # 广播机制使得两个张量可以相加 ``` ### 自动求导 PyTorch 提供了自动求导功能,这对于训练神经网络非常重要。 - **定义变量**:需要将张量设置为 requires_grad=True 来追踪其梯度。 ```python q = torch.randn(2, 2, requires_grad=True) ``` - **计算损失**:在前向传播之后,可以计算损失并调用 `.backward()` 来计算梯度。 ```python r = q * 2 s = r.sum() s.backward() # 计算梯度 print(q.grad) # 打印梯度 ``` ### 神经网络模块 PyTorch 的 `torch.nn` 模块提供了构建神经网络所需的层和损失函数。 - **定义网络**:通过继承 `nn.Module` 类来定义自己的网络。 ```python import torch.nn as nn import torch.nn.functional as F class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(1, 6, 3) self.fc1 = nn.Linear(6 * 6 * 6, 120) def forward(self, x): x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2)) x = x.view(-1, self.num_flat_features(x)) x = F.relu(self.fc1(x)) return x def num_flat_features(self, x): size = x.size()[1:] # all dimensions except the batch dimension num_features = 1 for s in size: num_features *= s return num_features net = Net() print(net) ``` - **损失函数**:可以使用内置的损失函数,如均方误差损失 `MSELoss`。 ```python from torch import optim criterion = nn.MSELoss() optimizer = optim.SGD(net.parameters(), lr=0.01) input = torch.randn(1, 1, 28, 28) target = torch.randn(1, 120) output = net(input) loss = criterion(output, target) loss.backward() optimizer.step() # 更新参数 ``` ### 数据加载 PyTorch 提供了 `DataLoader` 和 `Dataset` 类来方便地加载数据。 - **数据集**:自定义数据集需要继承 `Dataset` 并实现 `__len__` 和 `__getitem__` 方法。 ```python from torch.utils.data import Dataset, DataLoader class CustomDataset(Dataset): def __init__(self, data, transform=None): self.data = data self.transform = transform def __len__(self): return len(self.data) def __getitem__(self, idx): sample = self.data[idx] if self.transform: sample = self.transform(sample) return sample dataset = CustomDataset(data=[...]) # 假设data是一个列表 dataloader = DataLoader(dataset, batch_size=4, shuffle=True, num_workers=2) ``` 以上只是 PyTorch 的一些基础用法,实际应用中还有更多高级特性和技巧可以探索。对于更详细的使用方法,建议查阅 PyTorch 的官方文档。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值