Как ускорить процесс обучения в нейронных сетях в колаборатории? - PullRequest
0 голосов
/ 12 июля 2019

Я пытаюсь изучить нейронную сеть, используя этот код в колаборатории.Код работает без каких-либо ошибок, но ОСНОВНАЯ ПРОБЛЕМА заключается в том, что это слишком медленно (но параметры не слишком велики).для Python 3).Я пробовал разные типы tenorflow-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 голосов
/ 12 июля 2019

Попробуйте создать одну большую структуру данных, такую ​​как массив numpy (сохраните его с помощью npy и load), hdf5 и т. Д. Обучение из каталога действительно занимает много времени.Если ваши данные не велики, вы можете попробовать такую ​​вещь.Это то, что я узнал, когда переключаюсь с пустых массивов на директорию flow_from_directory.

...