算法工程师修仙之路:Keras(十一)

深度学习基础

神经网络入门


Keras 简介

  • Keras 是一个 Python 深度学习框架,可以方便地定义和训练几乎所有类型的深度学习模型。

  • Keras 最开始是为研究人员开发的,其目的在于快速实验。

  • Keras 具有以下重要特性:

    • 相同的代码可以在 CPU 或 GPU 上无缝切换运行。
    • 具有用户友好的 API,便于快速开发深度学习模型的原型。
    • 内置支持卷积网络(用于计算机视觉)、循环网络(用于序列处理)以及二者的任意组合。
    • 支持任意网络架构:多输入或多输出模型、层共享、模型共享等。
    • Keras能够构建任意深度学习模型,无论是生成式对抗网络还是神经图灵机。
Keras、TensorFlow、Theano 和 CNTK
  • Keras 是一个模型级(model-level)的库,为开发深度学习模型提供了高层次的构建模块。它不处理张量操作、求微分等低层次的运算。相反,它依赖于一个专门的、高度优化的张量库来完成这些运算,这个张量库就是 Keras 的后端引擎(backend engine)。

  • Keras 没有选择单个张量库并将 Keras 实现与这个库绑定,而是以模块化的方式处理这个问题。因此,几个不同的后端引擎都可以无缝嵌入到 Keras 中。

  • 目前,Keras 有三个后端实现:TensorFlow 后端、Theano 后端和微软认知工具包(CNTK,Microsoft cognitive toolkit)后端。你用 Keras 写的每一段代码都可以在这三个后端上运行,无须任何修改。也就是说,你在开发过程中可以在两个后端之间无缝切换,这通常是很有用的。

  • 深度学习的软件栈和硬件栈
    在这里插入图片描述

  • 通过 TensorFlow(或 Theano、CNTK),Keras 可以在 CPU 和 GPU 上无缝运行。在 CPU 上运行时,TensorFlow 本身封装了一个低层次的张量运算库,叫作 Eigen;在 GPU 上运行时,TensorFlow 封装了一个高度优化的深度学习运算库,叫作 NVIDIA CUDA 深度神经网络库(cuDNN)。

使用 Keras 开发:概述
  • 典型的 Keras 工作流程:

    • 定义训练数据:输入张量和目标张量。
    • 定义层组成的网络(或模型),将输入映射到目标。
    • 配置学习过程:选择损失函数、优化器和需要监控的指标。
    • 调用模型的 fit 方法在训练数据上进行迭代。
  • 定义模型有两种方法:一种是使用 Sequential 类(仅用于层的线性堆叠,这是目前最常见的网络架构),另一种是函数式 API(functional API,用于层组成的有向无环图,让你可以构建任意形式的架构)。

    # 这是一个利用 Sequential 类定义的两层模型
    # 注意,我们向第一层传入了输入数据的预期形状
    from keras import models
    from keras import layers
    model = models.Sequential()
    model.add(layers.Dense(32, activation='relu', input_shape=(784,)))
    model.add(layers.Dense(10, activation='softmax'))
    
    # 下面是用函数式 API 定义的相同模型
    input_tensor = layers.Input(shape=(784,))
    x = layers.Dense(32, activation='relu')(input_tensor)
    output_tensor = layers.Dense(10, activation='softmax')(x)
    model = models.Model(inputs=input_tensor, outputs=output_tensor)
    
  • 利用函数式 API,你可以操纵模型处理的数据张量,并将层应用于这个张量,就好像这些层是函数一样。一旦定义好了模型架构,使用 Sequential 模型还是函数式 API 就不重要了。接下来的步骤都是相同的。

  • 配置学习过程是在编译这一步,你需要指定模型使用的优化器和损失函数,以及训练过程中想要监控的指标。

    from keras import optimizers
    model.compile(optimizer=optimizers.RMSprop(lr=0.001),
    						loss='mse', metrics=['accuracy'])
    
  • 最后,学习过程就是通过 fit() 方法将输入数据的 Numpy 数组(和对应的目标数据)传入模型,这一做法与 Scikit-Learn 及其他机器学习库类似。

    model.fit(input_tensor, target_tensor, batch_size=128, epochs=10)
    

建立深度学习工作站

Jupyter 笔记本:运行深度学习实验的首选方法
  • 笔记本(notebook)是 Jupyter Notebook 应用生成的文件,可以在浏览器中编辑。它可以执行 Python 代码,还具有丰富的文本编辑功能,可以对代码进行注释。

  • 笔记本还可以将冗长的实验代码拆分为可独立执行的短代码,这使得开发具有交互性,而且如果后面的代码出现问题,你也不必重新运行前面的所有代码。

在云端运行深度学习任务:优点和缺点
  • 如果你还没有可用于深度学习的 GPU(即最新的高端 NVIDIA GPU),那么在云端运行深度学习实验是一种简单又低成本的方法,让你无须额外购买硬件就可以上手。

  • 如果你使用 Jupyter 笔记本,那么在云端运行的体验与在本地运行完全相同。

  • 如果你是深度学习的重度用户,从长期来看这种方案是难以持续的,甚至几个星期都不行,因为云端的价格很高,如果你准备认真从事深度学习,那么应该建立具有一块或多块 GPU 的本地工作站。

深度学习的最佳 GPU
  • 如果你准备买一块 GPU,一定要买 NVIDIA GPU。NVIDIA 是目前唯一一家在深度学习方面大规模投资的图形计算公司,现代深度学习框架只能在 NVIDIA 显卡上运行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值