python 中 print 函数的本质
python 的打印输出本质上是先将内容存入缓冲区,然后在接收到触发机制后才会将缓冲区的内容输出到控制台。本篇介绍 print 函数,了解它的本质,将有助于掌握 python 中信息流的转换与输出。
sys.stdout.writeprint 函数的底层是调用 sys.stdout.write 函数。关于 sys.stdout.write 函数,官网信息如下:
1234567Docstring:Write to current stream after encoding if necessaryReturns-------len : int number of items from input parameter written to stream.
解释为将内容(必须是字符串)写入到信息流中,其实是写入到缓冲区中。当我们想要将缓冲区里的内容打印输出到控制台时,需要使用函数 sys.stdout.flush,即触发发送机制。
12345Signature: sys.stdout.flush()Docstring:trigger actual zmq sendsend wil ...
搭配 nginx、cloudflare 和 acme.sh 让网站走 https 协议
d7420555dbd47e034be0c72be203a7e36fc0f94408e2bfa8ad9536e5d1c877c6507ebd68f55f5a97fc6f38aa20e8c188b3872a9e29de7ef2435ffe9546d0f8bcb7bd182a393f4c138337a2c98b72d095e35d24a941c360d674cbd4e0d943cedef463b7c6b57e479c0ee919fb4a51a9d3d4391396809787539d22b8a889e5a7ee8815e984a0d7e00376718219e850c183eb0b947eec7d82554b2eae7be93dbcbeeef08012a352bc749ef7bbe2259c9c7c1b6846d0b5dec3804cd53f4ddeb115c7e861f9d749915e728999ce5167f0455e27e1193686806db84a7be012a8b6fcb4e12def49b304edd16320faa8b392303d40769abfaafe96823 ...
python 的 numpy.meshgrid 方法
numpy 中的 meshgrid() 函数能够生成坐标网格点,作为后续操作的输入,如画二元函数等高线图等。但它的理解却有些困难,本篇以 Jupyterlab 为平台演示,帮助理解该函数。
直观理解请看下图,矩阵 (1) 为输入,其中[1, 2, 3] 为 $x$ 轴坐标,[6, 5, 4] 为 $y$ 轴坐标,里面的点 $\cdot$ 为有待求得的网格点。矩阵 (2) 为网格点矩阵,每个元素为该坐标处的 $(x, y)$ 坐标。两个矩阵 ($xv$), ($yv$) 分别为 np.meshgrid() 函数返回的 $x$ 坐标点矩阵和 $y$ 坐标点矩阵。
$$\begin{matrix} 6 & . & . & . \\ 5 & . & . & . \\ 4 & . & . & . \\ & 1 & 2 & 3\end{matrix} \tag{1}$$
$$\left[\begin{matrix} (1, 6) & (2, 6) &a ...
pytorch 中数据加载器的锁页内存 pinned memory
PyTorch 中通过类 torch.utils.data.DataLoader 提供给模型训练数据集。该类中有一个参数 pin_memory 表示是否采用锁页内存。那什么是锁页内存,它有什么用?本篇对其进行介绍,以帮助大家了解其中的原理,设置合适的参数值,加快模型的训练。
什么是锁页内存我们都知道计算机除了 CPU 进行计算外,还离不开内存,因为内存中数据读取、交换比较快,所以,计算机程序运行时,将中间数据存放到内存中将大大提高程序的运行速度。但内存相对比较昂贵,因此,计算机的内存往往容量有限,在 Linux 中,常见有虚拟内存(通过 htop 命令可以查看 Swp 就是虚拟内存),其是在硬盘的每个区域划分出来的模拟内存的一块区域,在内存空间不足时,可以作为临时的内存空间使用,但虚拟内存毕竟是在硬盘上,数据的读取速度明显比内存慢。
在内存中,数据的存储分为两类,一类是锁页,一类不是锁页。锁页内存存放的数据在任何情况下都不会与虚拟内存进行数据交换。而不锁页内存当内存不足时,数据会存放在虚拟内置中。值得一提的是,GPU 的显存全部都是锁页内存。
设置 pin_memory了解了什么 ...
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 ...