笔记笔记
  • Home
  • AI&ML
  • Example
  • Zoo
  • 关于
⌘ K
简单的使用
自动微分
神经网络
图像分类
最后更新时间:
Copyright © 2023-2024 | Powered by dumi | GuoDapeng | 冀ICP备20004032号-1 | 冀公网安备 冀公网安备 13024002000293号

TABLE OF CONTENTS

‌
‌
‌
‌

简单的使用 - 回到 PyTorch 笔记

初始化自定义的张量

import torch
x = torch.tensor([1, 2])
print(x)

输出:

tensor([1, 2])

初始化空的张量

import torch
x = torch.empty(5, 3)
print(x)

输出:

tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])

初始化全零的张量

从输出上看 empty 与 zeros 没有看出区别

import torch
x = torch.zeros(5, 3)
print(x)

输出:

tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])

初始化随机的张量

import torch
x = torch.randn(5, 3)
print(x)

输出:

tensor([[ 0.1877, -1.9092, 1.1059],
[ 0.2327, 0.5454, -0.7579],
[ 0.6084, -0.8321, -1.7794],
[ 1.3832, 0.3885, 0.4378],
[-1.3836, -1.3846, -0.9360]])

指定张量数据的类型

import torch
x = torch.zeros(5, 3, dtype=torch.bool)
print(x)

输出:

tensor([[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False]])

简单的操作

import torch
x = torch.tensor([1, 2, 3])
print(x)
y = x.new_ones(5, 4)
print(x)
print(y)

输出:

tensor([1, 2, 3])
tensor([1, 2, 3])
tensor([[1, 1, 1],
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])

这里我没理解torch.tensor([1, 2, 3])有什么作用,感觉只要是个tensor类型都可以调用new_ones 产生一个新的张量,这个张量和之前的tensor没有什么关系。

随机一个一样形状的张量

import torch
x = torch.tensor([1., 2., 3.])
print(x)
y = torch.randn_like(x)
print(x)
print(y)

输出:

tensor([1., 2., 3.])
tensor([1., 2., 3.])
tensor([ 0.1063, -1.6153, -0.0023])

另一个例子

import torch
x = torch.tensor([1, 2, 3])
print(x)
# 指定了数据类型
y = torch.randn_like(x, dtype=torch.float)
print(x)
print(y)

输出:

tensor([1, 2, 3])
tensor([1, 2, 3])
tensor([-1.2236, 0.0653, 1.4208])

查看张量形状

import torch
x = torch.tensor([1, 2, 3])
print(x)
print(x.shape)

输出:

tensor([1, 2, 3])
torch.Size([3])

另一个例子

import torch
x = torch.zeros(5, 3)
print(x)
print(x.shape)

输出:

tensor([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
torch.Size([5, 3])

张量的运算

import torch
x = torch.randn(2, 2)
y = torch.randn(2, 2)
print(x)
print(y)
print(x + y) # 加法
print(x.add_(y)) # 加法覆盖到之前有的变量上
print(x)

输出:

tensor([[-0.0822, 0.9211],
[-0.2684, 0.3621]])
tensor([[ 0.9026, 1.5641],
[-0.4332, -0.9182]])
tensor([[ 0.8204, 2.4852],
[-0.7016, -0.5561]])
tensor([[ 0.8204, 2.4852],
[-0.7016, -0.5561]])
tensor([[ 0.8204, 2.4852],
[-0.7016, -0.5561]])

张量的切片

import torch
x = torch.randn(5, 3)
print(x)
print(x[1, 2])
print(x[1, 2].item()) # 输出张量里面存储的值
print(x[:, 2]) # 冒号表示全都要
print(x[1, :])
print(x[:, :])

输出:

tensor([[ 0.5189, -2.1651, -0.5402],
[-0.0485, 1.0667, 0.3151],
[ 0.9756, -0.7807, -0.3123],
[-0.8336, 0.0602, 1.5362],
[-0.6501, 0.9574, 0.1957]])
tensor(0.3151)
0.3150593936443329
tensor([-0.5402, 0.3151, -0.3123, 1.5362, 0.1957])
tensor([-0.0485, 1.0667, 0.3151])
tensor([[ 0.5189, -2.1651, -0.5402],
[-0.0485, 1.0667, 0.3151],
[ 0.9756, -0.7807, -0.3123],
[-0.8336, 0.0602, 1.5362],
[-0.6501, 0.9574, 0.1957]])

张量的变换

import torch
x = torch.randn(5, 3)
print(x)
y = x.view(15)
print(y)
y = x.view(3, 5)
print(y)
y = x.view(-1, 5) # -1 表示系统自己算出这个地方应该是多少
print(y)

输出:

tensor([[-0.1437, 0.0926, 0.3990],
[ 1.2525, -1.3882, 0.8075],
[ 1.0579, 0.0281, -1.3576],
[ 1.7046, -2.1001, 0.6919],
[ 0.4507, 2.3679, 2.3774]])
tensor([-0.1437, 0.0926, 0.3990, 1.2525, -1.3882, 0.8075, 1.0579, 0.0281,
-1.3576, 1.7046, -2.1001, 0.6919, 0.4507, 2.3679, 2.3774])
tensor([[-0.1437, 0.0926, 0.3990, 1.2525, -1.3882],
[ 0.8075, 1.0579, 0.0281, -1.3576, 1.7046],
[-2.1001, 0.6919, 0.4507, 2.3679, 2.3774]])
tensor([[-0.1437, 0.0926, 0.3990, 1.2525, -1.3882],
[ 0.8075, 1.0579, 0.0281, -1.3576, 1.7046],
[-2.1001, 0.6919, 0.4507, 2.3679, 2.3774]])