Python深度学习-u3.1:神经网络入门-理论

本章开始使用神经网络来解决实际问题,介绍三个问题的解决方法,以及神经网络的核心组件。

1. 神经网络剖析

【第二章】已经介绍了,训练神经网络主要围绕以下四个方面:

  • ,多个层组合成网络(或模型)。
  • 输入数据和相应的目标
  • 损失函数,即用于学习的反馈信号。
  • 优化器,决定学习过程如何进行。

这四者的关系为:
在这里插入图片描述

  • 1. 层:深度学习的基础组件

    • 层是一个数据处理模块,将一个或多个输入张量转换为一个或多个输出张量。
    • 有些层是无状态的,但大多数层都是有状态的,即层的权重。权重是利用随机梯度下降(SGD)学到的一个或多个张量,其中包含了网络的知识。
    • 不同的张量格式与不同的数据处理类型需要用到不同的层。
      • 简单的向量数据保存在形状为(samples, features)的2D张量中,通常用密集连接层(densely connected layer,也叫全连接层 - fully connected layer,密集层 - dense layer),对应于Keras中的Dense类来处理
      • 序列数据保存在形状为 (samples, timesteps, features) 的 3D 张量中,通常用循环层(recurrent layer,比如 Keras 的 LSTM 层)来处理。
      • 图像数据保存在 4D 张量中,通常用二维卷积层(Keras 的 Conv2D )来处理。
    • 实例:
      第一层需要制定input数据格式,第二层不用指定,Keras可以自动推导出输入形状。
      model = models.Sequential() 
      model.add(layers.Dense(32, input_shape=(784,))) 
      model.add(layers.Dense(32))
      
  • 2. 模型:层构成的网络
    选择正确的网络架构更像是一门艺术而不是科学。虽然有一些最佳实践和原则,但只有动手实践才能让你成为合格的神经网络架构师

    • 最常见的是序列模型,上例中的Sequential,将单一输入映射到单一输出
    • 双分支(two-branch)网络
    • 多头(multihead)网络
    • Inception 模块
  • 3. 损失函数与优化器:配置学习过程的关键

    • 损失函数(目标函数)—— 在训练过程中需要将其最小化。它能够衡量当前任务是否已成功完成。
    • 优化器 —— 决定如何基于损失函数对网络进行更新。 它执行的是随机梯度下降(SGD)的某个变体
    • 具有多个输出的神经网络可能具有多个损失函数(每个输出对应一个损失函数)。但是,梯度下降过程必须基于单个标量损失值。因此,对于具有多个损失函数的网络,需要将所有损失 函数取平均,变为一个标量值。
    • 对于分类、回归、序列预测等常见问题,你可以遵循一些简单的指导原则来选择正确的损失函数。参考方案如下:
      在这里插入图片描述
    • 只有在面对真正全新的研究问题时,你才需要自主开发目标函数。

2. Keras简介

  • 不同深度学习框架的 Google 网页搜索热度的变化趋势在这里插入图片描述
  • 目前,Keras 有三个后端实现:TensorFlow 后端、 Theano 后端和微软认知工具包(CNTK,Microsoft cognitive toolkit)后端。推荐使用 TensorFlow 后端作为大部分深度学习任务的默认后端,因为它 的应用最广泛,可扩展,而且可用于生产环境。
    在这里插入图片描述
    通过 TensorFlow(或 Theano、CNTK),Keras 可以在 CPU 和 GPU 上无缝运行。在 CPU 上运行 时,TensorFlow 本身封装了一个低层次的张量运算库,叫作 Eigen;在 GPU 上运行时,TensorFlow 封装了一个高度优化的深度学习运算库,叫作 NVIDIA CUDA 深度神经网络库(cuDNN)。

3. 建立深度学习工作站

  • 强烈推荐你在现代 NVIDIA GPU 上运行深度学习实验。

    • 也可以考虑在 AWS EC2 GPU 实例或 Google 云平台上运行深 度学习实验。但请注意,时间一长,云端 GPU 实例可能会变得非常昂贵。
  • 最好都使用 UNIX 工作站。

  • Jupyter 笔记本:运行深度学习实验的首选方法

    • 广泛用于数据科学和机器学习领域。
    • 具有丰富的文本编辑功能,可以对代码进行注释
    • 笔记本还可以将冗长的实验代码拆分为可独立执行的短代码,这使得开发具有交互性,
    • 如果后面的代码出现问题,也不必重新运行前面的所有代码
    • 个人实践总结
      • 在初期开发中,推荐使用jupyter编辑、运行代码,方便写出正确的代码以及改错
      • 在代码开发完成后,可以使用导出功能,将notebook文件导出为.py脚本,
      • 使用shell脚本运行导出的.py脚本,修改参数,多次调用.py文件
      • 可参考:
  • 在云端运行深度学习任务:优点和缺点

    • 优点:简单又低成本
    • 缺点:价格高昂
    • 简而言之,EC2 是很好的上手方法。你完全可以在 EC2 GPU 实例上运行本书的代码示例。 但如果你想成为深度学习的高手,那就自己买 GPU。

4. 实例

实例部分拆解为各篇文章,可以通过点击下面的进行查看:

待续~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值