pytorch 中设置使用指定的 GPU
PyTorch 是一个非常优秀的深度学习框架,特别是在 GPU 上运行 PyTorch 代码能够加速深度网络的训练,但是,当服务器的 GPU 型号不匹配、性能差别较大、个人指定使用某个 GPU 时,需要进行特别的设置。本篇以 Ubuntu 18.04 为例,介绍如何在运行 PyTorch 代码时指定 GPU 训练模型。
代码中设置当安装(深度学习的 GPU 环境的配置)了 GPU、cuda、cudnn 后,可以使用如下命令查看 GPU 信息:
123$ nvidia-smi或$ nvidia-smi -L
结果大概如下:
123GPU 0: Tesla V100-PCIE-32GB (UUID: GPU-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx)GPU 1: GeForce GTX TITAN X (UUID: GPU-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx)GPU 2: GeForce GTX TITAN X (UUID: GPU-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx) ...
使用 python 的 opencv 包读取图像
Python 中有很多包能够处理图像,如 matplotlib, PIL, imageio, OpenCV 等。其中,OpenCV 提供了强大的图像处理模块,但是,OpenCV 读取图像的方式与其他包差别较大,比如读取的彩色图像通道顺序是 BGR。同时,OpenCV 读取图像的能力也很强大,不仅能够读取灰度、彩色,还能读取任何可能颜色格式的图像。这也为使用 OpenCV 读取图像变得难以掌握。本篇介绍如何使用 OpenCV 读取图像。
安装 OpenCV假设已经安装了 Miniconda, 那么安装 OpenCV 只需要一条命令:
123pip install opencv-python# 或者pip install opencv-contrib-python
上面两个命令都能安装 OpenCV,其中 opencv-python 为基本包,包含了 OpenCV 中的主要模块,常规使用足够。opencv-contrib-python 中除了包含主要模块外,还包括一些扩展模块,这些扩展模块包含了一些带专利的算法(比如 shift 特征检测模块)以及一些新添加的测试模块(稳定后合并到主 ...
查看 linux 硬盘读写情况的方法
Linux 系统的性能不仅受到 CPU、内存等的影响,也会收到硬盘读写的影响。当硬盘读写频繁时,往往导致系统操作卡顿、延迟等。本篇以 Ubuntu 18.04/Debian 10 为例介绍如何查看 Linux 系统硬盘读写情况。
命令安装查看 Ubuntu 系统的硬盘读写常用命令有 sar, iostat, vmstat 等。安装命令如下:
12sudo apt updatesudo apt install sysstat
CentOS 安装方法如下:
1sudo yum install -y sysstat
sar -dsar 命令能够 Collect, report, or save system activity information,在统计硬盘读写时,可以使用 -d 参数,Report activity for each block device.
格式如下:
1sar -d interval count
interval 表示两次统计之间的间隔,单位为秒
count 表示统计次数
如下命令,没 2 秒统计一次,共统计 3 次
1sar -d 2 3
...
python 中常用的魔法函数
python 中有许多魔法函数(Magic Methods),一般格式为 __func__,常见的有 __init__, __del__, __call__, __str__, __repr__, __len__, __enter__, __exit__, __iter__, __next__, __dict__, __dir__, __all__, __setattr__, __getattr__, __getattribute__, __setitem__, __getitem__, __delitem__, __contains__等,魔法函数能够使类或函数获得特殊的功能。本篇介绍常用的魔法函数,所有代码以 JupyterLab 为平台运行。
__init__ 和 __del__像 C++ 等面向对象的语言中有类的构造函数(初始化类,实例化类对象)和析构函数(清理内存)。在 python 中也有类似的函数,__init__ 类似于构造函数,__del__类似于析构函数。
1234567class Test(object): def __init__(self, nam ...
pytorch 和 numpy 中的 resize, view 和 reshape 的用法
在使用 PyTorch 进行深度学习模型构建时,经常需要改变矩阵的形状,常用的方法有 resize,view, reshape 等。这和 Numpy 中的 resize 和 reshape 之间的区别是什么。本篇以 JupyterLab 为平台演示两者转换矩阵形状的区别。
PyTorch TensorPyTorch 中改变 Tensor 形状的方法有 resize, view, reshape 等,
PyTorch 中 Tensor 的存储方式PyTorch 中张量 Tensor 存储分为头信息区(包括大小size, 步长stride, 维度等)和存储区(Storage)。如下图,Tensor B 是对 Tensor A 进行截取或转置或改变形状后得到的,此时,Tensor B 共享 Tensor A 的存储区(内存开销小),只不过头信息不同而已。类似于浅拷贝。
可以通过如下方法判断两个Tensor是否是共用一个存储区
1import torch
12x = torch.ones(5)x
tensor([1., 1., 1., 1., 1.])
12y = x[2:]y ...
pytorch tensor 和 numpy array 互转
PyTorch 旨在与 NumPy 非常兼容。因此,PyTorch 的 Tensor 与 Numpy 的 array 能够非常方便的进行互相转换。本篇以 Jupyterlab 为平台进行介绍。
numpy to pytorch常规转换12import numpy as npimport torch
12x = np.eye(3)x
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
1torch.from_numpy(x)
tensor([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]], dtype=torch.float64)
转换时改变数据类型12x = np.eye(3)x
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
1torch.from_numpy(x).type(torch.float32)
tensor ...
使用 python 的 opencv 获取视频信息
python 的 opencv 包能够非常方便的处理计算机视频相关的应用问题。利用 opencv 可以容易的获取视频的基本信息。本篇给予介绍。
1234567891011121314import cv2 as cvvideo_path = '/home/jinzhongxu/Dataset/test.mp4'video = cv.VideoCapture(video_path)# 获取视频的总帧数video.get(cv.CAP_PROP_FRAME_COUNT)# 获取视频的帧率video.get(cv.CAP_PROP_FPS)# 获取视频的帧高video.get(cv.CAP_PROP_FRAME_HEIGHT)# 获取视频的帧宽video.get(cv.CAP_PROP_FRAME_WIDTH)
其他可获取的参数列表如下:
123456789101112131415161718192021222324252627282930313233343536373839400 CV_CAP_PROP_POS_MSEC Current position of t ...
python 中 namedtuple 的使用
python 中有一个非常接近数学表达的元组 namedtuple,它继承自 tuple,是具有命名字段的元组子类。本篇介绍它的使用方法。所有代码在 jupyterlab 中演示。
官方示例123456789101112131415161718192021222324252627282930313233343536from collections import namedtuplenamedtuple?Signature:namedtuple( typename, field_names, *, rename=False, defaults=None, module=None,)Docstring:Returns a new subclass of tuple with named fields.>>> Point = namedtuple('Point', ['x', 'y'])>>> Point.__doc__ ...
pytorch 设置梯度求导
pytorch 为数值函数提供了自动求导包 torch.autograd,只需要在 Tensor 定义时增加 requires_grad=True 关键字。但是,有时我们需要在局部需要设置某些计算不进行梯度计算,这可以节省内存开销。本篇所有代码在 jupyterlab 中运行。
常用的局部计算管理器如下的上下文管理器均是类。
管理器
说明
no_grad
Context-manager that disabled gradient calculation.
enable_grad
Context-manager that enables gradient calculation.
set_grad_enabled
Context-manager that sets gradient calculation to on or off.
inference_mode
Context-manager that enables or disables inference mode.
torch.no_grad该上下文管理器用于禁止梯度计算,常采用如下两种方法。
...
pycharm 常用快捷键
pycharm 是一款非常优秀的编写 python 程序的集成开发环境。本篇介绍如何在 pycharm 中使用常用快捷键来提高开发效率。本篇介绍的所有快捷键均是在 Windows 上使用,其他平台(如 Mac )的快捷键方法可参看参考文献部分。
编辑快捷键
快捷键
作用
Ctrl + Alt + L
代码格式化
Ctrl + Alt + O
优化导入
Ctrl + /
行注释/取消行注释
Ctrl + D
复制选定的区域或行
Ctrl + Y
删除选定的行
Ctrl + Numpad+/-
展开/折叠代码块(当前位置的:函数,注释等)
Ctrl + Shift + Numpad+/-
展开/折叠所有代码块
Alt + Enter
更多提示,方便导入模块
Ctrl + 鼠标左键点击
当模块导入后,可进入模块源码
Ctrl + Alt + $\leftarrow$
返回到上一步;可用于从源码返回到模块引用
Ctrl + Alt + $\rightarrow$
跳到下一步,与上面 ...
在命令行运行 python 程序的方法
Python 是一种解释性、交互式、面向对象的编程语言。在 shell 上可以通过 python 命令方便的运行 .py文件。但是,如果不能正确选择参数,将导致程序运行失败或出错。如,因为依赖引用问题。本篇介绍在命令行运行 python 的常用方法。
直接运行直接运行 python 文件,大多数情况下,这种方法可以正常运行,假设 python 文件完整路径为 /pythonprojects/run.py
12cd /pythonprojectspython run.py
当 run.py 中依赖的模块在 python 环境变量中,或者 /pythonprojects 目录下,这种方法运行没有问题。其实,在运行时,python 会把 /pythonprojects 添加到 PYTHONPATH 中第一个。
添加参数运行当开发的程序项目比较大,或者出现类似如下结构时,需要增加参数才能正常运行.
例子来源于:https://github.com/huanglianghua/siamfc-pytorch,假设克隆到 /pythonprojects 下:
12cd /pythonpr ...