最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Tensorflow實(shí)現(xiàn)多GPU并行方式

 更新時(shí)間:2020年02月03日 09:08:16   作者:winycg  
今天小編就為大家分享一篇Tensorflow實(shí)現(xiàn)多GPU并行方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

Tebsorflow開(kāi)源實(shí)現(xiàn)多GPU訓(xùn)練cifar10數(shù)據(jù)集:cifar10_multi_gpu_train.py

Tensorflow開(kāi)源實(shí)現(xiàn)cifar10神經(jīng)網(wǎng)絡(luò):cifar10.py

Tensorflow中的并行分為模型并行和數(shù)據(jù)并行。模型并行需要根據(jù)不同模型設(shè)計(jì)不同的并行方式,其主要原理是將模型中不同計(jì)算節(jié)點(diǎn)放在不同硬件資源上運(yùn)算。比較通用且能簡(jiǎn)便地實(shí)現(xiàn)大規(guī)模并行的方式是數(shù)據(jù)并行,同時(shí)使用多個(gè)硬件資源來(lái)計(jì)算不同batch的數(shù)據(jù)梯度,然后匯總梯度進(jìn)行全局更新。

數(shù)據(jù)并行幾乎適用于所有深度學(xué)習(xí)模型,總是可以利用多塊GPU同時(shí)訓(xùn)練多個(gè)batch數(shù)據(jù),運(yùn)行在每塊GPU上的模型都基于同一個(gè)神經(jīng)網(wǎng)絡(luò),網(wǎng)絡(luò)結(jié)構(gòu)一樣,并且共享模型參數(shù)。

import os
import re
import time
import numpy as np
import tensorflow as tf
import cifar10_input
import cifar10

batch_size = 128
max_steps = 1000
num_gpus = 1 # gpu數(shù)量


# 在scope下生成神經(jīng)網(wǎng)絡(luò)并返回scope下的loss
def tower_loss(scope):
 # 數(shù)據(jù)集的路徑可以在cifar10.py中的tf.app.flags.DEFINE_string中定義
 images, labels = cifar10.distorted_inputs()
 logits = cifar10.inference(images) # 生成神經(jīng)網(wǎng)絡(luò)
 _ = cifar10.loss(logits, labels) # 不直接返回loss而是放到collection
 losses = tf.get_collection('losses', scope) # 獲取當(dāng)前GPU上的loss(通過(guò)scope限定范圍)
 total_loss = tf.add_n(losses, name='total_loss')
 return total_loss


'''
外層是不同GPU計(jì)算的梯度,內(nèi)層是某個(gè)GPU對(duì)應(yīng)的不同var的值
tower_grads = 
[[(grad0_gpu0, var0_gpu0), (grad1_gpu0, var1_gpu0),...],
 [(grad0_gpu1, var0_gpu1), (grad1_gpu1, var1_gpu1),...]]
zip(*tower_grads)= 相當(dāng)于轉(zhuǎn)置了
[[(grad0_gpu0, var0_gpu0), (grad0_gpu1, var0, gpu1),...],
 [(grad1_gpu0, var1_gpu0), (grad1_gpu1, var1_gpu1),...]]
'''


def average_gradients(tower_grads):
 average_grads = []
 for grad_and_vars in zip(*tower_grads):
  grads = [tf.expand_dims(g, 0) for g, _ in grad_and_vars]
  grads = tf.concat(grads, 0)
  grad = tf.reduce_mean(grads, 0)
  grad_and_var = (grad, grad_and_vars[0][1])
  # [(grad0, var0),(grad1, var1),...]
  average_grads.append(grad_and_var)
 return average_grads


def train():
 # 默認(rèn)的計(jì)算設(shè)備為CPU
 with tf.Graph().as_default(), tf.device('/cpu:0'):
  # []表示沒(méi)有維度,為一個(gè)數(shù)
  # trainable=False,不會(huì)加入GraphKeys.TRAINABLE_VARIABLES參與訓(xùn)練
  global_step = tf.get_variable('global_step', [],
          initializer=tf.constant_initializer(0),
          trainable=False)
  num_batches_per_epoch = cifar10.NUM_EXAMPLES_PER_EPOCH_FOR_TRAIN / batch_size
  decay_steps = int(num_batches_per_epoch * cifar10.NUM_EPOCHS_PER_DECAY)
  # https://tensorflow.google.cn/api_docs/python/tf/train/exponential_decay
  # decayed_learning_rate = learning_rate * decay_rate ^ (global_step / decay_steps)
  # staircase is True, then global_step / decay_steps is an integer division
  lr = tf.train.exponential_decay(cifar10.INITIAL_LEARNING_RATE,
          global_step,
          decay_steps,
          cifar10.LEARNING_RATE_DECAY_FACTOR,
          staircase=True)
  opt = tf.train.GradientDescentOptimizer(lr)

  tower_grads = []
  for i in range(num_gpus):
   with tf.device('/gpu:%d' % i):
    with tf.name_scope('%s_%d' % (cifar10.TOWER_NAME, i)) as scope:
     loss = tower_loss(scope)
     # 讓神經(jīng)網(wǎng)絡(luò)的變量可以重用,所有GPU使用完全相同的參數(shù)
     # 讓下一個(gè)tower重用參數(shù)
     tf.get_variable_scope().reuse_variables()
     grads = opt.compute_gradients(loss)
     tower_grads.append(grads)
  grads = average_gradients(tower_grads)
  apply_gradient_op = opt.apply_gradients(grads, global_step=global_step)

  init = tf.global_variables_initializer()
  # True會(huì)自動(dòng)選擇一個(gè)存在并且支持的設(shè)備來(lái)運(yùn)行
  sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True))
  sess.run(init)
  tf.train.start_queue_runners(sess=sess)

  for step in range(max_steps):
   start_time = time.time()
   _, loss_value = sess.run([apply_gradient_op, loss])
   duration = time.time() - start_time

   if step % 10 == 0:
    num_examples_per_step = batch_size * num_gpus
    examples_per_sec = num_examples_per_step / duration
    sec_per_batch = duration / num_gpus

    print('step %d, loss=%.2f(%.1f examples/sec;%.3f sec/batch)'
      % (step, loss_value, examples_per_sec, sec_per_batch))



