原文来自特拉字节:https://telabytes.com/article/preview?id=119

这是练习深度学习的好时机。现有的主要深度学习框架如TensorFlow、Keras和PyTorch正在逐渐成熟,并提供了许多功能来简化深度学习过程。深度学习从业者还有其他出色的工具集。其中之一是Google Colaboratory环境。该环境基于Python Jupyter笔记本,使用户可以免费访问Tesla K80 GPU。如果您的本地计算机缺少GPU,则现在无需在Amazon AWS上租用GPU时间,至少是为了进行较小的学习任务的原型设计。这开启了任何人在MNIST等简单数据集之外进行深度学习的能力。谷歌最近也开放了在环境中免费使用TPU(Tensor Processing Units)。

免费访问GPU和TPU只是Google Colaboratory的一个好处。本文将探讨环境的功能,并向您展示如何有效地将其用作深度学习的“家庭基础”。我还将运行一个在TensorFlow中构建的示例CIFAR10分类器来演示它的用法。可以在此处找到本教程的Google Colaboratory笔记本。

Google Colaboratory基础知识
Google Colaboratory基于Jupyter笔记本电脑的设计和操作范例。我不会回顾Jupyter是如何工作的,因为我想大多数Python和TensorFlow用户已经知道这个包。要访问该环境,您必须拥有Google云端硬盘帐户并登录。您创建的.ipynb文件将保存在您的Google云端硬盘帐户中。

打开新文件后,首先要做的是重命名文件(文件 - >重命名)并设置运行环境(即是否使用标准CPU、GPU或TPU)。每当您更改运行环境时,当前笔记本会话将重新启动 - 因此最好先执行此操作。为此,请转到运行时 - >更改运行时类型。

Google Colaboratory最重要和最有用的组件之一是能够与他人共享您的笔记本,并允许其他人对您的工作发表评论。可以在屏幕右上角的“共享和注释”按钮中查看执行此操作的功能,如下所示:


注释功能允许用户对笔记本中的各个单元格进行注释,这对远程协作非常有用。

可以将每个单元选择为“代码”单元或“文本”单元。 文本单元允许开发人员创建围绕代码的注释,这有助于解释正在发生的事情或创建各种算法的文档类实现。 这与标准的Jupyter笔记本电脑类似。

本地bash命令也可以从单元格运行,它们与作为会话一部分创建的虚拟机(VM)进行交互。 例如,要安装将在本简介后面使用的PyDrive软件包,请直接执行以下操作之一:

!pip install -U -q PyDrive

这将在VM上运行普通的pip安装命令并安装PyDrive软件包。需要注意的一件重要事情是,Google Colaboratory将在一段时间不活动后超时并清除您的会话环境。这是为其他用户释放VM空间。因此,在某些情况下,可能需要在每次笔记本开头运行一系列pip安装命令,以便为您的特定用途准备好本地环境。但是,深度学习检查点,数据和结果摘要可以导出到具有永久存储的各种其他位置,例如Google Drive,本地硬盘驱动器等。

您还可以运行其他常见的LINUX命令,例如ls,mkdir,rmdir和curl。通过运行!ls \ bin可以找到Google Colaboratory上可用的更全面的bash命令和功能列表。

现在已经涵盖了这些基础知识,现在是时候研究如何在Google Collaboratory中访问TensorBoard。

访问TensorBoard
TensorBoard是TensorFlow的一个有用的可视化工具,有关如何使用它的更多详细信息,请参阅我之前的帖子。可以通过调用在训练过程中或之后编写的日志文件来访问它。在我看来,在训练期间访问这些文件是最有用的,这样可以观察您当前的方法是否产生结果。在PC上很容易调用TensorBoard服务器并通过网络浏览器访问,但这不能在Google Colaboratory中直接进行。

然而,有一个简单的解决方案 - ngrok。此程序包通过防火墙和其他网络阻止限制创建安全隧道,并允许访问公共Internet。要下载并安装ngrok到Google Colaboratory,请运行以下命令:

!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip ngrok-stable-linux-amd64.zip

