Google Colab花费太多时间来训练分类器。如何解决这个问题?

时间:2019-07-08 03:13:35

标签: python machine-learning keras deep-learning google-colaboratory

我想使用Keras在google colab中训练分类器,以对图像代表狗还是猫进行分类。有8000个训练样本和2000个测试样本。 1个历时的时间为12小时。我是Google colab的新手,我不知道该如何解决。我使用GPU作为硬件加速,我认为拥有1xTesla K80会花费不到5分钟的时间,但是这花费了太多时间。

我尝试将运行时更改为GPU和TPU,但两个运行时均无法正常工作。

这是我的代码:

classifier = Sequential()

classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 
 'relu'))

classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Flatten())

classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))

classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', 
metrics = ['accuracy'])

from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale = 1./255,
                               shear_range = 0.2,
                               zoom_range = 0.2,
                               horizontal_flip = True)

test_datagen = ImageDataGenerator(rescale = 1./255)

training_set = train_datagen.flow_from_directory('/content/gdrive/My 
Drive/Colab Notebooks/dataset/training_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')

test_set = test_datagen.flow_from_directory('/content/gdrive/My 
Drive/Colab Notebooks/dataset/test_set',
 target_size = (64, 64),                                          
batch_size = 32,
class_mode = 'binary')

classifier.fit_generator(training_set,
                     steps_per_epoch = 8000,
                     epochs = 1,
                     validation_data = test_set,
                     validation_steps = 2000)

执行此代码时有许多弃用方法。执行classifier.fit_generator()后,它显示1个纪元还剩12小时

2 个答案:

答案 0 :(得分:3)

检查以确保有时使用GPU,即使我将环境放到GPU上,它仍然没有使用。

#' ' means CPU whereas '/device:G:0' means GPU
import tensorflow as tf
tf.test.gpu_device_name()

如果这很好,那么我将重置您的运行时环境,然后重试。运行时间不会超过几分钟。我之前用10000张以上的照片来做,每个历时很快就花了6分钟。我的图片比64,64大得多,达到224,224

我还发现使用Kaggle内核要快一些,并且不会遇到输入太大的问题。我不得不限制Colab输入训练代,因为它将耗尽内存。 Kaggle不存在此问题,并且通过图像运行要快得多。我认为这是因为当您将图像上传到数据集时,它们会对图像进行编码。他们必须从那里将它们转换成numpy数组,因为这样做要快得多。

答案 1 :(得分:0)

首先在本地处理文件,以尝试运行

!cp '/content/gdrive/My Drive/Colab Notebooks/dataset/training_set' 'training_set'

然后:

training_set = train_datagen.flow_from_directory('training_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')

test_set = test_datagen.flow_from_directory('test_set',
 target_size = (64, 64),                                          
batch_size = 32,
class_mode = 'binary')

如果应对过程很慢,则将压缩文件上传到驱动器,将此zip文件复制到colab,然后解压缩。