Intro
本篇主要讲述笔者进行深度学习项目训练时的简单经验,重点为:
在Anaconda中搭建可使用的Tensorflow-GPU环境;
笔者进行简单训练的测试和成功步骤经验(新手向)(目前主要使用U-Net模型,后续可能有更多( ̄︶ ̄)↗ )
环境搭建
前注:
Tensorflow使用独显或集显GPU训练均需CUDA和cuDNN,若使用独显请确保驱动完备;
笔者在conda进行安装,很好用,推荐此环境(需先安装Anaconda,打开Anaconda Prompt即可);
网上教程很多,但其实可以没那么麻烦,跟着下面步骤一步一步来就没毛。
创建虚拟环境并激活(其中env可改成自己希望的环境名)
1 2
| conda create -n env python=3.10 -y conda activate env
|
之后目录前应更变为你激活的环境名,如(env) C:\Users>
安装版本匹配的CUDA和cuDNN
1
| conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1.0
|
过程中若询问是否继续,选择是(y)
若频繁卡顿出错,可选择清华镜像源下载:
1 2 3 4
| conda install cudatoolkit=11.2 cudnn=8.1.0 \ -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main \ -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free \ -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
|
安装版本匹配的numpy
1
| pip install numpy==1.26.4
|
安装版本匹配的Tensorflow
1
| python -m pip install "tensorflow<2.11"
|
验证
1 2 3
| python -c "import tensorflow as tf; print('TF version:', tf.__version__)" python -c "import tensorflow as tf; print('GPU Available:', tf.config.list_physical_devices('GPU'))" python -c "import tensorflow as tf; print('Built with CUDA:', tf.test.is_built_with_cuda())"
|
若输出类似:
TF version: 2.11.0
GPU Available: [PhysicalDevice(name=’/physical_device:GPU:0’, device_type=’GPU’)]
Built with CUDA: True
则为成功。
后注:
- 若已有某些错误(如没删干净/没下完整),不必执着于删除再下载,直接创建新环境即可;
- 尽量选择网络通畅的环境运行,若下载CUDA/cuDNN/TF时耗时过长或频繁出错,很可能是网络问题。实测下载三样东西总耗时不超过10分钟;
- 配置环境时最大的问题其实是版本问题,具体可参考官方文档,指路从源代码构建 | TensorFlow
简易训练(VS Code based)
打开VS Code,创建python文件。
前置以下代码赋能TensorflowGPU训练:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import os, h5py, numpy as np, tensorflow as tf, matplotlib.pyplot as plt
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D, concatenate
from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping
os.environ['TF_XLA_FLAGS'] = '--tf_xla_enable_xla_devices'
os.environ['CUDA_VISIBLE_DEVICES'] = "0"
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
tf.config.experimental.set_memory_growth(gpus[0], True)
|
之后写入自己的模型训练全过程即可,注意运行时选择我们刚刚搭建好的GPU支持的kernel,一般在右上角或运行时进行选择。若提示需下载kernel,下载即可。kernel名称即为我们自定义的env。
在此附上笔者项目思路:分为数据导入-模型训练-预测结果-画图分析四个步骤,笔者采用U-Net模型,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| def unet(input_shape=(52, 36, 5), n_base=64): def conv_block(x, n): x = Conv2D(n, 3, activation='relu', padding='same')(x) x = Conv2D(n, 3, activation='relu', padding='same')(x) return x
inp = Input(input_shape) c1 = conv_block(inp, n_base) p1 = MaxPooling2D()(c1) c2 = conv_block(p1, n_base*2) p2 = MaxPooling2D()(c2) c3 = conv_block(p2, n_base*4) u4 = UpSampling2D()(c3) u4 = concatenate([u4, c2]) c4 = conv_block(u4, n_base*2) u5 = UpSampling2D()(c4) u5 = concatenate([u5, c1]) c5 = conv_block(u5, n_base) out = Conv2D(1, 1, activation='linear')(c5) return Model(inp, out)
model = unet()
|
U-Net模型是一个下采样+上采样的过程,关键在于对于多通道数据提取多尺度特征。本代码中将最优模型存储以便后续测试。
训练过成输出样例:
92/92 - 10s - loss: 1.4912e-04 - mae: 0.0027 - val_loss: 1.7216e-04 - val_mae: 0.0028 - lr: 1.0000e-06 - 10s/epoch - 105ms/step Epoch 145/200
可看到损失、用时等信息。一般来说GPU训练时间远低于CPU,以笔者为例,CPU用时1-2min一轮,GPU仅用时10s。
训练完成后即可用生成的模型进行预测,示例代码:
1
| y_pred = model.predict(x_test, batch_size=64, verbose=1)
|
最后保存预测结果并进行误差计算或画图分析即可φ(゜▽゜*)♪
笔者训练项目简单,只是基础的模型训练中的一种方法,以作参考,欢迎指正沟通(指路主页E-Mail~)