版权归属
Original English language edition, entitled Deep Learning with Python by François Chollet,
published by Manning Publications. 178 South Hill Drive, Westampton, NJ 08060 USA. Copyright © 2018
by Manning Publications.
Simplified Chinese-language edition copyright © 2018 by Posts & Telecom Press. All rights reserved
Chapter 1 什么是深度学习
关于数据表征:
关于机器学习:
关于深度学习(层间可视化):
之前的一个问题似乎有了答案:每个层的卷积核应当是有序不变的。
关于损失函数:
关于反向传播和优化器(Optimizer):
深度学习的严冬:
神经网络简史:
SVM:
决策树、随机森林、梯度增强机
硬件发展:
本身性质-未来地位:
Chapter 2 神经网络的数学基础
张量:
向量是1轴的,向量构成矩阵是2轴的,矩阵构成3D张量是3轴的 5-3-3
ndim shape dtpye
张量切片:
>>> my_slice = train_images[10:100]
>>> print(my_slice.shape)
(90, 28, 28)
my_slice = train_images[:, 14:, 14:]
my_slice = train_images[:, 7:-7, 7:-7]
这里应该就是里面提到的NHWC(TensorFlow的默认格式)和NCHW(Theano的默认格式)。另外PyTorch比较有意思,其Numpy支持的是NHWC,但是Torch本身支持的是NCHW。当输入是三维图像时,喂给网络的(Dataloader出来的)应当是5维Tensor:NCDHW,其中D代表depth。以三维CT为例的话,batch size为1,patch size为512*512*620的话,NCDHW为(1, 1, 620, 512, 512)。C默认为1。
在实践中,当处理Numpy数组时,这些操作也可以使用优化后的内置Numpy函数,这些函数本身将繁重的工作委托给基本线性函数库的实现((BLAS,如果您安装了)。BLAS是低层次的、高度并行的、高效的张量处理例程,通常在Fortran或C语言中实现。
反向传播:
Chapter 3 神经网络入门
神经网络的三个最常见的用例:二分类、多分类和标量回归。
神经网络的主要组件:层、网络、目标函数和优化器。文章对几者进行了较好的总结:
(层+层。。。构成网络;网络有自身初始化,并完成数据变换和结果预测;预测结果和目标真实值之间计算得到损失函数,损失值经优化器得到权重更新)
不得不说,在网络的输入输出形状这点上比PyTorch方便很多,对初学者有利,但是灵活性设计更倾向于PyTorch:
Interesting(满纸荒唐言,一把辛酸泪):
关于Keras:
Keras是一个模型级的库,可以实现与三大主要平台(后端引擎/后端)的对接:TensorFlow(Google开发)、Theano(University of Montreal MILA Lab开发)、CNTK(Microsoft开发)。
这种方式的优点:
开发过程中可以在两个后端之间无缝切换,这通常是很有用的。例如,对于特定任务,某个后端的速度更快,那么我们就可 以无缝切换过去。我们推荐使用 TensorFlow 后端作为大部分深度学习任务的默认后端,因为它
的应用最广泛,可扩展,而且可用于生产环境。
通过 TensorFlow (或 Theano 、 CNTK ), Keras 可以在 CPU 和 GPU 上无缝运行。在 CPU 上运行时,TensorFlow 本身封装了一个低层次的张量运算库,叫作 Eigen ;在 GPU上运行时,TensorFlow封装了一个高度优化的深度学习运算库,叫作 NVIDIA CUDA 深度神经网络库( cuDNN )。
流程大致: