如何在协作实验室的神经网络中加快学习过程?

时间:2019-07-12 01:19:02

标签: python tensorflow neural-network conv-neural-network google-colaboratory

我正在尝试在Colaboratory中使用此代码学习神经网络。该代码可以正常工作,但是主要问题是-学习速度太慢(但是参数不是太大)。

我在Colaboratory中的选项“更改运行时间”中将GPU用作“硬件加速器”(对于Python 3)。我尝试了不同类型的tensorflow-gpu(就像代码中一样),看起来程序看到了gpu但由于某种原因它不使用gpu(我没有其他解释)。

如果您知道如何改进并且更重要-加快速度,我将非常感激:)

#!pip install tf-nightly-gpu-2.0-preview
#!pip install tensorflow-gpu
#!pip install tensorflow-gpu==2.0.0-beta1
#!pip install keras

!pip install -q tensorflow-gpu==2.0.0-beta0
import tensorflow as tf
import os
import numpy as np
from google.colab import drive
drive.mount('/content/drive/')
try:
    os.chdir("drive/My Drive/NN")
except FileNotFoundError:
    pass

device_name = tf.test.gpu_device_name()
if device_name != '/device:GPU:0':
  raise SystemError('GPU device not found')
print("Found GPU at: {}".format(device_name))

#import keras
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D
from tensorflow.keras.layers import MaxPooling2D
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense

with tf.device('/gpu:0'):
  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(128, activation='relu'))
  classifier.add(Dense(1, activation='sigmoid'))

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

  from tensorflow.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(
                                                  'dataset/training_set',
                                                  target_size=(64, 64),
                                                  batch_size=32,
                                                  class_mode='binary'
  )

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


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

1 个答案:

答案 0 :(得分:0)

尝试创建一个大型数据结构,例如numpy数组(将其保存为npy并加载),hdf5等。从目录进行训练确实需要很多时间。如果您的数据不是很大,则可以尝试这种方法。这是我从numpy数组切换到flow_from_directory时发现的。