请选择 进入手机版 | 继续访问电脑版
862 0

[经济学基础] PyTorch常用代码段合集 [推广有奖]

  • 3关注
  • 45粉丝

学科带头人

81%

还不是VIP/贵宾

-

威望
0
论坛币
96985 个
通用积分
257.2768
学术水平
17 点
热心指数
16 点
信用等级
6 点
经验
62644 点
帖子
1132
精华
0
在线时间
2884 小时
注册时间
2020-11-11
最后登录
2022-1-29

秃头女研究生 学生认证  发表于 2022-1-15 11:33:47 |显示全部楼层

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
PyTorch常用代码段合集作者丨Jack Stark@知乎来源丨https://zhuanlan.zhihu.com/p/104019160

本文是PyTorch常用代码段合集,涵盖基本配置、张量处理、模型定义与操作、数据处理、模型训练与测试等5个方面,还给出了多个值得注意的Tips,内容非常全面。

PyTorch最好的资料是官方文档。本文是PyTorch常用代码段,在参考资料[1](张皓:PyTorch Cookbook)的基础上做了一些修补,方便使用时查阅。1. 基本配置导入包和版本查询

import torchimport torch.nn as nnimport torchvisionprint(torch.__version__)print(torch.version.cuda)print(torch.backends.cudnn.version())print(torch.cuda.get_device_name(0))可复现性在硬件设备(CPU、GPU)不同时,完全的可复现性无法保证,即使随机种子相同。但是,在同一个设备上,应该保证可复现性。具体做法是,在程序开始的时候固定torch的随机种子,同时也把numpy的随机种子固定。

np.random.seed(0)torch.manual_seed(0)torch.cuda.manual_seed_all(0)
torch.backends.cudnn.deterministic = Truetorch.backends.cudnn.benchmark = False显卡设置如果只需要一张显卡

# Device configurationdevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')如果需要指定多张显卡,比如0,1号显卡。

import osos.environ['CUDA_VISIBLE_DEVICES'] = '0,1'也可以在命令行运行代码时设置显卡:

CUDA_VISIBLE_DEVICES=0,1 python train.py清除显存

torch.cuda.empty_cache()也可以使用在命令行重置GPU的指令

nvidia-smi --gpu-reset -i [gpu_id]2. 张量(Tensor)处理张量的数据类型PyTorch有9种CPU张量类型和9种GPU张量类型。张量基本信息

tensor = torch.randn(3,4,5)print(tensor.type())  # 数据类型print(tensor.size())  # 张量的shape,是个元组print(tensor.dim())   # 维度的数量命名张量张量命名是一个非常有用的方法,这样可以方便地使用维度的名字来做索引或其他操作,大大提高了可读性、易用性,防止出错。

# 在PyTorch 1.3之前,需要使用注释# Tensor[N, C, H, W]images = torch.randn(32, 3, 56, 56)images.sum(dim=1)images.select(dim=1, index=0)
# PyTorch 1.3之后NCHW = [‘N’, ‘C’, ‘H’, ‘W’]images = torch.randn(32, 3, 56, 56, names=NCHW)images.sum('C')images.select('C', index=0)# 也可以这么设置tensor = torch.rand(3,4,1,2,names=('C', 'N', 'H', 'W'))# 使用align_to可以对维度方便地排序tensor = tensor.align_to('N', 'C', 'H', 'W')数据类型转换

# 设置默认类型,pytorch中的FloatTensor远远快于DoubleTensortorch.set_default_tensor_type(torch.FloatTensor)
# 类型转换tensor = tensor.cuda()tensor = tensor.cpu()tensor = tensor.float()tensor = tensor.long()torch.Tensor与np.ndarray转换除了CharTensor,其他所有CPU上的张量都支持转换为numpy格式然后再转换回来。

ndarray = tensor.cpu().numpy()tensor = torch.from_numpy(ndarray).float()tensor = torch.from_numpy(ndarray.copy()).float() # If ndarray has negative stride.Torch.tensor与PIL.Image转换

# pytorch中的张量默认采用[N, C, H, W]的顺序,并且数据范围在[0,1],需要进行转置和规范化# torch.Tensor -> PIL.Imageimage = PIL.Image.fromarray(torch.clamp(tensor*255, min=0, max=255).byte().permute(1,2,0).cpu().numpy())image = torchvision.transforms.functional.to_pil_image(tensor)  # Equivalently way
# PIL.Image -> torch.Tensorpath = r'./figure.jpg'tensor = torch.from_numpy(np.asarray(PIL.Image.open(path))).permute(2,0,1).float() / 255tensor = torchvision.transforms.functional.to_tensor(PIL.Image.open(path)) # Equivalently waynp.ndarray与PIL.Image的转换

image = PIL.Image.fromarray(ndarray.astype(np.uint8))
ndarray = np.asarray(PIL.Image.open(path))从只包含一个元素的张量中提取值

value = torch.rand(1).item()张量形变

# 在将卷积层输入全连接层的情况下通常需要对张量做形变处理,# 相比torch.view,torch.reshape可以自动处理输入张量不连续的情况。tensor = torch.rand(2,3,4)shape = (6, 4)tensor = torch.reshape(tensor, shape)

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:RCH TRANSFORMS equivalent Functional transform

您需要登录后才可以回帖 登录 | 我要注册

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2022-1-29 15:45