Dw制作个人网站,电商网站里的图片,商务网站规划与建设的目的,电子商务网络安全pytorch中 torch.unbind、torch.split 和 torch.chunk等函数可用于张量的拆分操作。
1. torch.unbind
功能说明#xff1a; torch.unbind 沿指定的维度将张量“解包”为多个张量#xff0c;返回一个元组。解包后被操作的那个维度会消失#xff0c;每个输出张量的维度数会比…pytorch中 torch.unbind、torch.split 和 torch.chunk等函数可用于张量的拆分操作。
1. torch.unbind
功能说明 torch.unbind 沿指定的维度将张量“解包”为多个张量返回一个元组。解包后被操作的那个维度会消失每个输出张量的维度数会比原张量少 1。
函数签名
torch.unbind(input, dim0)input: 待解包的张量。dim: 指定沿哪个维度解包。
多维张量示例
import torch# 创建一个形状为 (2, 3, 4) 的张量
x torch.arange(24).reshape(2, 3, 4)
print(原始张量 x:\n, x)
print(x.shape:, x.shape) # torch.Size([2, 3, 4])# 沿第 0 维解包
slices0 torch.unbind(x, dim0)
print(\n沿 dim0 解包)
for i, t in enumerate(slices0):print(fslice {i} shape: {t.shape})# 每个张量形状为 (3, 4)# 沿第 1 维解包
slices1 torch.unbind(x, dim1)
print(\n沿 dim1 解包)
for i, t in enumerate(slices1):print(fslice {i} shape: {t.shape})# 每个张量形状为 (2, 4)2. torch.split
功能说明 torch.split 根据给定的大小或尺寸列表将张量沿指定维度切分成若干块。
如果传入一个整数则每块的大小为该整数最后一块可能会小于这个整数。如果传入一个尺寸列表则按列表中指定的尺寸进行切分。
函数签名
torch.split(tensor, split_size_or_sections, dim0)tensor: 待分割的张量。split_size_or_sections: 整数或尺寸列表指定每块的大小。dim: 指定沿哪个维度进行切分。
多维张量示例
import torch# 创建一个形状为 (2, 5, 4) 的张量
x torch.arange(40).reshape(2, 5, 4)
print(原始张量 x:\n, x)
print(x.shape:, x.shape) # torch.Size([2, 5, 4])# 按照固定大小进行切分沿第 1 维每块大小为 2
splits_fixed torch.split(x, 2, dim1)
print(\n沿 dim1 按固定大小 2 切分)
for i, t in enumerate(splits_fixed):print(fchunk {i} shape: {t.shape})# 输出块的形状可能为 (2, 2, 4), (2, 2, 4) 和最后一块 (2, 1, 4)# 按照指定尺寸列表进行切分沿第 1 维分块尺寸为 [1, 2, 2]
splits_list torch.split(x, [1, 2, 2], dim1)
print(\n沿 dim1 按尺寸列表 [1, 2, 2] 切分)
for i, t in enumerate(splits_list):print(fchunk {i} shape: {t.shape})# 分别输出形状 (2, 1, 4), (2, 2, 4), (2, 2, 4)3. torch.chunk
功能说明 torch.chunk 将张量沿指定维度平均分成指定数量的块。如果张量在该维度上的长度不能被块数整除则前面的块会比后面块多一个元素块的尺寸差别最多为 1。
函数签名
torch.chunk(tensor, chunks, dim0)tensor: 待分割的张量。chunks: 指定分成几块。dim: 指定沿哪个维度进行分块。
多维张量示例
对比总结
函数分割方式返回结果形式适用场景torch.unbind沿指定维度将张量完全解包每个输出不含该维度元组输出张量数 该维度的长度需要逐个处理某一维度上的切片且希望移除该维度时使用。torch.split按照指定大小或尺寸列表切分张量元组或列表需要按固定大小或自定义尺寸列表切分张量最后一块可能不均匀。torch.chunk将张量均匀分成指定数量的块元组或列表希望将张量平均分成若干块块数固定自动处理无法整除的情况。
注意
当处理多维张量时选择沿哪一维进行分割非常重要torch.unbind 会移除分割的那个维度而 torch.split 和 torch.chunk 则保持原始维度只是该维度上的大小发生变化。
通过这些示例代码和说明你可以根据具体需求选择合适的函数来分割多维张量。