当前位置: 首页 > 面试题库 >

与我的PC相比,Google Colab非常慢

诸葛柏
2023-03-14
问题内容

我最近开始使用Google
Colab,并且想训练我的第一个卷积神经网络。我进口从我的谷歌驱动器感谢图像,我得到了答案在这里。

然后,我将代码粘贴以将CNN创建到Colab中,并开始了该过程。这是完整的代码:

第1部分:设置Colab以从云端硬盘导入图片

(第1部分是从这里复制的,因为它对我来说是有效的

第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()

第三步:

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

有线电视新闻网

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())

人工神经网络

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这么慢?

就我个人而言,我怀疑存在一个瓶颈,其中包括从云端硬盘中拉取然后读取图像,但是除了选择其他导入数据库的方法外,我不知道该如何解决。


问题答案:

正如@
Feng已经指出的那样,从驱动器读取文件非常慢。本教程建议使用某种类型的内存映射文件,例如hdf5或lmdb,以解决此问题。这样,I \
O操作会更快(有关hdf5格式的速度增益的完整说明,请参见this)。



 类似资料:
  • 已定义查询的Dao: 来自Hibernate调试日志的SQL: 当我在数据库上执行这个查询时,大约需要15ms,从代码上执行大约需要1.5秒。我在代码中注释掉了这一行,滞后消失了,所以问题肯定是这个jpql选择。 数据库连接配置: 更新1: debug.log:

  • 问题内容: 我有两张表。表单有〜77000行。日志大约有270万行。 以下查询在不到一秒钟的时间内返回“ 30198”: 到目前为止,此查询已运行了约15分钟,但尚未完成: 为什么“不相等”查询 这么 慢? 问题答案: 因为将连接操作从每个表减少到一个匹配行(假定这些docid是唯一的)。 这样想吧-您跳了5个男孩和5个女孩的舞蹈: 您用第一个字母将它们配对。所以 一对配对 但是,如果您通过“首字

  • JavaScript 有两种方式判断两个值是否相等。 等于操作符 等于操作符由两个等号组成:== JavaScript 是弱类型语言,这就意味着,等于操作符会为了比较两个值而进行强制类型转换。 "" == "0" // false 0 == "" // true 0 == "0"

  • 我使用的是tensorflow 1.10 Python 3.6 我的代码基于TensorFlow提供的预制虹膜分类模型。这意味着,我使用的是一个Tensorflow DNN预制的分类器,区别如下: 10个功能改为4个。 5个类改为3个。 我做了一个代码将这个分类器导出为tflite格式,但是python模型中的准确率高于75%,但是当导出时,准确率大约下降到45%,这意味着大约30%的准确率丢失了

  • 问题内容: 我发布了这个问题,因为我想知道我是否做错了什么严重的事情才能获得此结果。 我有一个中等大小的csv文件,尝试使用numpy加载它。为了说明,我使用python制作了文件: 然后,我尝试了两种方法:numpy.genfromtxt,numpy.loadtxt 结果表明 t1 = 32.159652940464184,t2 = 52.00093725634724 。 但是,当我尝试使用ma