下一步是以通常的方式创建TensorBoard会话。 要在Google Colaboratory中执行此操作,可以运行以下命令:

LOG_DIR = './log'
get_ipython().system_raw('tensorboard --logdir {} --host 0.0.0.0 --port 6006 &'.format(LOG_DIR)
)

get_ipython()命令允许用户访问IPython命令,system_raw()在本机命令提示符/终端中执行命令。 传递给system_raw()的字符串参数启动TensorBoard会话,该会话在LOG_DIR中搜索日志文件,并在端口6006上运行。

下一步是执行ngrok并打印出将用户带到TensorBoard门户的链接:

get_ipython().system_raw('./ngrok http 6006 &')
! curl -s http://localhost:4040/api/tunnels | python3 -c \"import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"

上面的第一行通过http协议启动ngrok隧道到端口6006 - 可以访问TensorBoard的相同端口。 第二行是复杂的卷曲命令。 Linux中的curl命令用于运行http请求。 在这种情况下,正在请求“http:// localhost:4040 / api / tunnels”。 这是一个本地运行的ngrok API,其中包含有关正在运行的隧道的信息。

然后,从该curl http请求接收的信息将通过Linux管道“|”运算符发送到本地Python 3应用程序。 结果通过sys.stdin以json格式进入Python - 并且已创建的隧道的公共URL将打印到屏幕。 运行此命令将在Google Colaboratory中返回一个类似于以下内容的URL:

https://712a59dd.ngrok.io

点击Google Colaboratory中的链接会将您的浏览器发送到TensorBoard门户网站。所以现在你可以在Google Colaboratory中使用TensorBoard - 这非常方便。

接下来我们将关注保存模型并从Google云端硬盘加载文件 - 这是使用Google Colaboratory时检查点和恢复模型的最简单方法。

在Google Colaboratory中保存和恢复文件查看特拉字节原文:https://telabytes.com/article/preview?id=119

在这篇文章中,我将介绍在Google Colaboratory中处理文件的两种方法,我认为这些方法最常用。要处理的文件通常包括训练或测试数据,以及保存的模型数据(即检查点或完全训练的模型数据)。

在Google Colaboratory中加载和下载文件的最简单方法是使用内置的文件夹结构浏览器。单击菜单中的视图 - >目录将启动左侧窗格/菜单。在此窗格的顶部,将出现一个名为“文件”的选项卡 - 选择此选项将显示当前运行时会话的文件结构,您可以从本地PC上载和下载该文件结构。

或者,可以通过运行以下命令以编程方式执行此操作:

from google.colab import files
uploaded = files.upload()

上面的代码将启动一个对话框,允许您导航到本地文件以上传到您的会话。 以下代码将指定的文件下载到PC上的下载区域(如果您使用的是Windows):

files.download("downloaded_weights.12-1.05.hdf5")

到现在为止还挺好。但是,这是一种非常手动的文件播放方式。这在训练期间是不可能的,因此使用此方法将检查点存储在Google Colaboratory的本地驱动器中是不可行的。另一个问题是当您在Google Colaboratory上运行长期训练课程时。如果您的训练结束并且您暂时不与控制台交互(即,您在训练结束时进行了一夜训练并且您已经睡着了),您的运行时将自动结束并释放以释放资源。

不幸的是,这意味着您还将失去所有培训进度和模型数据。换句话说,能够在训练时以编程方式存储文件/检查点非常重要。在下面的示例中,我将向您展示如何设置一个自动将检查点存储到您的Google云端硬盘帐户的培训回调,然后可以将其下载并稍后再次使用。我将在训练TensorFlow / Keras模型来分类CIFAR-10图像的背景下进行演示。有关详细信息,请参阅我的教程或我的书。

使用Keras和回调的文件保存示例

首先,我将向您展示所需的导入,使用Dataset API进行数据准备,然后是Keras模型开发。我不会解释这些,因为前面提到的教程中概述了详细信息,因此如果您想更好地理解模型,请检查一下。我们将使用PyDrive软件包与Google云端硬盘进行所有通话,因此首先您必须在会话中安装它:

