真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

TensorFlow和Keras大數(shù)據(jù)量?jī)?nèi)存溢出怎么辦-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買(mǎi)多久送多久,劃算不套路!

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括嵊州網(wǎng)站建設(shè)、嵊州網(wǎng)站制作、嵊州網(wǎng)頁(yè)制作以及嵊州網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,嵊州網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到嵊州省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

這篇文章主要介紹TensorFlow和Keras大數(shù)據(jù)量?jī)?nèi)存溢出怎么辦,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

內(nèi)存溢出問(wèn)題是參加kaggle比賽或者做大數(shù)據(jù)量實(shí)驗(yàn)的第一個(gè)攔路虎。

以前做的練手小項(xiàng)目導(dǎo)致新手產(chǎn)生一個(gè)慣性思維——讀取訓(xùn)練集圖片的時(shí)候把所有圖讀到內(nèi)存中,然后分批訓(xùn)練。

其實(shí)這是有問(wèn)題的,很容易導(dǎo)致OOM?,F(xiàn)在內(nèi)存一般16G,而訓(xùn)練集圖片通常是上萬(wàn)張,而且RGB圖,還很大,VGG16的圖片一般是224x224x3,上萬(wàn)張圖片,16G內(nèi)存根本不夠用。這時(shí)候又會(huì)想起——設(shè)置batch,但是那個(gè)batch的輸入?yún)?shù)卻又是圖片,它只是把傳進(jìn)去的圖片分批送到顯卡,而我OOM的地方恰是那個(gè)“傳進(jìn)去”的圖片,怎么辦?

解決思路其實(shí)說(shuō)來(lái)也簡(jiǎn)單,打破思維定式就好了,不是把所有圖片讀到內(nèi)存中,而是只把所有圖片的路徑一次性讀到內(nèi)存中。

大致的解決思路為:

將上萬(wàn)張圖片的路徑一次性讀到內(nèi)存中,自己實(shí)現(xiàn)一個(gè)分批讀取函數(shù),在該函數(shù)中根據(jù)自己的內(nèi)存情況設(shè)置讀取圖片,只把這一批圖片讀入內(nèi)存中,然后交給模型,模型再對(duì)這一批圖片進(jìn)行分批訓(xùn)練,因?yàn)閮?nèi)存一般大于等于顯存,所以內(nèi)存的批次大小和顯存的批次大小通常不相同。

下面代碼分別介紹Tensorflow和Keras分批將數(shù)據(jù)讀到內(nèi)存中的關(guān)鍵函數(shù)。Tensorflow對(duì)初學(xué)者不太友好,所以我個(gè)人現(xiàn)階段更習(xí)慣用它的高層API Keras來(lái)做相關(guān)項(xiàng)目,下面的TF實(shí)現(xiàn)是之前不會(huì)用Keras分批讀時(shí)候參考的一些列資料,在模型訓(xùn)練上仍使用Keras,只有分批讀取用了TF的API。

Tensorlow

在input.py里寫(xiě)get_batch函數(shù)。

def get_batch(X_train, y_train, img_w, img_h, color_type, batch_size, capacity):
  '''
  Args:
    X_train: train img path list
    y_train: train labels list
    img_w: image width
    img_h: image height
    batch_size: batch size
    capacity: the maximum elements in queue
  Returns:
    X_train_batch: 4D tensor [batch_size, width, height, chanel],\
            dtype=tf.float32
    y_train_batch: 1D tensor [batch_size], dtype=int32
  '''
  X_train = tf.cast(X_train, tf.string)

  y_train = tf.cast(y_train, tf.int32)
  
  # make an input queue
  input_queue = tf.train.slice_input_producer([X_train, y_train])

  y_train = input_queue[1]
  X_train_contents = tf.read_file(input_queue[0])
  X_train = tf.image.decode_jpeg(X_train_contents, channels=color_type)

  X_train = tf.image.resize_images(X_train, [img_h, img_w], 
                   tf.image.ResizeMethod.NEAREST_NEIGHBOR)

  X_train_batch, y_train_batch = tf.train.batch([X_train, y_train],
                         batch_size=batch_size,
                         num_threads=64,
                         capacity=capacity)
  y_train_batch = tf.one_hot(y_train_batch, 10)

  return X_train_batch, y_train_batch

當(dāng)前名稱:TensorFlow和Keras大數(shù)據(jù)量?jī)?nèi)存溢出怎么辦-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://weahome.cn/article/dceggc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部