keras实现多GPU或指定GPU的使用介绍

 更新时间:2020年06月17日 16:36:58   作者:shuangyumelody  
这篇文章主要介绍了keras实现多GPU或指定GPU的使用介绍,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

1. keras新版本中加入多GPU并行使用的函数

下面程序段即可实现一个或多个GPU加速:

注意:使用多GPU加速时,Keras版本必须是Keras2.0.9以上版本

from keras.utils.training_utils import multi_gpu_model  #导入keras多GPU函数
import VGG19   #导入已经写好的函数模型,例如VGG19

if G <= 1:
  print("[INFO] training with 1 GPU...")
  model = VGG19()

# otherwise, we are compiling using multiple GPUs
else:
  print("[INFO] training with {} GPUs...".format(G))
  # we'll store a copy of the model on *every* GPU and then combine
  # the results from the gradient updates on the CPU
  with tf.device("/cpu:0"):
    # initialize the model
    model1 = VGG19()
    # make the model parallel(if you have more than 2 GPU)
    model = multi_gpu_model(model1, gpus=G)

2.指定使用某个GPU

首先在终端查看主机中GPU编号:

watch -n -9 nvidia-smi

查询结果如下所示:

显示主机中只有一块GPU,编号为0

2.1 下面方法是直接在终端运行时加入相关语句实现指定GPU的使用

export CUDA_VISIBLE_DEVICES=0 python test.py
# 表示运行test.py文件时,使用编号为0的GPU卡
export CUDA_VISIBLE_DEVICES=0,2 python test.py
# 表示运行test.py文件时,使用编号为0和2的GPU卡

2.2 下面方法是在Python程序中添加

import os
# 使用第一张与第三张GPU卡
os.environ["CUDA_VISIBLE_DEVICES"] = "0, 2"

补充知识:踩坑记----large batch_size cause low var_acc

有时候,我们在训练模型前期,会出现很高的train_acc(训练准确率),但var_acc(验证准确率)却很低。这往往是因为我们模型在训练过程中已经进入局部最优,或者出现过拟合的现象。造成这种情况有多种原因,我只提出以下几点,有补充的可以在下面留言,我补充。

(1).训练数据分布不均匀,可能你的训练数据某一类别占据了大多数,比如95%的数据为苹果,5%的数据为其他类别,那么模型为了拟合训练数据,则模型会偏袒于把识别结果归属于苹果,而验证集的数据是正常的,那么便会出现高train_acc,低val_acc。

(2).训练数据没有shuffle,那么整个batch里面将会是同一个类别数据,比如都为苹果的图片,那么训练一个batch,那么模型输出将会往这一类别靠拢,会形成一个很高的acc的假象,但这个模型泛化能力却很低,因为这个模型都只会为了拟合这批同类的数据。

(3).训练集跟验证集的预处理不一致,这个是细节问题,输入的图片分布不一致,那么必然会影响到验证结果。

(4).模型过于复杂,造成过拟合现象,特别是在于训练数据集不多的情况下,更容易出现过拟合。

(5).这个也是最难发现的,就是过大的batch_size,造成训练前期,模型还未收敛,出现很高的train_acc,却有很低的val_acc,亲测,在120个类别,参数只有七万的分类模型中,在batch-size等于64的情况下,在第二个epoch时,train_acc达到80%,val_acc却只有6%,train_loss跟val_loss也是相差很大,而在batch_size在等于8的情况下,在第二个epoch,train_acc跟val_acc皆能达到60%,且还有上升的趋势。至于为什么,个人认为,模型在大的batch_size的情况下,模型泛化能力下降,且更难拟合,每个epoch所包含的step也更少,且在adam的优化算法,前期的学习率较高,模型出现了振荡,一直在局部最优值徘徊,具体原因不知。

接下来分析下,batc_size对模型的影响:

large batch_size:

好处:训练的更快,每一step都包含更多的训练集,模型准确率会更高,不容易受到噪声的影响,稳定性更好。

small batch_size:

好处:不容易陷入局部最优,泛化能力更强。

总结:

(1).large batch_size,虽然训练模型的训练误差会更低,但往往在execute的时候,效果却不尽人意。

(2).在时间允许的情况下,建议batch_size在32或以下。

以上这篇keras实现多GPU或指定GPU的使用介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • pandas loc iloc ix用法详细分析

    pandas loc iloc ix用法详细分析

    pandas处理数据时,我们会经常看到dataframe结构使用loc, iloc, ix等方法,那么这些方法到底有啥区别,下面我们来进行详细分析,感兴趣的朋友跟随小编一起看看吧
    2023-01-01
  • Pytorch使用Visdom进行数据可视化的示例代码

    Pytorch使用Visdom进行数据可视化的示例代码

    pytorch Visdom可视化,是一个灵活的工具,用于创建,组织和共享实时丰富数据的可视化,这个博客简要介绍一下在使用Pytorch进行数据可视化的一些内容,感兴趣的朋友可以参考下
    2023-12-12
  • 深入理解Playwright的高级功能和用法

    深入理解Playwright的高级功能和用法

    Playwright是一个强大而灵活的Python库,用于自动化浏览器操作和测试,本文主要介绍了深入理解Playwright的高级功能和用法,具有一定的 参考价值,感兴趣的可以了解一下
    2024-05-05
  • 基于PyQt5制作数据处理小工具

    基于PyQt5制作数据处理小工具

    这篇文章主要和大家介绍了如何利用Python中的PyQt5模块制作一个数据处理小工具,可以实现根据每个Excel数据文件里面的Sheet批量将数据文件合并成为一个汇总后的Excel数据文件,需要的可以参考一下
    2022-03-03
  • PyTorch零基础入门之逻辑斯蒂回归

    PyTorch零基础入门之逻辑斯蒂回归

    PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序,它是一个可续计算包,提供两个高级功能:1、具有强大的GPU加速的张量计算(如NumPy)。2、包含自动求导系统的深度神经网络
    2021-10-10
  • Python时间和日期库的实现

    Python时间和日期库的实现

    这篇文章主要介绍了Python时间和日期库的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • python中将阿拉伯数字转换成中文的实现代码

    python中将阿拉伯数字转换成中文的实现代码

    用于将阿拉伯数字转换化大写中文。程序没经过任何优化,出没经过详细的测试,挂到网上,方便将来有需要的时候直接拿来用
    2011-05-05
  • conda虚拟环境默认路径的修改方法

    conda虚拟环境默认路径的修改方法

    最近发现我linux系统中的/dev/root目录利用率占用了100%,这对后面文件的操作带来了一些麻烦,下面这篇文章主要给大家介绍了关于conda虚拟环境默认路径的修改方法,需要的朋友可以参考下
    2022-07-07
  • python 爬虫 实现增量去重和定时爬取实例

    python 爬虫 实现增量去重和定时爬取实例

    今天小编就为大家分享一篇python 爬虫 实现增量去重和定时爬取实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 2024最新Pytorch安装图文教程(Anaconda+GPU)

    2024最新Pytorch安装图文教程(Anaconda+GPU)

    本文详细介绍了如何使用Anaconda创建虚拟环境,并在该环境中安装CUDA和cuDNN,最后安装支持GPU的PyTorch,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-11-11

最新评论