тензор потока с поддержкой gpu исчерпал память, пытаясь моделировать.fit_generate в python - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь построить нейронную сеть.У меня есть tenforflow 1.5 с поддержкой GPU и GPU GTX950.проблема в том, что моя модель очень велика - около 30 миллионов параметров, и когда я пытаюсь запустить программу, она выдает ошибку.(он дает много строк, я скопирую и вставлю только те, которые запускают ошибку)

[INFO] training...
Epoch 1/10
2018-12-09 11:15:55.051823: I tensorflow/core/common_runtime       /gpu/gpu_device.cc:1195] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 950, pci bus id: 0000:01:00.0, compute capability: 5.2)
2018-12-09 11:16:07.836098: W tensorflow/core/common_runtime/bfc_allocator.cc:273] Allocator (GPU_0_bfc) ran out of memory trying to allocate 225.00MiB.  Current allocation summary follows.
2018-12-09 11:16:07.836138: I tensorflow/core/common_runtime/bfc_allocator.cc:628] Bin (256):   Total Chunks: 30, Chunks in use: 30. 7.5KiB allocated for chunks. 7.5KiB in use in bin. 1.9KiB client-requested in use in bin.

я впервые использую tenorflow, поэтому я не уверен, в чем именно проблема, но я предполагаю, что она пытаетсязагрузить всю программу в gpu один раз, чтобы она не помещалась и выдает ошибку.Я прав?Некоторые предложения, которые я видел, состояли в том, чтобы использовать сеансы или разрешить _growth

 config = tf.ConfigProto()
 config.gpu_options.allow_growth = True
 sess = tf.Session(config = config)

, но я точно не знаю, как его использовать, и если я это сделал, то

мой код такой

import glob
import cv2
import numpy as np
import os
import keras
import tensorflow as tf
from keras.optimizers import SGD
from autoencoder3 import autoencoder

def DataGenerator(trainorval = 'train' ,batch_size = 1 ,number_of_images = 1000):
    #################################################################
    path_input = '/home/user/Desktop/dataset/images/100k/'
    path_drima = '/home/user/Desktop/dataset/drivable_maps_color_labels/'
    ######################################################################
    path_input = path_input + trainorval
    path_drima = path_drima + trainorval
    files = glob.glob1(path_input,"*.jpg")
    datain = np.empty(shape=[batch_size,720,1280,3])
    seglabel = np.empty(shape=[batch_size,720,1280,2])
    while True:
        for image in files[0:number_of_images]:
            im = cv2.imread(os.path.join(path_input, image))
            im = im.astype(np.float32)
            im[:,:,0] = im[:,:,0] - 73.9358
            im[:,:,1] = im[:,:,1] - 74.6135
            im[:,:,2] = im[:,:,2] - 71.0640
            drima = cv2.imread(os.path.join(path_drima, image[:-4] + '_drivable_color.png'))
            b = drima[:,:,0]
            b = b//255
            r = drima[:,:,2]
            r = r//255
            br = np.stack((b,r))
            br = br.transpose((1,2,0))
            datain[0] = im
            seglabel[0] = br
            yield (datain,seglabel)

if __name__ == "__main__":
    opt = SGD(lr=0.01) 
    print(0)
    model = autoencoder.build()
    print(1)
    model.compile(loss="categorical_crossentropy", optimizer=opt, metrics=["accuracy"])
    print(2)
    tgen = DataGenerator(trainorval = 'train',number_of_images = 700)
    vgen = DataGenerator(trainorval = 'val',number_of_images = 100)
    print("[INFO] training...")
    model.fit_generator(
    tgen,
    epochs=10,
    validation_data=vgen,
    steps_per_epoch=700,
    validation_steps=100,
    verbose = 1
    )

Я пытаюсь использовать тот же код на компьютере с тензорным потоком, который запускается в процессоре, и после некоторых предупреждений он начинает работать нормально, но очень медленно.

Можно ли запустить большую модель nn снизкая производительность и память gpu с сессиями или как-то иначе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...