if __name__ == '__main__':
 train()

以上這篇Tensorflow實(shí)現(xiàn)多GPU并行方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python3 中文文件讀寫(xiě)方法

    Python3 中文文件讀寫(xiě)方法

    下面小編就為大家分享一篇Python3 中文文件讀寫(xiě)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • 對(duì)pyqt5多線程正確的開(kāi)啟姿勢(shì)詳解

    對(duì)pyqt5多線程正確的開(kāi)啟姿勢(shì)詳解

    今天小編就為大家分享一篇對(duì)pyqt5多線程正確的開(kāi)啟姿勢(shì)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • Python實(shí)現(xiàn)將Sheet頁(yè)拆分成單獨(dú)的Excel文件

    Python實(shí)現(xiàn)將Sheet頁(yè)拆分成單獨(dú)的Excel文件

    這篇文章主要為大家詳細(xì)介紹了如何使用 Python 將一個(gè) Excel 文件中的每個(gè)工作表(Sheet)保存成單獨(dú)的 Excel 文件,有需要的小伙伴可以了解下
    2025-02-02
  • 在Python中畫(huà)圖(基于Jupyter notebook的魔法函數(shù))

    在Python中畫(huà)圖(基于Jupyter notebook的魔法函數(shù))

    這篇文章主要介紹了在Python中畫(huà)圖(基于Jupyter notebook的魔法函數(shù)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • PyCharm配置第三方鏡像源的解決方法

    PyCharm配置第三方鏡像源的解決方法

    在pycharm中配置第三方鏡像后,秩序搜索需要的第三方庫(kù),就可以使用第三方鏡像下載,速度不是一般的快,這篇文章主要介紹了PyCharm配置第三方鏡像源,需要的朋友可以參考下
    2024-01-01
  • Python中使用Pillow庫(kù)生成立體文字的圖像

    Python中使用Pillow庫(kù)生成立體文字的圖像

    在眾多Python庫(kù)中,Pillow庫(kù)以其豐富的功能和易用性在圖像處理領(lǐng)域脫穎而出,Pillow是Python領(lǐng)域中最基礎(chǔ)且常用的圖像處理庫(kù)之一,,本文將詳細(xì)介紹如何使用Python自動(dòng)生成帶有立體效果的文字,我們會(huì)逐步講解輸入文字、選擇字體和顏色,并應(yīng)用立體效果來(lái)生成最終圖
    2025-03-03
  • Python緩存利器之cachetools庫(kù)使用詳解

    Python緩存利器之cachetools庫(kù)使用詳解

    cachetools庫(kù)為Python提供了強(qiáng)大而靈活的緩存解決方案,通過(guò)使用不同類(lèi)型的緩存和緩存裝飾器,我們可以輕松地在程序中實(shí)現(xiàn)高效的緩存機(jī)制,從而提升程序性能,本文將詳細(xì)介紹cachetools庫(kù)的基本概念和使用方法,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Python?selenium?八種定位元素的方式

    Python?selenium?八種定位元素的方式

    這篇文章主要介紹了Python?selenium八種定位元素的方式,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • 如何使用?Python為你的在線會(huì)議創(chuàng)建一個(gè)假的攝像頭

    如何使用?Python為你的在線會(huì)議創(chuàng)建一個(gè)假的攝像頭

    這篇文章主要介紹了使用?Python為你的在線會(huì)議創(chuàng)建一個(gè)假的攝像頭,在?Python?的幫助下,不再?gòu)?qiáng)制開(kāi)啟攝像頭,將向你展示如何為你的在線會(huì)議創(chuàng)建一個(gè)假的攝像頭,需要的朋友可以參考下
    2022-08-08
  • Python的Tkinter點(diǎn)擊按鈕觸發(fā)事件的例子

    Python的Tkinter點(diǎn)擊按鈕觸發(fā)事件的例子

    今天小編就為大家分享一篇Python的Tkinter點(diǎn)擊按鈕觸發(fā)事件的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07

最新評(píng)論

富宁县| 禹州市| 达州市| 当阳市| 孟州市| 洞口县| 昭苏县| 蒲江县| 盐城市| 珲春市| 察隅县| 平和县| 库尔勒市| 丰顺县| 克山县| 金川县| 武义县| 抚州市| 鄂州市| 吐鲁番市| 大余县| 大同市| 安远县| 东莞市| 鹤山市| 海兴县| 桦川县| 新邵县| 莱州市| 顺义区| 新蔡县| 柳州市| 浑源县| 汝阳县| 收藏| 安义县| 巩义市| 平顶山市| 南漳县| 金平| 福泉市|