我最近开始使用Google,并且想要训练我的第一个卷积神经网络。由于得到了这里的答案,我从Google导入了这些图片。
然后我把我的代码粘贴到Colab中来创建CNN,并开始了这个过程。以下是完整的代码:
第1部分:设置Colab从我的驱动器导入图片
(第1部分是从这里复制的,因为它是为我而设计的。
步骤1:
代码语言:javascript运行复制!apt-get install -y -qq software-properties-common python-software-properties module-init-tools
!add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
!apt-get update -qq 2>&1 > /dev/null
!apt-get -y install -qq google-drive-ocamlfuse fuse第2步:
代码语言:javascript运行复制from google.colab import auth
auth.authenticate_user()第3步:
代码语言:javascript运行复制from oauth2client.client import GoogleCredentials
creds = GoogleCredentials.get_application_default()
import getpass
!google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}第4步:
代码语言:javascript运行复制!mkdir -p drive
!google-drive-ocamlfuse drive第5步:
代码语言:javascript运行复制print('Files in Drive:')
!ls drive/第二部分:复制粘贴我的CNN
我用Udemy课程的教程创建了这个CNN。它使用以tensorflow为后端的keras。为了简单起见,我上传了一个非常简单的版本,足够显示我的问题了。
代码语言:javascript运行复制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
from keras.layers import Dropout
from keras.optimizers import Adam
from keras.preprocessing.image import ImageDataGenerator 参数
代码语言:javascript运行复制imageSize=32
batchSize=64
epochAmount=50CNN
代码语言:javascript运行复制classifier=Sequential()
classifier.add(Conv2D(32, (3, 3), input_shape = (imageSize, imageSize, 3), activation = 'relu')) #convolutional layer
classifier.add(MaxPooling2D(pool_size = (2, 2))) #pooling layer
classifier.add(Flatten())安
代码语言:javascript运行复制classifier.add(Dense(units=64, activation='relu')) #hidden layer
classifier.add(Dense(units=1, activation='sigmoid')) #output layer
classifier.compile(optimizer = "adam", loss = 'binary_crossentropy', metrics = ['accuracy']) #training method图像预处理
代码语言:javascript运行复制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('drive/School/sem-2-2018/BSP2/UdemyCourse/CNN/dataset/training_set',
target_size = (imageSize, imageSize),
batch_size = batchSize,
class_mode = 'binary')
test_set = test_datagen.flow_from_directory('drive/School/sem-2-2018/BSP2/UdemyCourse/CNN/dataset/test_set',
target_size = (imageSize, imageSize),
batch_size = batchSize,
class_mode = 'binary')
classifier.fit_generator(training_set,
steps_per_epoch = (8000//batchSize),
epochs = epochAmount,
validation_data = test_set,
validation_steps = (2000//batchSize))现在我的问题来了
首先,我使用的训练集是一个包含10000张各种分辨率的狗和猫图片的数据库。(8000 training_set,2000年test_set)
我在Google Colab上运行这个CNN (支持GPU ),在我的PC上运行(tensorflow-gpu在GTX 1060上)。
这是我的个人电脑的一个中间结果:
代码语言:javascript运行复制Epoch 2/50
63/125 [==============>...............] - ETA: 2s - loss: 0.6382 - acc: 0.6520这是来自科拉布的:
代码语言:javascript运行复制Epoch 1/50
13/125 [==>...........................] - ETA: 1:00:51 - loss: 0.7265 - acc: 0.4916为什么Google Colab在我的案例中这么慢?
就我个人而言,我怀疑这是一个瓶颈,包括从我的驱动器中提取并读取图像,但是除了选择一种不同的方法导入数据库之外,我不知道如何解决这个问题。