!pip install -U -q PyDrive

接下来是所有的进口,数据和Keras模型开发:

import tensorflow as tf
from tensorflow import keras
import datetime as dt
import os
import numpy as np
from google.colab import files
from google.colab import drive
# these are all the Google Drive and authentication libraries required
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
# import the CIFAR-10 data then load into TensorFlow datasets
(x_train, y_train), (x_test, y_test) = keras.datasets.cifar10.load_data()
# the training set with data augmentation
train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(256).shuffle(10000)
train_dataset = train_dataset.map(lambda x, y: (tf.div(tf.cast(x, tf.float32), 255.0), tf.reshape(tf.one_hot(y, 10), (-1, 10))))
train_dataset = train_dataset.map(lambda x, y: (tf.image.central_crop(x, 0.75), y))
train_dataset = train_dataset.map(lambda x, y: (tf.image.random_flip_left_right(x), y))
train_dataset = train_dataset.repeat()
# the validation set
valid_dataset = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(5000).shuffle(10000)
valid_dataset = valid_dataset.map(lambda x, y: (tf.div(tf.cast(x, tf.float32),255.0), tf.reshape(tf.one_hot(y, 10), (-1, 10))))
valid_dataset = valid_dataset.map(lambda x, y: (tf.image.central_crop(x, 0.75), y))
valid_dataset = valid_dataset.repeat()
# now the model creation function
def create_model():model = keras.models.Sequential([keras.layers.Conv2D(96, 3, padding='same', activation=tf.nn.relu,kernel_initializer=keras.initializers.VarianceScaling(distribution='truncated_normal'),kernel_regularizer=keras.regularizers.l2(l=0.001),input_shape=(24, 24, 3)),keras.layers.Conv2D(96, 3, 2, padding='same', activation=tf.nn.relu,kernel_initializer=keras.initializers.VarianceScaling(distribution='truncated_normal'),kernel_regularizer=keras.regularizers.l2(l=0.001)),keras.layers.Dropout(0.2),keras.layers.Conv2D(192, 3, padding='same', activation=tf.nn.relu,kernel_initializer=keras.initializers.VarianceScaling(distribution='truncated_normal'),kernel_regularizer=keras.regularizers.l2(l=0.001)),keras.layers.Conv2D(192, 3, 2, padding='same', activation=tf.nn.relu,kernel_regularizer=keras.regularizers.l2(l=0.001)),keras.layers.BatchNormalization(),keras.layers.Dropout(0.5),keras.layers.Flatten(),keras.layers.Dense(256, activation=tf.nn.relu,kernel_initializer=keras.initializers.VarianceScaling(),kernel_regularizer=keras.regularizers.l2(l=0.001)),keras.layers.Dense(10),keras.layers.Softmax()])model.compile(optimizer=tf.train.AdamOptimizer(),loss='categorical_crossentropy',metrics=['accuracy'])return model
# finally create the model
model = create_model()

代码的下一步是创建“GoogleDriveStore”回调。 这个回调继承自一般的keras.callbacks.Callback超类,这允许下面的类定义创建在训练开始时,每个纪元后等运行的函数。下面的代码是回调的初始化步骤, 训练开始时开火:

class GoogleDriveStore(keras.callbacks.Callback):def on_train_begin(self, logs={}, model_folder="."):self.first = Trueself.init_date = dt.datetime.now()self.model_folder = model_folder# Authenticate and create the PyDrive client.auth.authenticate_user()gauth = GoogleAuth()gauth.credentials = GoogleCredentials.get_application_default()self.drive = GoogleDrive(gauth)

您可以观察到,首先设置了一些初始化变量,其目的很快就会明确。之后,有4行与设置Google云端硬盘连接相关。我承认我不是100%确定这些认证功能如何详细工作,但我会解释一下。

首先,运行auth.authenticate_user()函数 - 这是一个本机Google Colaborotory函数,它将提供一个供用户点击的链接。这将引导用户登录Google帐户,并提供需要输入Colaboratory笔记本的令牌以完成身份验证。

