[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.
这是我第一次使用tensorflow,所以我不确定到底是什么问题,但我认为它试图一次将整个程序加载到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
)
我尝试在具有tensorflow的计算机中使用相同的代码在cpu中运行,并在出现一些警告后开始正常运行,但速度非常慢。
是否可以运行性能低且内存gpu较大的nn模型 与会议或其他方式?