2022.2.12 StudyLog

本文介绍了神经网络中的关键术语,如Step、BatchSize、Iteration和Epoch,并探讨了如何提高GPU和CPU混合训练效率。同时,讲解了在Python中如何调用不同py文件中的类和函数,以及pyc和pyo文件的作用。此外,提到了阅读Python基础书籍和参考论文的重要性。
摘要由CSDN通过智能技术生成

查看显卡属性

  • win+r:dxdiag 找到显卡名称,搜索

我的显卡:NVIDIA GeForce2 GTX 1050 Ti 显存容量4096 MB RAM

  • nvidia-smi 也可以查看显卡内存

集成显卡:集成到电脑主板上、本身不带有显存,通常是系统自动分配电脑内存作为显存来使用



神经网络 专业术语解释(Step, Batch Size, Iteration,Epoch)

SOTA model:state-of-the-art model,并不是特指某个具体的模型,而是指在该项研究任务中,目前最好/最先进的模型。

SOTA result:state-of-the-art result,指的是在该项研究任务中,目前最好的模型的结果/性能/表现。

  1. 名词解释
  • Step: 训练模型的步数

  • Batch Size(批尺寸): 计算梯度所需的样本数量,太小会导致效率低下,无法收敛。太大会导致内存撑不住,Batch Size增大到一定程度后,其下降方向变化很小了,所以Batch Size是一个很重要的参数。

  • Epoch(回合):代表样本集内所有的数据经过了一次训练。

  • Iteration(迭代):理解迭代,只需要知道乘法表或者一个计算器就可以了。迭代是 batch 需要完成一个 epoch 的次数。记住:在一个 epoch 中,batch 数和迭代数是相等的。

比如对于一个有 2000 个训练样本的数据集。将 2000 个样本分成大小为 500 的 batch,那么完成一个 epoch 需要 4 个 iteration。

下面的内容转自https://blog.csdn.net/lhhopencv/article/details/78912256

  1. 换算关系

N u m b e r   o f   B a t c h e s = T r a i n i n g   S e t   S i z e B a t c h   S i z e Number\ of\ Batches=\frac{Training\:Set\:Size}{Batch\ Size} Number of Batches=Batch SizeTrainingSetSize

实际上,梯度下降的几种方式的根本区别就在于上面公式中的 Batch Size不同。

*注:上表中 Mini-Batch 的 Batch 个数为 N / B + 1 是针对未整除的情况。整除则是 N / B。

  1. 例子

CIFAR10 数据集有 50000 张训练图片,10000 张测试图片。现在选择 Batch Size = 256 对模型进行训练。

  • 每个 Epoch 要训练的图片数量:50000
  • 训练集具有的 Batch 个数:50000/256=195+1=196
  • 每个 Epoch 需要完成的 Batch 个数:196
  • 每个 Epoch 具有的 Iteration 个数: 196
  • 每个 Epoch 中发生模型权重更新的次数:196
  • 训练 10 代后,模型权重更新的次数:1960
  • 不同代的训练,其实用的是同一个训练集的数据。第 1代和第10 代虽然用的都是训练集的五万张图片,但是对模型的权重更新值却是完全不同的。因为不同代的模型处于代价函数空间上的不同位置,模型的训练代越靠后,越接近谷底,其代价越小。

提高 GPU 和 CPU 混合训练效率的方法

参阅:

  • https://zhuanlan.zhihu.com/p/77307505[GPU加速02:超详细Python Cuda零基础入门教程,没有显卡也能学!]

    • https://lulaoshi.info/gpu/gpu-basic/gpu

    • https://lulaoshi.info/gpu/python-cuda/cuda-intro

    • 检验 CUDA 安装成功 nvcc -V

      检验cuDNN:进入到cuda的安装路径,C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\demo_suite 找到deviceQuery.exebandwidthTest.exe 成功运行不闪退

  • https://zhuanlan.zhihu.com/p/257895005[模型训练太慢?显存不够?这个方法让你的GPU联手CPU]

    • 🔺可行性很高。现在还不会实操
  • https://blog.csdn.net/qq_27825451/article/details/106002237【tensorflow与pytorch的GPU分配与使用策略详解】

    • 没学会

小结:半懂不懂,没学会


py文件调用其他py文件中的类和函数

  • 同一文件夹

    • 调用函数

      from 【py文件名】 import 【fun1】
      fun1()
      
      import 【py文件名】
      【py文件名】.fun1()
      
    • 调用类

      from 【py文件名】 import 【类1】
      a =1()
      a.fun()
      
      import 【py文件名】
      a=【py文件名】.1()
      a.fun()
      
  • 不同文件夹下

    • 不设 __init___.py

      import sys
      sys.path.append(r'【py文件名】所在路径')
      '''python import模块时, 是在sys.path里按顺序查找的。
      sys.path是一个列表,里面以字符串的形式存储了许多路径。
      使用A.py文件中的函数需要先将他的文件路径放到sys.path中'''
      
      import 【py文件名】
      a=【py文件名】.【py文件下的函数或类】(2,3)
      a.fun()
      
    • __init___.py

      # 一般为空文件,也可以写以下,便于 import *
      
      __all__ = ['类A','类B']
      

关于pyc与pyo文件

  • pyc就是py编译时生成的字节码文件,以后每次导入都会执行pyc,当py文件更新时pyc也会更新

  • 如果解释器添加-o命令,py编译时会生成pyo文件,它相比pyc去掉了断言(assert)、断行号以及其他调试信息,运行速度更快

  • 如果使用-OO选项,生成的pyo文件会忽略文档信息

解释器工作:

  1. 根据导入的文件名创建命名空间(用来访问文件内部属性与方法)

  2. 在命名空间内执行源代码

  3. 创建一个源代码文件的对象,这个对象引用对应的命名空间,管理模块的内部函数与变量

  4. 一个模块可以多次导入,但是后面导入的模块只执行第三步

sys.modules可以打印出导入的模块名与模块对象的映射

因此可以理解导入文件的三种方式:

import a.b

把a.b导入全局命名空间,想要调用c方法需要a.b.c

from a import b

把b导入全局命名空间,b.c

from a.b import c

把b的属性c直接导入命名空间


阅读 python 基础书

[Python3基础学习笔记(精品).pdf - 快捷方式.lnk](…\Python3基础学习笔记(精品).pdf - 快捷方式.lnk)

可能有用的论文参考代码

  • https://github.com/facebookresearch/detectron2
    • 环境 linux+pytorch,也是mask-rcnn
      • 感觉会死,之后再说
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值