赞
踩
- import torch
- import numpy as np
-
-
- # 1. torch.tensor() 根据指定数据创建张量
- print(10)
- print(torch.tensor(10))
-
- data_np = np.random.rand(2,3)
- print(data_np)
- print(torch.tensor(data_np))
-
-
- data = [[1.,2,3],[2,3,4]]
- print(data)
- print(torch.tensor(data))
-
- print('-'*60)
-
- # 2. torch.Tensor() 根据指定形状创建张量
- print(torch.Tensor(2))
- print(torch.Tensor([2])) # float32
-
- print('-'*60)
-
- # 3. 创建指定类型的张量
- print(torch.IntTensor(2,3)) #创建2行3列, dtype 为 int32 的张量
-
- print(torch.ShortTensor((2,3))) # int16
- print(torch.LongTensor([2,3])) # int64
- print(torch.FloatTensor([2,3])) # float32
- print(torch.DoubleTensor([2,3])) # float64
-
- print('-'*60)
-
- # 4. 创建线性张量
- print(torch.arange(0,10,2)) # 在指定区间按照步长生成元素
- print(torch.linspace(0,10,10)) # 在指定区间按照元素个数生成
-
- print('-'*60)
-
- # 5. 随机种子设置
- print(torch.randn(2,3)) # 每次都是随机的
- seed = torch.random.initial_seed() ## 查看随机数种子
- print(seed)
- torch.random.manual_seed(seed) ## 设置随机数种子
- print(torch.random.manual_seed(seed))
-
- print('-'*60)
-
- # 6. 创建0-1张量
- # 全0
- data = torch.randn(4,5)
- print(data)
- print(torch.zeros(2,3))
- print(torch.zeros_like(data))
- # 全1
- print(torch.ones(2,3))
- print(torch.ones_like(data))
- # 指定值
- print(torch.full([2,3],100))
- print(torch.full_like(data,10))
-
- print('-'*60)
-
- # 7. 张量的类型转换
- data = torch.randn(4,5)
- print(data)
- print(data.dtype) # torch.float32
- print(data.type(torch.IntTensor).dtype) # 转为torch.int32
-
- print('-'*60)
- import torch
-
- torch.random.manual_seed(100) # 设置随机数
- data = torch.randn(2,3)
-
- # 1. 张量转换为NumPy数组
- print(type(data)) # 查看类型 torch.Tensor
- data_numpy = data.numpy().copy() # 转换为numpy类型
- print(type(data_numpy)) # 查看转换后的类型 'numpy.ndarray
- # 更改数值
- print(data)
- data[0][1] = 100 # 它更改 共享内存 两个都更改
- print(data)
- print(data_numpy) # 若copy()不共享内存 numpy不更改
-
- print('-'*60)
-
- # 2. NumPy数组转换为张量
- # from_numpy()
- torch.random.manual_seed(200) # 设置随机数
- data1 = torch.randn(2,3) # Tensor类型
- data_numpy = data1.numpy().copy() # 转换为numpy类型
- # 将ndarray数组转换为Tensor,共享内存
- # copy() 不共享内存
- data_tensor = torch.from_numpy(data_numpy.copy())
- data_tensor[0][1] = 500
- print(data_tensor)
- print(data_numpy)
-
- print('-'*60)
-
- # 用torch.tensor()
- torch.random.manual_seed(300) # 设置随机数
- data2 = torch.randn(2,3) # Tensor类型
- data_numpy = data2.numpy().copy() # 转换为numpy类型
- # 将ndarray数组转换为Tensor,不共享内存
- # torch.tensor 不用copy()
- data_tensor = torch.tensor(data_numpy)
- data_tensor[0][1] = 600
- print(data_tensor)
- print(data_numpy)
-
- print('-'*60)
-
- # 3. 标量张量和数字转换
- # 当张量只包含一个元素时, 可以通过 item() 函数提取出该值
- data = torch.tensor([30,])
- print(data.item())
- data = torch.tensor((30))
- print(data.item())
- import torch
-
- # 1. 基本运算
- torch.random.manual_seed(10)
- data = torch.randint(0,10,[2,3])
- print(data)
- # 不修改原数据
- new_data = data.add(10) # 加法
- print(new_data)
- # 直接修改原数据
- data.add_(10) # 带下划线
- print(data)
- # 其他函数
- print(data.sub(100))
- print(data.mul(100))
- print(data.div(100))
- print(data.neg())
-
- # 2. 点乘运算
- data1 = torch.tensor([[1,2],[3,4]])
- data2 = torch.tensor([[5,6],[7,8]])
- # 第一种
- data = torch.mul(data1,data2)
- print(data)
- # 第二种
- data = data1*data2
- print(data)
-
- # 3. 矩阵相乘
- data1 = torch.tensor([[1, 2], [3, 4], [5, 6]])
- data2 = torch.tensor([[5, 6], [7, 8]])
- # 第一种
- data = torch.matmul(data1,data2)
- print(data)
- # 第二种
- data = data1@data2
- print(data)
- import torch
-
- torch.random.manual_seed(10)
- data=torch.randint(0,10,[2,3],dtype=torch.float64)
- print(data)
-
- print('-'*60)
-
- # 1. 求和
- print(data.sum())
- print(data.sum(dim=0)) # 按列求和
- print(data.sum(dim=1)) # 按行求和
-
- print('-'*60)
-
- # 2. 求均值
- print(data.mean())
- print(data.mean(dim=0)) # 按列均值
- print(data.mean(dim=1)) # 按行均值
-
- print('-'*60)
-
- # 3. 求指数
- print(data.exp()) # 右上角 exp固定的数
-
- print('-'*60)
-
- # 4. 求平方
- print(torch.pow(data,2)) # 2次方
-
- print('-'*60)
-
- # 5. 平方根
- print(torch.pow(data,0.5))
- print(data.sqrt())
-
- # 对数
- print(data.log()) # 以log为底
- print(data.log2()) # 以2为底
- print(data.log10()) # 以10为底
- import torch
-
- torch.random.manual_seed(10)
- data = torch.randint(0,10,[4,5])
- print(data)
-
- print('-'*60)
-
- # 1. 简单行 简单列
- print(data[0])
- print(data[:,0])
-
- print('-'*60)
-
- # 2. 列表索引
- # 返回 (0, 1)、(1, 2) 两个位置的元素
- print(data[[0,1],[1,2]])
- # 返回 0、1 行的 1、2 列共4个元素
- print(data[[[0],[1]],[1,2]])
-
- # 3. 范围索引
- # 前3行的前2列数据
- print(data[:3,:2])
- # 第2行到最后的前2列数据
- print(data[2:,:2])
-
- # 4. 布尔索引
- # 第三列大于5的行数据
- print(data[data[:,2]>5])
- # 第二行大于5的列数据
- print(data[:,data[1]>5])
-
- # 5. 多维索引
- torch.random.manual_seed(10)
- data = torch.randint(0,10,[3,4,5])
- print(data)
- # 获取0轴上的第一个数据
- print(data[0,:,:])
- # 获取1轴上的第一个数据
- print(data[:,0,:])
- # 获取2轴上的第一个数据
- print(data[:,:,0])
- import torch
-
- torch.random.manual_seed(10)
- data = torch.randint(0,10,[3,4])
- print(data.size()) # 查看维度
-
- print('-'*60)
-
- # 1. reshape()
- # 转换维度
- print(data.reshape(2,6).size()) # 改变维度
- print(data.reshape(2,2,3).size()) # 个数相同 可改变维度
- print(data.reshape(2,2,-1).size()) # -1自动转换为个数相同的维度
-
- print('-'*60)
-
- # 2. squeeze()删除 unsqueeze()增加
- print(data.unsqueeze(dim=0).shape)
- print(data.unsqueeze(dim=-1).unsqueeze(dim=1).shape)
- print(data.unsqueeze(dim=-1).squeeze(dim=-1).shape)
-
- print('-'*60)
-
- # 3. transpose()交换一次位置 permute()交换多个
- # 创造张量
- torch.random.manual_seed(10)
- data = torch.randint(0,10,[2,3,4,5])
- print(data.size()) # 查看维度
- # transpose()
- print(torch.transpose(data,1,2).shape)
- # permute()
- print(torch.permute(data,[3,2,1,0]).shape)
- print(data.permute([3,2,1,0]).shape)
-
- print('-'*60)
-
- # 3. view()连续 不连续先转换 contiguous()
- # 创造张量
- torch.random.manual_seed(10)
- data = torch.randint(0,10,[3,4,5,6])
- print(data.size())
- # view() 连续情况下
- print(data.view(2,4,-1).shape)
-
- # 不连续情况下: 先 contiguous() 再 view()
- data1 = torch.transpose(data,1,2)
- ## 可以先判断是否连续
- print(data1.is_contiguous()) # 判断
- print(data1.contiguous().view(2,4,-1).shape) # 转换
- import torch
-
- torch.random.manual_seed(10)
- data1 = torch.randint(0,10,[3,4,5,6])
- print(data1.shape)
- torch.random.manual_seed(10)
- data2 = torch.randint(0,10,[3,4,3,6])
- print(data2.shape)
- # 拼接 cat() 除拼接数以外 其他维度的数都要相同
- print(torch.cat([data1,data2],dim=2).shape)
- import torch
-
- ## 标量
- # 设置x,y
- x = torch.tensor(5)
- y = torch.tensor(0.)
-
- # requires_grad 是否计算权重
- w = torch.tensor(1.,requires_grad=True)
- b = torch.tensor(3.,requires_grad=True)
-
- # 输出值
- z = x*w + b
-
- # 设置损失函数 计算损失
- loss = torch.nn.MSELoss()
- loss = loss(z,y)
- # 自动微分
- loss.backward()
- # w.b 的梯度
- print(w.grad)
- print(b.grad)
-
- print("-"*35)
-
-
- ## 数组
- x = torch.ones(2,5)
- y= torch.zeros(2,3)
-
- w = torch.randn(5,3,requires_grad=True)
- b = torch.randn(3,requires_grad=True)
-
- z = torch.matmul(x,w) +b
-
- loss = torch.nn.MSELoss()
- loss = loss(z,y)
- loss.backward()
- print(w.grad)
- print(b.grad)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。