#python #tensorflow #keras #deep-learning
#python #тензорный поток #keras #глубокое обучение
Вопрос:
Я только начал изучать глубокое обучение пару дней назад. Я пытаюсь обучить CNN, используя набор данных, состоящий из фотографий кошек и собак.
Но проблема в том, что процесс обучения занимает слишком много времени на процессоре, а также я вижу, что загрузка моего процессора заметно не увеличилась во время обучения. А также процесс обучения выполняется очень медленно. Я думал, что это из-за процессора, поэтому я приступаю к установке CUDA и TensorFlow-gpu, похоже, что Tensorflow-gpu работает как видеокарта, отображаемая на консоли.
Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 4620 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2060, pci bus id: 0000:1c:00.0, compute capability: 7.5)
но скорость обучения, похоже, на GPU медленнее, чем на CPU.
А также при обучении модели, которая занимает всю память GPU, но использование GPU во время обучения кажется очень низким. Не могли бы вы, ребята, пожалуйста, проверить, что я делаю не так? и как я могу ускорить процесс?
СИСТЕМНЫЕ ХАРАКТЕРИСТИКИ:
Процессор: Ryzen 2700x
Графический процессор: ZOTAC RTX 2060
Оперативная память: DDR4 16 ГБ 3000 МГц
КОД, КОТОРЫЙ я ИСПОЛЬЗУЮ:
import keras as keras
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
# Initialising the CNN
classifier = Sequential()
# Step 1 - Convolution
classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
# Step 2 - Pooling
classifier.add(MaxPooling2D(pool_size = (2, 2)))
# Adding a second convolutional layer
classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
# Step 3 - Flattening
classifier.add(Flatten())
# Step 4 - Full connection
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))
# Compiling the CNN
classifier.compile(optimizer = 'adadelta', loss = 'binary_crossentropy', metrics = ['accuracy'])
# Part 2 - Fitting the CNN to the images
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('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 = 35,
validation_data = test_set,
validation_steps = 20)
print("================== Saving Model ==========================")
classifier.save('./model.h5')
print("================= Model Saved ==========================")
Скорость:
20/8000 [..............................] - ETA: 10:47 - loss: 0.0269 - acc: 0.9906
Комментарии:
1. steps_per_epoch должна быть длиной вашего обучающего набора, деленной на размер пакета keras.io/models/sequential/#fit_generator
2. Похоже, что сейчас для обучения используется меньше изображений.
3. Почему вы это говорите? можете ли вы объяснить?
4. Ну, пожалуйста, не поймите меня неправильно, теперь каждый шаг занимает больше времени. Но после 10-й эпохи точность намного ниже, чем у текущего кода. вот так.