0%

tf-gpu-vscode-unet

Intro

本篇主要讲述笔者进行深度学习项目训练时的简单经验,重点为:

在Anaconda中搭建可使用的Tensorflow-GPU环境;

笔者进行简单训练的测试和成功步骤经验(新手向)(目前主要使用U-Net模型,后续可能有更多( ̄︶ ̄)↗ )

环境搭建

前注:

Tensorflow使用独显或集显GPU训练均需CUDA和cuDNN,若使用独显请确保驱动完备;

笔者在conda进行安装,很好用,推荐此环境(需先安装Anaconda,打开Anaconda Prompt即可);

网上教程很多,但其实可以没那么麻烦,跟着下面步骤一步一步来就没毛。

  1. 创建虚拟环境并激活(其中env可改成自己希望的环境名)

    1
    2
    conda create -n env python=3.10 -y
    conda activate env

​ 之后目录前应更变为你激活的环境名,如(env) C:\Users>

  1. 安装版本匹配的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
  2. 安装版本匹配的numpy

    1
    pip install numpy==1.26.4
  3. 安装版本匹配的Tensorflow

    1
    python -m pip install "tensorflow<2.11"
  4. 验证

    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"
# 关键在上面这行:0为用第一块GPU(一般是集显),1为用第二块GPU(一般是独显)
gpus = tf.config.experimental.list_physical_devices('GPU')

if gpus:

tf.config.experimental.set_memory_growth(gpus[0], True)
# 这里的0不用改(因为只是list里的第0个)

之后写入自己的模型训练全过程即可,注意运行时选择我们刚刚搭建好的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) # 52×36
p1 = MaxPooling2D()(c1) # 26×18
c2 = conv_block(p1, n_base*2) # 26×18
p2 = MaxPooling2D()(c2) # 13×9
c3 = conv_block(p2, n_base*4) # bottleneck 13×9
u4 = UpSampling2D()(c3) # 26×18
u4 = concatenate([u4, c2])
c4 = conv_block(u4, n_base*2)
u5 = UpSampling2D()(c4) # 52×36
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~)

one coin a day, keep the sadness away!😊