Я пытаюсь построить нейронную сеть.У меня есть 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 с сессиями или как-то иначе?