当前位置: 首页 > news >正文

Pytorch Note

cat函数:

cat函数不会增加维度,默认按照dim=0连接张量

stack函数:

stack函数会增加一个维度

nn.Linear的默认输入:

torch中默认输入一定要为tensor,并且默认是tensor.float32,此外device如果没有model.to(device)放到gpu上面默认会在cpu上运行,如果把模型放到了device上面,那么输入的向量也要放到gpu上面

torch的eval模式和train模式:

使用model.eval模式,模型会进入评估模式,在这个时候,会丢弃以下行为:

  1. Dropout:在评估模式下,Dropout 层不会丢弃任何神经元,所有的神经元都会参与计算。

  2. Batch Normalization:在评估模式下,Batch Normalization 层会使用训练过程中累积的均值和方差来进行归一化,而不是使用当前批次的数据。

使用model.train模式,模型会进入训练模式,这时候模型会启用Dropout和Batch Normalization

torch.gather函数:
torch.gather(input, dim, index) → Tensor

 假设input的shape为(a*b*c),index的shape需要为(a*b,x),这时候指定dim=2,就会把dim=2这一维度的向量按照x的下标收集起来1

import torch# 创建一个形状为 (3, 4) 的输入张量
input = torch.tensor([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]])# 创建一个形状为 (3, 2) 的索引张量
index = torch.tensor([[0, 1],[1, 2],[2, 3]])# 沿着第 1 维(列)收集元素
output = torch.gather(input, dim=1, index=index)print(output)"""
tensor([[ 1,  2],[ 6,  7],[11, 12]])
"""
torch.distributions.Categorical函数:

torch.distributions.Categorical(probs=None, logits=None)

probs代表概率,要求加起来为1,logits代表对数概率,不一定要加起来为1,torch会自动计算让他们加起来为1,虽然用np.random.choice也能实现这个效果,但是numpy是不能进行梯度计算的

action_dist = torch.distributions.Categorical(probs)
action = action_dist.sample()
item() 和 detach().cpu().numpy()

在深度学习训练后,需要计算每个epoch得到的模型的训练效果的时候,一般会用到detach() item() cpu() numpy()等函数。

  • item():返回的是tensor中的值,且只能返回单个值(标量),不能返回向量,使用返回loss等,得到的值因为是标量所以肯定是在cpu上,因为cuda上只能放tensor
  • detach(): 阻断反向传播,返回值任然是tensor
  • cpu():将tensor放到cpu上,返回值任然是tensor
  • numpy():将tensor转换为numpy,注意cuda上面的变量类型只能是tensor,不能是其他

在pytorch中反向传播只能对计算出的loss进行,loss肯定是一个具体的值,使用detach是为了把拿出的计算图和主图分离,计算出的loss不再对主干进行修改:

critic_loss = torch.mean(F.mse_loss(self.critic(states), td_target.detach()))
critic_loss.backward()

如上的critic_loss.backward()只会修改critic的参数,并不会修改td_target的参数

nn.Conv2d()函数:
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0)

对由多个输入平面组成的输入信号进行二维卷积,首先假设图像为weight*height大小,in_channels即图像通道数设为n,out_channels即卷积的filter个数设为m,kernel_size即每一个卷积核格式设为k,假设输入图像格式为height*width,则过程为:

weight*height*n的输入矩阵,乘以m个k*k*n的卷积核,输出m个w*w的featureMaps,

假设m为1,k也为1,那么就相当于把输入通道从n,1~n个输入通道加起来转化为输出通道为1的矩阵


http://www.mrgr.cn/news/57810.html

相关文章:

  • 【STM32项目_1_基于 STM32 的智慧门禁系统】
  • ChatGPT丨R语言在生态环境数据统计分析、绘图、模型中的应用
  • arcpy中建立金字塔
  • 计算机xapofx1_5.dll丢失怎么办,分享5种有效的解决方法
  • 若依前后分离版集成积木报表
  • 「C/C++」C++ STL容器库 之 std::list 双向链表容器
  • 雨课堂(长江云)如何自动刷课(无做题)
  • repo将每个仓库回退到第一个commit的状态
  • pandas库
  • 【系统配置】命令行修改统信UOS的grub启动延时
  • 打印堆栈信息
  • python实现数据库的增删改查功能,图形化版本
  • 2019-2020 CSP-J C++普及组 第一题题解汇编
  • nginx 隐藏版本号与WEB服务器信息(yum)
  • 用户身份和访问管理是保障企业数字化转型的安全基石
  • 地平线港交所挂牌上市,开启智能驾驶新征程
  • EFCore pgsql Join 查询
  • 502 错误码通常出现在什么场景?
  • c语言指针详解2
  • Java开发者必备!0元学习Maven环境最新版超详细配置教程
  • 安全见闻(9)——开阔眼界,不做井底之蛙
  • 排序算法在最坏情况下的性能差异:深入分析
  • dcef文件下载--程序节排坑二
  • 【Java】SpringBoot实现MySQL数据库的增删查改
  • 【ROS2】在启动文件launch中,配置节点崩溃后自动重启
  • 编程中的注意事项