keras指定gpu_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).模型过于复杂,造成过拟合现象,特别是在于训练数据集不多的情况下,更容易出现过拟合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值