深度学习相关工具使用笔记,包括Anaconda, Pycharm, Jupyter notebook, Google Colab,以及Pytorch,项目地址:DLpractice
Anaconda
Windows环境配置
安装miniconda, 镜像源 (或Anaconda,更大更全但没必要)
防止环境装在C盘占空间:修改user目录下.condarc文件里的默认地址,或执行conda config --add D:\Anaconda3\envs
,然后conda info
检查envs directories
(若报错 The channel is not accessible or is invalid 运行conda config --remove-key channels
)Linux 环境配置
安装miniconda,相较Anaconda更小巧快捷,功能一样1
2
3
4
5
6
7wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
#一路Enter + Yes,最后使修改的PATH环境变量生效:
source ~/.bashrc
conda #验证是否成功
conda create -n pytorch python=3.6 #创建一个名为pytorch的环境
conda activate pytorch #激活环境(若要安装:Anaconda,执行下载的.sh文件,输入
bash XXX.sh
,然后一路enter和yes;激活:cd ///root/anaconda3/bin
,输入:source ./activate
,终端前出现(base)
则激活成功)
1 | conda create -n pytorch python=3.8 -y #Anaconda创建环境 |
国内镜像源:
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple
豆瓣:http://pypi.douban.com/simple
vscode导入conda:当在VScode中打开某py文件时,左下角会出现Python, 点击可切换conda环境
Pycharm
创建新项目,手动导入已存在的anaconda创建的环境D:\Anaconda3\envs\pytorch\python.exe
配置或更改环境: Settings > Project > interpreter > 齿轮 > Add > System Interpreter > 手动添加
Terminal:File > Settings > Tools > Terminal > Shell path
C:\Windows\System32\cmd.exe
Pycharm使用
新建.py文件(用作工程) > 右上角配置py解释器 > 运行/直接右键运行
控制台(用作调试,查参数) > Shift+enter:输入多行 > “↑”重新编辑
Ctrl + D 快速复制至下一行
Ctrl + R 批量修改
Ctrl + / 批量注释
调试:打断点 > debug > 使用工具栏内的“下一步”或“计算器内输入表达式”进行调试
调试时使用Console的python调试台,print指令
1 | #Debug: |
Jupyter notebook
激活pytorch环境后: conda install nb_conda
打开 jupyter notebook: New > 选择环境:Python [conda env:pytorch]
IDLE Ctrl+N 编辑多行代码
输入一半按tab可以补全
打包与解压缩
打包:
1
2
3
4
5import zipfile
zip_ref = zipfile.ZipFile('WYJ.zip', 'r')
zip_ref.extractall('.')
zip_ref.close()解压:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16import zipfile
import os
def zip_folder(folder_path, zip_path):
with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
zipf.write(file_path, os.path.relpath(file_path, folder_path))
folder_path = './output' # 指定要下载的文件夹路径
zip_path = './output.zip' # 指定要保存的zip文件路径
zip_folder(folder_path, zip_path)
from IPython.display import FileLink
FileLink(zip_path) # 生成下载链接
Google Colab
1 | #设置并查看GPU 修改>笔记本设置>GPU |
基本指令
1 | !unzip /content/XX.zip -d /content/XX #解压 |
云盘
1 | #先装载谷歌云盘,在云盘里运行以防数据丢失,指定Google Drive云端硬盘的根目录,名为drive |
续航插件:Colab Alive, 防止训练时掉线
Pytorch
要调用GPU进行训练的话,需要安装显卡驱动对应的CUDA
nvidia-smi
查询支持CUDA版本, 显卡驱动程序显示的cuda版本为电脑最高可适配的cuda版本
- 到 Pytorch官网 复制对应code进行安装
安装
windows
安装显卡驱动对应的CUDA:nvidia-smi
查询支持CUDA版本,
再到Pytorch官网复制对应code进行安装, 如:conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
(验证torch能否使用GPU:python -c "import torch;print(torch.cuda.is_available())"
返回True说明GPU可以被使用)
Linux
pytorch
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
或pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
tensorflow
cuda:conda install cudatoolkit=10.0
cuDNN:conda install cudnn=7.6
tf:pip install tensorflow-gpu==1.15.0
(注意版本匹配)
查GPU
1 | python -c "import torch;print(torch.cuda.is_available())" #返回True说明GPU可以被使用 |
库
两大查询函数:
dir() 函数,能让我们知道工具箱以及工具箱中的分隔区有什么东西。
help() 函数,能让我们知道每个工具是如何使用的,工具的使用方法。Jupyter>XX??
Pycharm>ctrl+左键(查原函数) ctrl+p(查询输入参数,有等号的可忽略)
多查 pytorch官方文档
- 文件
1
2
3../XXX #上一层
root=“D:\\desktop” #window下绝对路径使用双斜杠\\避免转义:
root=r“D:\\desktop” #或统一加上r取消转义 - 计时
1
2import time
start=time.time() end=time.time() print(start-end) - 组
1
2
3
4
5
6
7a = (1, 2) # 元组 tuple
b = [1, 2, 3] # 数组 list
c = {'name': 'wyj', 'age': '23'} # 字典 dict
print(a[0])
print(b[1])
print(c['name'])
Tensorboard可视化
pytorch下安装 pip install tensorboard (conda install tensorboard)
- 使用
1
2
3
4from torch.utils.tensorboard import SummaryWriter
writer=SummaryWriter(“logs“)
writer.add_image("name“,parameter,组内步数)
writer.close() #关闭读写 - 打开地址 localhost:6006
1
2tensorboard --logdir=logs(文件夹路径) --port=6006(6007) #注意路径
tensorboard --logdir runs/train (YOLO)vscode中有tensorboard插件,能够直接在vscode中看到tensorboard的结果,通过快捷键 Ctrl+Shift+P,调出命令窗口,里面输入1
2
3
4
5
6
7#debug
AttributeError: type object 'h5py.h5.H5PYConfig' has no attribute '__reduce_cython__'
pip uninstall h5py
AttributeError: module 'distutils' has no attribute 'version'
pip install setuptools==59.5.0
pip install brotlipython:launch tensorboard
,选择对应的文件夹即可
Transform
transforms.py图像处理工具箱
- 调用工具tool=transforms.XXX()
- 使用 result=tool(input)
如: Totensor>转向量; Normalize>归一化; Resize>缩放; Compose>组合; RandomCrop>随机裁剪
ToTensor
1 | #(桥梁,很多输入都要求tensor类型) |
1 | class Person: |
torchvision
torchvision.datasets 数据集处理
1 | import torchvision |
Dataloader
1 | from torch.utils.data import DataLoader |
例
1 | writer = SummaryWriter("dataloader") |
TORCH.NN
Module 所有神经网络模块的基类
1 | import torch.nn as nn |
maxpool 下采样self.maxpool1 = MaxPool2d(kernel_size=3, ceil_mode=False) #ceil_mode=True为向上取整
Non-linear Activationsm = nn.ReLU() # inplace=True为直接替换input
批标准化m = nn.BatchNorm2d(100)
线性层
1 | dataset = torchvision.datasets.CIFAR10("../data", train=False, |
CIFAR 10 model结构
1 | import torch |
损失函数
1 | x = torch.tensor([0.1, 0.2, 0.3]) |
反向传播result_loss.backward()
优化器(梯度下降)
1 | for input, target in dataset: |
网络模型
添加
vgg16_true.classifier.add_module('add_linear', nn.Linear(1000, 10)) #在vgg16网络中的classifier 模块中加入一个linear层
修改
vgg16_false.classifier[6] = nn.Linear(4096, 10) #修改vgg16网络中的classifier 第6层
保存
1
2
3
4
5
6
7vgg16 = torchvision.models.vgg16(pretrained=False)
# 保存方式1,模型结构+模型参数
torch.save(vgg16, "vgg16_method1.pth")
# 保存方式2,模型参数(官方推荐)
torch.save(vgg16.state_dict(), "vgg16_method2.pth")加载
1
2
3
4
5
6
7
8
9# 方式1
model = torch.load("vgg16_method1.pth")
#若为自定义网络模型,加载时需要引入定义:
from model_save import *
#一定要在同一个文件夹下
# 方式2,加载模型
vgg16 = torchvision.models.vgg16(pretrained=False)
vgg16.load_state_dict(torch.load("vgg16_method2.pth")) #读取字典中的参数
CPU训练
1 | import … |
GPU训练
改cuda:网络、损失函数、data
① .cuda()
1 | if torch.cuda.is_available(): |
② .to(device)
1 | device = torch.device("cuda") #只需修改此处在CPU,GPU之间切换 “cpu” |
测试
1 | model = torch.load("tudui_29_gpu.pth", map_location=torch.device('cpu')) |