23-1月学习笔记整理

  1. python:
    1. 遇到使用open函数打开文件错误,解决:打开bash,使用file指令查看文件的字符编码,然后在open函数中设置encoding为对应的编码即可解决
    2. pytorch 的expand函数只能在单维度上进行扩展,如果需要强制修改size,或许可以选择resize函数
  2. 官网提供了四种CUDA安装方式(下方查到了其中3种的解释):
    1. runfile(local):下载可执行文件到本地,运行安装
    2. deb(local):增加一个本地的仓库,而该仓库的建立通过安装一个deb实现,通过apt install安装该仓库中的包
    3. deb(network):增加一个远程的仓库,通过apt install安装该仓库中的包
  3. fine-tune学习笔记
    1. 对于分类问题,需要增加种类:可保留模型的前若干层结构以及训练后的权重,然后更改模型最后一层的softmax
    2. 不同数据集下使用微调:
      1. 数据量少,但数据相似度非常高:只是修改最后几层或最终的softmax图层的输出类别
      2. 数据量少,数据相似度低,可以冻结预训练模型的初始层(比如k层),并再次训练剩余的(n-k)层。原因:新数据集相似度较低,根据新数据集对较高层进行重新训练具有重要意义。
      3. 数据量大,数据相似度低:最好根据新数据从头开始训练神经网络    
      4. 数据量大,数据相似度高:保留模型的体系结构和模型的初始权重,使用在预先训练的模型中的权重来重新训练该模型
      5. 有一个问题:如何评估数据相似性?感觉应该就是计算“距离”之类的
      6. 预训练模型在最优点附近
  4. pin_memory=true
    1. pin_memory是dataloader()的参数,默认值为False,其作用是是否把把数据存放在锁页内存中。
    2. 主机的内存根据物理内存(内存条)与虚拟内存(硬盘)进行数据交换分为锁页内存和不锁页内存:
      1. 锁页内存:
        1. 如果主机/服务器的内存足够大,建议把pin_memory设为True,
        2. 锁页内存(pin_memory)能够保持与GPU进行高速传输,在训练时加快数据的读取,从而加快训练速度。
        3. 数据存放在物理内存上(内存条)上;
      2. 不锁页内存:当物理内存(内存条)满载时,把部分数据转换到虚拟内存上(硬盘)上。
    3. non_blocking时cuda()的参数,默认值为False,其作用和pin_memory一样,pin_memory是针对物理内存(内存条),而non_blocking是针对GPU上的内存(显存),表示把数据锁页在显存上,在后台进程过程中不释放。一般地,如果pin_momery为True,把non_blocking也设为True,有助于加速数据传输,加快训练过程,如:model = Model().cuda(non_blocking=True)
  5. duck-typing(鸭子类型):
    1. 鸭子类型背后的两种面向对象思想:多态和范型。
    2. 鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。
    3. 对象的类型不再由继承等方式决定,而由实际运行时所表现出的具体行为来决定。这个概念在解释性语言中还是非常容易理解的,因为解释性语言在定义函数的参数时是无法指定具体参数类型的,另一方面,参数的类型是在解释执行时才能确定,不像类Java语言一样,在编译期编译器就可以确定参数类型,从而在多态模式下确定函数的执行版本了。
    4. python中的鸭子类型
      1. 序列的实现:基本序列协议: 实现__len__和__getitem__方法
      2. 切片的实现:基本切片协议: 实现__getitem__方法
      3. Python中,通过对内置特殊函数的实现(前后双_函数),从而获得Python原生的支持,其中对一元中缀表达式的覆盖,对常规加法操作、乘法操作等的覆盖,皆是鸭子类型的表现形式
  6. gpu,tpu,ipu,hpu
    1. gpu:
      1. 图形处理器,一种做图像和图形相关运算工作的微处理器。
      2. GPU使显卡减少了对CPU的依赖,并进行部分原本CPU的工作,尤其是在3D图形处理时GPU所采用的核心技术有硬件T&L(几何转换和光照处理)、立方环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等,而硬件T&L技术可以说是GPU的标志。GPU的生产商主要有NVIDIA和ATI。
      3. GPU的构成相对简单,有数量众多的计算单元和超长的流水线,特别适合处理大量的类型统一的数据。但GPU无法单独工作,必须由CPU进行控制调用才能工作。CPU可单独作用,处理复杂的逻辑运算和不同的数据类型,但当需要大量的处理类型统一的数据时,则可调用GPU进行并行计算。
    2. TPU:
      1. 张量处理单元,是一款为机器学习而定制的芯片,经过了专门深度机器学习方面的训练,它有更高效能(每瓦计算能力)。
      2. 因为它能加速其第二代人工智能系统TensorFlow的运行,而且效率也大大超过GPU――Google的深层神经网络就是由TensorFlow引擎驱动的。TPU是专为机器学习量身定做的,执行每个操作所需的晶体管数量更少,自然效率更高。
      3. TPU与同期的CPU和GPU相比,可以提供15-30倍的性能提升,以及30-80倍的效率(性能/瓦特)提升。
      4. TPU每瓦能为机器学习提供比所有商用GPU和FPGA更高的量级指令,这基本相当于7年后的科技水平。TPU是为机器学习应用特别开发,以使芯片在计算精度降低的情况下更耐用,这意味每一个操作只需要更少的晶体管,用更多精密且大功率的机器学习模型,并快速应用这些模型,因此用户便能得到更正确的结果。
    3. ipu:Intelligence Processing Unit, Deep Mind投资的Graphcore公司出品的AI处理器产品。
    4. hpu:Holographics Processing Unit 全息图像处理器, 微软出品的全息计算芯片与设备
  7. 清除对某一网站的缓存(以edge为例):
    1. 在网页上右键选择“检查”(或者直接F12)
    2. 选择“应用程序”(在顶部选择,如果没有点击“+”就可以看到)
    3. 选择“存储”,将“包括第三方cookie”打√,然后选择“清除网站数据即可”
    4. 如果网页还是无法完成想要的效果,可以选择换一个浏览器。
  8. windows:
    1. 新电脑:可以使用微软账户登陆
    2. 锁屏:win+L,或者开始->账户->locked
  9. linux:
    1. iconv -l :可以查看支持的字符编码
    2. apt删除包:apt remove package
    3. nvidia-smi自动刷新:watch -n 0.1 -d nvidia-smi (如果运行重要进程时,不建议使用watch查看nvidia-smi,watch每个时间周期开启一个进程(PID),查看后关闭进程,会影响cuda操作,如cudaMalloc;建议使用nvidia-smi -l x或者nvidia-smi --loop=xxx代替,这个命令执行期间一直是一个进程PID.)
    4. 压缩文件:zip -r 压缩包的名字 要打包的文件夹
    5. 一次性移动某类后缀的文件:find . -name "*.txt"  -exec mv {} ../txt/  \;
    6. 将双通道音频转为单通道音频:ffmpeg -y -i 1.wav  -ac 1 -ar 16000 1_mon.wav
    7. 添加nvidia-driver ppa源:
      1. sudo add-apt-repository ppa:graphics-drivers/ppa
      2. 更新源:sudo apt update
      3. 查看可以安装的驱动版本:apt search nvidia-driver
      4. 一般选择安装最下面的(最新版)

猜你喜欢

转载自blog.csdn.net/weixin_45647721/article/details/128760811