关于DeepJSCC的思考
复现DeepJSCC后,有一些想法
这是关于图像语义传输的文章,发送和接收端都采用端到端联合设计的思路
当数据集为32×32×3的CIFAR10时:
encoder:16×16×16——>32×8×8——>32×8×8——>32×8×8——>16×8×8 最后一个16控制压缩率,目前1/6
decoder:32×8×8——>32×8×8——>32×8×8——>16×16×16——>3×32×32
当数据集为224×224×3的ImageNet时:
encoder:16×112×112——>32×56×56——>32×56×56——>32×56×56——>16×16×16 最后一个16控制压缩率,目前1/6
decoder:32×56×56——>32×56×56——>32×56×56——>16×112×112——>3×224×224
总结:从不同尺寸的输入图像可以看出,对于特征图的尺寸,最好严格按照×2或者÷2的规模变化,而对于特征维度 ...
JSCC中为什么无法使用复数信道
背景 JSCC(Joint Source Channel Coding)联合信源信道编解码主要使用DNN实现E2E的通信系统,为了适应信道,就需要将信道嵌入到网络中训练。如果使用信道冲激响应复数表示信道,那么势必要在网络中涉及复数运算。
而我们知道目前的深度学习框架都不支持复数微分,这很难解决,因此在JSCC等涉及到将信道嵌入到网络中的情况时,都无法使用复数信道。
解决? 在Pytorch中,之前尝试过解决这个问题,使用with torch.no_grad()或者.detach()将复数运算脱离网络,然后再将计算结果通过requires_grad添加到计算图中,但实际效果非常差,这或许完全不能解决问题,因此想摸清原因。
原因 要想知道原因,这就需要知道with torch.no_grad()和.detach()的工作机制,分别进行介绍。
requires_grad熟悉
官网说:If autograd should record operations on the returned tensor. Default: False.
是否追踪在张量上计算的所有操作,默认值为F ...
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 ...