接下来,需要将此身份验证加载到PyDrive Google Drive连接中。首先创建一个OAuth认证对象(gauth)。然后,通过GoogleCredentials的get_application_default()方法提供此连接的凭据。我不确定这种方法是如何工作的,但似乎通过运行auth.authenticate_user()来获取在第一步中执行的身份验证。最后,创建一个GoogleDrive对象,并将身份验证凭据传递给此对象创建。

现在,回调具有经过身份验证的Google云端硬盘连接。下一步是在每个纪元结束后为Google云端硬盘创建检查点存储:

def on_epoch_begin(self, batch, logs={}):if not self.first:# get the latest model_files = os.listdir(self.model_folder)max_date = self.init_datefor f in model_files:if os.path.isfile(self.model_folder + "/" + f):if f.split(".")[-1] == 'hdf5':creation_date = dt.datetime.fromtimestamp(os.path.getmtime((self.model_folder + "/" + f)))if creation_date > max_date:file_name = flatest_file_path = self.model_folder + "/" + fmax_date = creation_dateuploaded = self.drive.CreateFile({'title': file_name})uploaded.SetContentFile(latest_file_path)uploaded.Upload()else:self.first = False

上面的函数只是循环遍历self.model_folder目录中的所有文件。 它搜索具有hdf5扩展名的文件,这是Keras模型保存格式。 然后它找到具有最新创建日期(latest_file_path)的hdf5文件。 找到此文件后,将使用PyDrive中的GoogleDrive对象的CreateFile方法创建文件,并为该文件指定名称。 在下一行,此文件的内容设置为等于本地存储的最新hdf5文件。 最后,使用upload()方法,该文件将保存到Google云端硬盘。

其余的训练代码如下所示:

