Pytorch入门01

举报
路上有吾 发表于 2026/11/14 22:17:07 2026/11/14
【摘要】 torch.mean函数原型:torch.mean(data,dim=None, keepdim=False)作用:计算指定维度的平均值参数:data:输入的数据dim:指定的维度,如果为None则表示对所有维度进行keepdim:是否保留计算平均值的维度,保留后该维度的长度为1示例:import torch​data = torch.randn(2,3,4)print("原始数据")pri...

torch.mean

函数原型:torch.mean(data,dim=None, keepdim=False)

作用:计算指定维度的平均值

参数:

  • data:输入的数据

  • dim:指定的维度,如果为None则表示对所有维度进行

  • keepdim:是否保留计算平均值的维度,保留后该维度的长度为1

示例:

import torch
​
data = torch.randn(2,3,4)
print("原始数据")
print(data.shape)
print(data)
​
​
default_mean = torch.mean(data, dim=1)
print("默认均值")
print(default_mean.shape)
print(default_mean)
​
keepdim_mean = torch.mean(data, dim=1, keepdim=True)
print("keepdim均值")
print(keepdim_mean.shape)
print(keepdim_mean)
​
​
"""
原始数据
torch.Size([2, 3, 4])
tensor([[[-0.1666, 0.9206, 1.3668, -1.9337],
        [-1.9155, 1.0233, -1.0685, -0.6268],
        [ 1.3937, -1.0046, 1.5545, -0.1198]],
​
      [[ 1.2142, 0.1488, -1.0612, 0.9261],
        [ 1.0475, 0.0313, 0.6086, 0.3535],
        [-2.2811, -0.8609, 0.0288, 0.8412]]])
默认均值
torch.Size([2, 4])
tensor([[-0.2295, 0.3131, 0.6176, -0.8934],
      [-0.0065, -0.2269, -0.1413, 0.7069]])
keepdim均值
torch.Size([2, 1, 4])
tensor([[[-0.2295, 0.3131, 0.6176, -0.8934]],
​
      [[-0.0065, -0.2269, -0.1413, 0.7069]]])
"""


torch.squeeze & torch.unsqueeze

函数原型:torch.squeeze(input, dim)

作用:移除张量中大小为 1 的维度的函数

参数:

  • input:输入数据

  • dim:是否指定维度,如果不指定则移除张量中所有长度为1的维度


函数原型:torch.unsqueeze(input, dim)

作用:在指定位置插入大小为 1 的维度

参数:

  • input:输入数据

  • dim:指定维度,必填项

示例:

import torch
​
data = torch.randn(2,3)
​
unsqueeze_data = torch.unsqueeze(data,dim=0)
print("在0维上进行unsqueeze后数据")
print(unsqueeze_data.shape)
print(unsqueeze_data)
​
squeeze_data = torch.squeeze(unsqueeze_data,dim=1)
print("在1维上进行squeeze后数据")
print(squeeze_data.shape)
print(squeeze_data)
​
squeeze_data = torch.squeeze(squeeze_data,dim=0)
print("在0维上进行squeeze后数据")
print(squeeze_data.shape)
print(squeeze_data)
​
​
"""
在0维上进行unsqueeze后数据
torch.Size([1, 2, 3])
tensor([[[ 0.5905, -0.0414, -1.8667],
        [ 1.5337, 0.0957, 1.1172]]])
在1维上进行squeeze后数据
torch.Size([1, 2, 3])
tensor([[[ 0.5905, -0.0414, -1.8667],
        [ 1.5337, 0.0957, 1.1172]]])
在0维上进行squeeze后数据
torch.Size([2, 3])
tensor([[ 0.5905, -0.0414, -1.8667],
      [ 1.5337, 0.0957, 1.1172]])
"""


torch.nn.Conv1d

函数原型:torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

作用:一维卷积

参数:

  • in_channels: 输入通道数

  • out_channels: 输出通道数

  • kernel_size: 卷积核大小

  • stride:滑动步长

  • padding:

  • dilation:

  • groups:

  • bias:

示例

