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