torch实现不同维度对应位乘法
在使用pytorch写深度学习网络时,经常需要将不同维度的数据对应位置进行相乘/除,下面简单介绍解决方法
import numpy as npa = np.array( [[1,2],[2,3]])b = np.array( [[5,6],[7,8]])c = np.array( [a,b])d = np.array( [4.2426,13.1909])output = np.transpose(np.multiply(np.transpose(c),1/d))print(output)
可以看到c是一个2*2*2的ndarray,d是1维ndarray,上述实现了将c的0维分别除以d的两个元素
对于高维tensor,可以:
(torch.multiply(x.T, 1/y)).T
实现x除以y
torchvision
一、简介 tochvision主要处理图像数据,包含一些常用的数据集、模型、转换函数等。torchvision独立于PyTorch,需要专门安装。
torchvision主要包含以下四部分:
torchvision.models: 提供深度学习中各种经典的网络结构、预训练好的模型,如:Alex-Net、VGG、ResNet、Inception等。
torchvision.datasets:提供常用的数据集,设计上继承 torch.utils.data.Dataset,主要包括:MNIST、CIFAR10/100、ImageNet、COCO等。
torchvision.transforms:提供常用的数据预处理操作,主要包括对Tensor及PIL Image对象的操作。
torchvision.utils:工具类,如保存张量作为图像到磁盘,给一个小批量创建一个图像网格。
二、安装pip3 install torchvision
torchvision要注意与pytorch版本和Cuda相匹配。 要查询pytorch和torchvision的版本,可以使用下面语 ...
tensorboard使用
本文主要介绍PyTorch框架下的可视化工具Tensorboard的使用
面向第一次接触可视化工具的新手<其实是备忘>
之前用了几天visdom,用起来很方便,但是画的图显得很乱,所以花了一晚上把代码里的visdom都改成了tensorboard。
Tensorboard安装原本是tensorflow的可视化工具,pytorch从1.2.0开始支持tensorboard。之前的版本也可以使用tensorboardX代替。
在使用1.2.0版本以上的PyTorch的情况下,一般来说,直接使用pip安装即可。
pip install tensorboard
这样直接安装之后,有可能打开的tensorboard网页是全白的,如果有这种问题,解决方法是卸载之后安装更低版本的tensorboard。
pip uninstall tensorboardpip install tensorboard==2.0.2
Tensorboard的使用逻辑Tensorboard的工作流程简单来说是
将代码运行过程中的,某些你关心的数据保存在一个文件夹中:
这一步由代码中的writer完成
...
Batch_size的影响
Batch_size的作用 Batch_size决定了下降的方向。
在合理范围内,增大Batch_size的好处:
提高了内存利用率以及大矩阵乘法的并行化效率;
跑完一次epoch(全数据集)所需要的迭代次数减少,对相同的数据量,处理的速度比小的Batch_size要更快;
在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
盲目增大Batch_size,Batch_size过大的坏处:
提高了内存利用率,但是内存容量可能撑不住;
跑完一次epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加,从而对参数的修正也就显得更加缓慢;
Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化(会影响随机性的引入)。
Batch_size的两种极端设置 batch_size为全数据集(Full Batch Learning):
在数据集比较小时使用,好处是:
由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向;
由于不同权重的梯度值差别巨大,因此选择一个全局的 ...
DDR基本原理
DDR一、内存的种类
内存(Memory)又可分为 DRAM(Dynamic Random Access Memory)动态随机存取内存和 SRAM (Static Random Access Memory)静态随机存取内存两种。两种都是挥发性的内存,SRAM 的主要使用 flip-flop 正反器,通常用于快取 (Cache),而 DRAM 则是使用电容器及晶体管组成。
DDR(Double Data Rate)其实指的是 DDR SDRAM(Double Data Rate SDRAM),SDRAM 及 DDR 主要差异有三点整理如下:
SDRAM只能在时钟信号上升沿传输数据,表示一个频率周期只能做一次数据传输,但是DDR开始能够在上升沿和下降沿皆能传输数据,所以DDR一个周期可以进行两次数据传输。
DDR多了DQS(Data Strobe)有助于传输速率的提升,DQS为一个差分讯号且能双向传输取时DQS由DDR传往处理器,写入时由处理器传往DDR。
DDR使用了预取技术。Prefetch为运作时I/O会预取的数据,也就会是DDR颗粒对外的I/O宽度 ...
Pytorch Dataset和DataLoader
先聊一聊:Dataset和DataLoader是Pytorch提供的两个用于读取数据的类。我们要新建一个Dataset类继承Dataset,重写__init__、__getitem__和__len__三个方法,分别用于构造对象、获取每个数据和获取数据总数,本质就是将数据读取到Dataset中,通过Datadet[0](等价于Dataset.__getitem__(0))可以直接访问数据元素。上述这种访问方式属于列表,这意味着需要在__getitem__中将数据送入列表中,并处理数据,让其变成tensor形式,这样当我们直接用Dataset[idx]时,就会返回一个tensor类型的数据。DataLoader的使用比较简单,我们将新建的Dataset对象作为参数送入,并给定batch等其他参数,就会返回一个DataLoader对象,但与Dataset不同的是,DataLoader无法通过索引直接访问,因为它是Iterable式数据集,只能通过for data in DataLoader的形式访问。
一、Dataset torch.utils.data.Dataset 是一个表示 ...
conda环境打包和安装
环境打包 安装 conda-pack
选择需要共享的环境进行打包
conda pack -n 环境名
打包一般需要等待几分钟。完成后后即可在家目录得到名为 环境名 tar.gz 的环境压缩包。压缩好的环境压缩包一般默认是不公开权限的,使用下述指令将其权限公开 chmod 775 压缩包名
建议大家将希望共享的环境压缩包复制到公共文件夹/home/publicuser/anaconda env share 目录下,并在目录下的environment _list 文件中附上相关文字说明,也可告知管理员 做记录
环境迁移与安装 复制环境压缩包至自己的家目录
cp /home/publicuser/anaconda-env-share/tensorflow.tar.gz ~
在 Anaconda 环境目录下创建一文件夹
Anaconda中的环境目录一般为 Anaconda 安装目录 /envs/,该目录名即为后续的环境名 mkdir 目录名
将环境压缩包解压至创建的文件夹中, tar -xzvf 压缩包路 ...
SLURM
最近要用到集群,了解到SLURM集群资源和作业管理软件,简单介绍,详细可参考下方链接
简介用途 Slurm(Simple Linux Utility for Resource Management, http://slurm.schedmd.com/ )是开源的、具有容错性和高度可扩展的Linux集群超级计算系统资源管理和作业调度系统。超级计算系统可利用Slurm对资源和作业进行管理,以避免相互干扰,提高运行效率。所有需运行的作业,无论是用于程序调试还是业务计算,都可以通过交互式并行 srun 、批处理式 sbatch 或分配式 salloc 等命令提交,提交后可以利用相关命令查询作业状态等。
架构 Slurm采用slurmctld服务(守护进程)作为中心管理器用于监测资源和作业,为了提高可用性,还可以配置另一个备份冗余管理器。各计算节点需启动slurmd守护进程,以便被用于作为远程shell使用:等待作业、执行作业、返回状态、再等待更多作业。slurmdbd(Slurm DataBase Daemon)数据库守护进程(非必需,建议采用,也可以记录到纯文本中等),可以将多个sl ...
集群
简介 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器。这些服务器之间可以彼此通信,协同向用户提供应用程序,系统资源和数据,并以单一系统的模式加以管理。当用户请求集群系统时,集群给用户的感觉就是一个单一独立的服务器,而实际上用户请求的是一组集群服务器。
举个例子:
打开谷歌,百度的页面,看起来好简单,也许你觉得用几分钟就可以制作出相似的网页,而实际上,这个页面的背后是由成千上万台服务器集群协同工作的结果。
若要用一句话描述集群,即一堆服务器合作做同一件事,这些机器可能需要统一协调管理,可以分布在一个机房,也可以分布在全国全球各个地区的多个机房。
Linux集群系统包括集群节点和集群管理器两部分。集群节点有时简称为节点、服务器或服务器节点,是提供处理资源的系统,它进行集群的实际工作。一般来讲,它必须进行配置才能成为集群的一部分,也必须运行集群的应用软件。应用软件可以是专用于集群的软件,也可以是设计用于分布式系统的标准软件。Linux集群管理器则是将节点捆绑 ...
Linux中的module
何为Environment Modules 大部分Linux用户管理环境变量的方式都是,export PATH=/path/to/some/bin:/$PATH >> ~/.bashrc,长期以往,当你echo $PATH时就会发现出现了大量的软件路径,在我眼里,降低系统对工具的搜索速度是其次的,主要是不太好看。而Module则是由管理员将不同软件的环境配置写好,然后用户在登陆之后,只需要用module load xxx在环境增加自己所需的工具即可。
Envrionment modules工具用来快速的设置和修改用户编译运行环境。
**Envrionment modules通过加载和卸载modulefile文件可直接改变用户的环境变量,用户不需要修改.bashrc,从而避免误操作。 **
这些编译器和库都是以模块形式存在,我们可以同时加载很多到当前用户的环境变量中,需要什么load什么。
工具安装和配置 由于Modules本来就是给管理员用于配置服务器环境,因此下面的安装操作都是以Root权限进行。
在安装Modules之前,先确保自己的系统上安装tc ...