import torch
import torch.nn as nn
​
# 一维卷积:输入通道=4,输出通道=6(卷积核个数),核大小=3
conv1d = nn.Conv1d(in_channels=4, out_channels=6, kernel_size=3, padding=1)
​
# 输入:batch=2,通道=4,序列长度=5
x = torch.randn(2, 4, 5)
print("输入数据:\n", x)
print("输入形状:", x.shape)
​
output = conv1d(x)
print("输出数据:\n", output)
print("输出形状:", output.shape)
​
print("卷积核形状:", conv1d.weight.shape)
print("偏置项形状:", conv1d.bias.shape)
​
"""
输入数据:
tensor([[[-1.9907, 0.3726, -0.5296, 0.3108, 0.4288],
        [ 0.5699, -0.2702, -0.4008, 0.9082, -0.3383],
        [-0.4370, -0.6798, 1.2663, 0.9417, -0.2399],
        [-1.0636, -0.4160, 0.0577, 0.0892, 0.2607]],
​
      [[-1.6195, 0.6700, -0.2367, 1.2948, 0.4731],
        [-0.4735, 1.4904, 0.4031, -0.7842, -0.5952],
        [-0.4210, 0.2534, -0.6936, 0.7000, 1.4875],
        [ 1.9850, 1.4336, 1.0419, -0.2482, 0.6426]]])
输入形状: torch.Size([2, 4, 5])
输出数据:
tensor([[[ 1.1034, -0.3813, 0.5577, 0.4728, 0.0519],
        [ 0.6731, -0.4322, -0.3775, -0.0852, -0.0534],
        [ 0.4972, -0.8872, -0.3269, 0.0670, -0.1191],
        [-0.6457, -0.5456, 0.6170, -0.1733, -0.1201],
        [-0.1629, 0.0907, 0.2409, 0.0179, 0.2075],
        [-0.0758, -0.4469, -0.5576, -0.0177, -0.2723]],
​
      [[-0.2226, -0.9915, 0.0894, -0.4626, 0.6914],
        [-0.0640, 0.3878, 0.5609, -0.1710, -0.4539],
        [ 0.0470, -1.0436, -0.0946, -0.8633, 0.0134],
        [ 0.8971, 0.9505, -0.0975, 0.7095, 0.3819],
        [ 0.2498, -0.5089, 0.4106, 0.1497, 0.1669],
        [-0.8418, -0.2747, -0.1477, -0.3279, -0.3471]]],
      grad_fn=<ConvolutionBackward0>)
输出形状: torch.Size([2, 6, 5])
卷积核形状: torch.Size([6, 4, 3])
偏置项形状: torch.Size([6])
"""


torch.reshape

函数原型:torch.reshape(input, shape)

作用:按照指定的形状来重新调整张量的视图,同时对于非-1列,相关数据采用采用内存连续来组织,具体见下方示例

参数:

  • input (Tensor): 输入张量。

  • shape (tuple 或 int): 目标形状。形状中的元素个数必须与输入张量的元素个数相同。可以使用 -1 让 PyTorch 自动推断维度。

示例:

import torch
​
x = torch.arange(1, 25)
A = x.reshape(-1, 6)
a = x.reshape(-1, 6).permute(1, 0)
b = x.reshape(6, -1)
​
print("原始数组 x:")
print(x)
print("x.shape =", tuple(x.shape))
print()
​
print("A = x.reshape(-1, 6):")
print(A)
print("A.shape =", tuple(A.shape), " strides =", A.stride(), " contiguous =", A.is_contiguous())
print()
​
print("a = x.reshape(-1, 6).permute(1, 0):")
print(a)
print("a.shape =", tuple(a.shape), " strides =", a.stride(), " contiguous =", a.is_contiguous())
print()
​
print("B = x.reshape(6, -1):")
print(b)
print("B.shape =", tuple(b.shape), " strides =", b.stride(), " contiguous =", b.is_contiguous())
​
"""
原始数组 x:
tensor([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
      19, 20, 21, 22, 23, 24])
x.shape = (24,)
​
A = x.reshape(-1, 6):
tensor([[ 1, 2, 3, 4, 5, 6],
      [ 7, 8, 9, 10, 11, 12],
      [13, 14, 15, 16, 17, 18],
      [19, 20, 21, 22, 23, 24]])
A.shape = (4, 6) strides = (6, 1) contiguous = True
​
a = x.reshape(-1, 6).permute(1, 0):
tensor([[ 1, 7, 13, 19],
      [ 2, 8, 14, 20],
      [ 3, 9, 15, 21],
      [ 4, 10, 16, 22],
      [ 5, 11, 17, 23],
      [ 6, 12, 18, 24]])
a.shape = (6, 4) strides = (1, 6) contiguous = False
​
B = x.reshape(6, -1):
tensor([[ 1, 2, 3, 4],
      [ 5, 6, 7, 8],
      [ 9, 10, 11, 12],
      [13, 14, 15, 16],
      [17, 18, 19, 20],
      [21, 22, 23, 24]])
B.shape = (6, 4) strides = (4, 1) contiguous = True
"""
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。