pytorch
发布时间 :
字数:1.2k
阅读 :
Pytorch
1.Pytorch安装
安装地址介绍:https://pytorch.org/get-started/locally/
带GPU安装步骤:
conda install pytorch torchvision cudatoolkit=9.0 -c pytorch
不带GPU安装步骤
1 2
| conda install pytorch-cpu -c pytorch pip3 install torchvision
|
安装之后打开ipython
输入:
注意:安装模块的时候安装的是pytorch
,但是在代码中都是使用torch
2.Pytorch基本数据结构张量(Tensor)
创建
1 2 3 4 5 6 7
| torch.tensor([]) # 根据提供的数据结构创建张量 torch.empty(3,4) # 创建3行4列的空tensor,会用无用数据进行填充 torch.ones([3,4]) # 创建3行4列全为一的tensor torch.zeros([3,4]) # 创建3行4列全为0的tensor torch.rand([3,4]) # 创建3行4列的随机tensor,随机区间是[0,1) torch.randint(low=3,high=10,size=[3,4]) # 创建一个[low,high)之间3行4列的tensor torch.randn([3,4]) # 创建一个均值为0,方差为1的3行4列的tensor
|
3.Tensor常用的属性和方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| tensor.dtype # 获取tensor的数据类型 tensor.item() # 如果tensor中数据只有一个值时可以使用该方法获取 tensor.numpy() # 把tensor转换成numpy数组 tensor.size() # 获取tensor的形状,值由外到里排序 tensor.size(num) # 获取tensor第num阶的大小 tensor.view([num1,num2]) # 把tensor转变成num1行,num2列的tensor tensor.transpose(num1,num2) # 把第num1阶和num2阶进行转置或tensor.t(num1,num2) tensor.t(num1,num2) # 同上 # 从tensor取出来的值还是类型还是tensor tensor[num1,num2:num3] # 切片和索引,第一个逗号签的表示对第一阶进行切片或索引,下面以此类推 tensor.dim() # 获取tensor的阶数 tensor.max(dim=-1) # 获取行方向最大值,并给出行方向的坐标;不输入dim值获取全局最大值 tensor1.add(tensor2) # 对tensor1和tensor2进行相加生成一个新的tensor #也可以写成tensor1+tensor2 tensor1.add_(tensor2) # 对tensor1和tensor2进行相加生成新的tensor,并付给tensor1;注意上面有许多方法都可以在方法名后面加_使其是对数据原地修改
|
4.Tensor的数据类型
1 2 3 4 5 6 7 8 9
| Data Type | dtype | Tensor types 64-bit floating | torch.float64 or torch.double | torch.DoubleTensor 32-bit floating | torch.float32 or torch.float | torch.FloatTensor 16-bit floating | torch.float16 or torch.half | torch.HalfTensor 8-bit integer(unsighed)| torch.uint8 | torch.ByteTensor 8-bit integer(signed)| torch.int8 | torch.CharTensor 16-bit integer(signed)|torch.int16 or touch.short | torch.ShortTensor 32-bit integer(signed)|torch.int32 or touch.int | torch.IntTensor 64-bit integer(signed)|torch.int64 or touch.long | torch.LongTensor
|
5.指定GPU计算
1 2 3 4 5 6 7 8 9
| torch.cuda.is_available() # 判断是否支持GPU运算 device = torch.device("cuda:0") # 指定第一块gpu运算 gpu_tensor = torch.tensor([],device=device) # 创建适合在gpu上运行的tensor tensor = torch.tensor([]) # 指定device,默认创建cpu的tensor gpu_tensor = tensor.to(device) # 把cpu tensor转换成gpu的 tensor = gpu_tensor.cpu() # 把gpu tensor转换成cpu的 tensor.device # 查看该数据是适合在cpu上运行还是gpu上 # 全兼容代码 device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
|
6.反向计算
1 2 3 4 5 6 7 8 9 10
| # requires_grad和grad_fn 用于反向计算 tensor.requires_grad # 是否记录计算过程的一个属性,默认为False tensor.requires_grad_(True) # 就地修改tensor的requires_grad的属性 tensor.grad_fn # 查看该tensor是怎么计算来的 torch.no_gard() # 该函数以下的tensor不记录计算过程,一般搭配with上下文管理器使用,一般在评估的时候使用 # x特征矩阵和w权重矩阵经过一系列计算出输出out(损失)(都是requires_grad为True的tensor) out.backward() # 进行反向计算;out必须为一个数 w.gard # 获取权重的倒数 tensor.data # 获取tensor中的值 tensor.detach() # 获取tensor中的值,与data的区别在于detach()可被微分
|
7.损失函数
1 2
| torch.nn.MSELoss() # 均方误差损失 torch.nn.CrossEntorpyLoss() # 交叉熵损失(对数自然损失)
|
8.优化器类
1 2 3
| torch.optim.BGD(需要优化的参数,学习率) # 梯度下降 torch.optim.SGD(参数,学习率) # 随机梯度下降 torch.optim.Adam(参数,学习率)
|
9.nn.Module
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") # 继承Module class Lr(torch.nn.Module): def __init__(self): super(Lr, self).__init__() # 下面就是自定义参数(Linear实际上也是实例化参数,并定义了forward方法) self.lr1 = torch.nn.Linear(10, 2) self.lr2 = torch.nn.Linear(2, 1)
def forward(self, x): # 进行一次向前计算(如果是实现神经网络可以再out1和out2后面套一个函数即可) out1 = self.lr1(x) out2 = self.lr2(out1) return out2
def main(x,y,num): # 实例化模型 module = Lr().to(device) # 定义优化器并指定优化器要优化哪些参数 optimizer = torch.optim.SGD(module.parameters(), lr=0.01) # 定义损失函数 criterion = torch.nn.MSELoss() # 开始循环训练 for i in range(num): # 计算预测值 y_predict = module(x) # 计算损失 loss = criterion(y, y_predict) # 梯度置为零 optimizer.zero_grad() # 计算梯度 loss.backward() # 更新参数 optimizer.step() print([i for i in module.parameters()])
if __name__ == '__main__': x = torch.randn([50, 10]).to(device) y = x * 3 + 8 main(x,y,10000)
|
10.Dataset数据基类
11.torch常用方法
1 2
| torch.nn.Embedding(num_embedding, embedding_dim) # num_embedding:词典长度;embedding_dim:每个词向量化之后的维度
|
未完待续。。。。。。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 zoubinbf@163.com