回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我最近开始使用Google Colab,想训练我的第一个卷积神经网络。我从我的Google驱动器中导入了图像,这要感谢我得到的答案<a href="https://stackoverflow.com/questions/49351071/load-image-<a href="https://www.cnpython.com/pypi/dataset" class="inner-link">dataset</a>-folder-or-zip-located-in-google-drive-to-google-colab">here</a>。</p>
<p>然后我把我的代码粘贴到Colab中创建CNN,并开始了这个过程。
下面是完整的代码:</p>
<h2>第1部分:设置Colab从我的驱动器导入图片</h2>
<p>(第1部分是从<a href="https://stackoverflow.com/questions/49351071/load-image-dataset-folder-or-zip-located-in-google-drive-to-google-colab">here</a>复制的,因为它对我的工作方式是exptected</p>
<p>步骤1:</p>
<pre><code>!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
</code></pre>
<p>步骤2:</p>
<pre><code>from google.colab import auth
auth.authenticate_user()
</code></pre>
<p>步骤3:</p>
<pre><code>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}
</code></pre>
<p>步骤4:</p>
<pre><code>!mkdir -p drive
!google-drive-ocamlfuse drive
</code></pre>
<p>步骤5:</p>
<pre><code>print('Files in Drive:')
!ls drive/
</code></pre>
<h2>第二部分:复制粘贴我的CNN</h2>
<p>我用Udemy课程的教程创建了这个CNN。它使用keras和tensorflow作为后端。
为了简单起见,我上传了一个非常简单的版本,足够显示我的问题</p>
<pre><code>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
</code></pre>
<p>参数</p>
<pre><code>imageSize=32
batchSize=64
epochAmount=50
</code></pre>
<p>有线电视新闻网</p>
<pre><code>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())
</code></pre>
<p>安</p>
<pre><code>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
</code></pre>
<p>图像预处理</p>
<pre><code>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))
</code></pre>
<h2>现在我的问题来了</h2>
<p>首先,我使用的训练集是一个数据库,里面有10000张不同分辨率的狗和猫的图片。(8000套训练,2000套测试)</p>
<p>我在Google Colab(启用了GPU支持)和我的PC(GTX 1060上的tensorflow GPU)上运行这个CNN</p>
<p>这是我的电脑的中间结果:</p>
<pre><code>Epoch 2/50
63/125 [==============>...............] - ETA: 2s - loss: 0.6382 - acc: 0.6520
</code></pre>
<p>这是科拉布的:</p>
<pre><code>Epoch 1/50
13/125 [==>...........................] - ETA: 1:00:51 - loss: 0.7265 - acc: 0.4916
</code></pre>
<p>为什么Google Colab在我的案例中这么慢?</p>
<p>就我个人而言,我怀疑存在一个瓶颈,那就是从我的驱动器中提取并读取图像,但除了选择不同的方法导入数据库之外,我不知道如何解决这个问题。</p>