【发布时间】:2018-08-27 21:22:17
【问题描述】:
我最近开始使用 Google Colab,并想训练我的第一个卷积神经网络。感谢here 的回答,我从 Google Drive 导入了图片。
然后,我将创建 CNN 的代码粘贴到 Colab 中并开始了该过程。 完整代码如下:
第 1 部分:设置 Colab 以从我的云端硬盘导入图片
(第 1 部分是从 here 复制的,因为它按我的预期工作
第 1 步:
!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 步:
from google.colab import auth
auth.authenticate_user()
第 3 步:
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 步:
!mkdir -p drive
!google-drive-ocamlfuse drive
第 5 步:
print('Files in Drive:')
!ls drive/
第 2 部分:复制粘贴我的 CNN
我使用 Udemy 课程中的教程创建了这个 CNN。它使用带有 tensorflow 的 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
from keras.layers import Dropout
from keras.optimizers import Adam
from keras.preprocessing.image import ImageDataGenerator
参数
imageSize=32
batchSize=64
epochAmount=50
CNN
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())
ANN
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
图像预处理
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 个训练集,2000 个测试集)
我在 Google Colab(启用 GPU 支持)和我的 PC(GTX 1060 上的 tensorflow-gpu)上运行了这个 CNN
这是我电脑的中间结果:
Epoch 2/50
63/125 [==============>...............] - ETA: 2s - loss: 0.6382 - acc: 0.6520
这是来自 Colab:
Epoch 1/50
13/125 [==>...........................] - ETA: 1:00:51 - loss: 0.7265 - acc: 0.4916
在我的情况下,为什么 Google Colab 这么慢?
我个人怀疑存在一个瓶颈,即从我的驱动器中提取然后读取图像,但除了选择不同的方法来导入数据库之外,我不知道如何解决这个问题。
【问题讨论】:
-
是的,我也认为这是因为从驱动器访问数据导致的网络开销。您可以尝试将数据从驱动器复制到 colab 实例,以便在本地使用。
-
@charel-f 我对 colab 也有同样的问题,你找到解决方案了吗?您介意为阅读您的问题的人共享一个 colab 笔记本吗?
-
如果你想通了,我也在问你的答案。
-
抱歉@NeStack,我最近没有真正使用 colab,我没有找到比下面链接的更好的答案。
标签: python neural-network jupyter-notebook google-colaboratory