g_drive_callback = GoogleDriveStore()
callbacks = [# Write TensorBoard logs to ./logs directory
keras.callbacks.TensorBoard(log_dir='./log/{}'.format(dt.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")), write_images=True),keras.callbacks.ModelCheckpoint("./weights.{epoch:02d}-{val_loss:.2f}.hdf5", monitor='val_loss', verbose=0, save_best_only=True),g_drive_callback
]
model.fit(train_dataset,  epochs=50, steps_per_epoch=len(x_train)//256,validation_data=valid_dataset,validation_steps=3, callbacks=callbacks)

从上面的代码中可以看出,训练中总共包含三个回调–TensorBoard回调(更新TensorBoard结果文件),模型检查点回调(创建hdf5模型检查点)以及最终Google Drive回调 我创造了。

接下来要介绍的是如何将经过训练的模型从Google云端硬盘加载到您的Google Colaboratory会话中。

从Google云端硬盘加载经过训练的模型

从Google云端硬盘访问文件并将其提供给您的Google Colaboratory会话的最简单方法是将Google云端硬盘安装到会话中。 这可以很容易地执行(但是,如果您还没有使用前面解释的令牌代码,则必须通过调用drive.mount()方法进行身份验证)。 下面的代码显示了如何使用此方法将数据重新加载到模型中并运行一些预测:

drive.mount('/content/gdrive')
model = create_model()
model.load_weights("./gdrive/My Drive/weights.12-1.05.hdf5")
model.predict(valid_dataset, steps=1)

最后一行将从新加载的Keras模型中打印出一系列预测。 请注意,提供给drive.mount()的参数是会话文件结构中应安装驱动器内容的位置。 然后访问此位置以在上面的代码中加载权重。

这将为您提供Google Colaboratory的快速概览,以及一些方便的代码片段,这些代码片段允许您通常从Colaboratory运行TensorBoard,以及如何从Google云端硬盘保存和加载文件 - 这是长时间培训课程的必备条件。 我希望这可以让您充分利用这种优秀的方式来测试和构建深度学习模型,并获得免费的GPU时间!

原文来自特拉字节:https://telabytes.com/article/preview?id=119

了解如何在Google Colaboratory中构建深度学习系统相关推荐

  1. Anaconda中构建深度学习开发环境记录(Win10下测试)

    有人问我Win10下深度学习环境的构建,个人觉得应该和Win7差不多,但出于负责还是亲自尝试记录一下.下面所说的命令都是亲测可用的. 我的平台是:Python3.6(Anaconda4.3)+CUDA ...

  2. 哈佛医学院解析:触发医学深度学习系统受到「对抗攻击」的诱因有哪些?

    原文来源:arXiv 作者:Samuel G. Finlayson.Isaac S. Kohane.Andrew L. Beam 「雷克世界」编译:EVA 对抗样本的发现引起了人们对深度学习系统的实际 ...

  3. 糖尿病视网膜病变的深度学习系统笔记

    糖尿病视网膜病变的深度学习系统笔记 论文地址:A deep learning system for detecting diabetic retinopathy across the disease ...

  4. 如何在TensorFlow中通过深度学习构建年龄和性别的多任务预测器

    by Cole Murray 通过科尔·默里(Cole Murray) In my last tutorial, you learned about how to combine a convolut ...

  5. 如何在React Native中构建项目并管理静态资源

    by Khoa Pham 通过Khoa Pham 如何在React Native中构建项目并管理静态资源 (How to structure your project and manage stati ...

  6. 在Tensorflow中使用深度学习构建图像标题生成器

    by Cole Murray 通过科尔·默里(Cole Murray) 在Tensorflow中使用深度学习构建图像标题生成器 (Building an image caption generator ...

  7. 如何在Google Chrome中手动设置位置信息

    如何在Google Chrome中手动设置位置信息 如果用户位于「主要城市」,通常经 IP 地址获取到的定位信息都是比较接近实际的.但是如果用户处于偏远城市或者郊区,通过 ISP 获取到的位置信息与用 ...

  8. 如何在谷歌地图自定义范围_如何在Google表格中更改和创建自定义数字格式

    如何在谷歌地图自定义范围 Khamosh Pathak Khamosh Pathak By default, Google Sheets doesn't format numbers. If you' ...

  9. 在OpenCV中基于深度学习的边缘检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 导读 分析了Canny的优劣,并给出 ...

最新文章

  1. 使用proxy来调用未定义的属性方法
  2. Python全栈开发——描述符
  3. linux 应用层编程之内核链表list的使用
  4. KNN识别手写体数字
  5. Linux能否靠架构取得胜利
  6. E 速度即转发(牛客挑战赛48)(树套树)
  7. [linux]wait详解
  8. Android:JNI 与 NDK的区别(含实例教学)
  9. GStreamer基础教程04 - 动态连接Pipeline
  10. python中findroot_Python源码问题算负数平方根无结果输出何解,python负数,def findRoot...
  11. 吴恩达机器学习 12.异常检测
  12. 5秒钟搭建一个简单版的restful资源服务器
  13. FOC电机库 定点PID代码分析
  14. Android 源码查看网站分享
  15. 编程求球的体积和表面积(c语言)
  16. 永恒骑士 小程序服务器列表空,微信小程序一键登录应用服务器通过AES解密返回purePhoneNumber为空?...
  17. mt9638和t972哪个好
  18. 计算机按键去抖动的方式,键盘去抖动原则和方法
  19. 华为2020软件精英挑战赛初赛、复赛、决赛代码+心得分享
  20. 情商高的人的特点以及提高情商要做的事——《应该给孩子的50堂情商课》读后有感

热门文章

  1. php mysql 显示数据库连接失败_php mysql_connect 连接数据库失败解决方案
  2. 流体布局,响应式布局
  3. AE工程师,销售工程师
  4. 总结七:如何招聘全职程序员
  5. 对标世界一流|供应链管理对标方法论分享
  6. Windows10下编译Aseprite
  7. 基于kali的dns攻击
  8. 房产测量程序lisp_AutoLISP语言在房产测绘中的应用
  9. 雅克比矩阵和海森矩阵
  10. 几款好用软件,嗐,朋友推荐的,真香