深度神经网络
自从 1962 年 Rosenblat 提出感知机(Perceptron)以来,DNN 的概念就已经出现了,而自 Rumelhart、Hinton 和 Williams 在 1986 年发现了梯度下降算法后,DNN 的概念就变得可行了。直到最近 DNN 才成为全世界 AI/ML 爱好者和工程师的最爱。
一个算法出名后,它概念的出现已经是好几十年前,那时候其相应的硬件还没有诞生。
概念
神经网络是一个生物启发式的计算和学习模型。像生物神经元一样,它们从其他细胞(神经元或环境)获得加权输入。这个加权输入经过一个处理单元并产生可以是二进制或连续(概率,预测)的输出。
人工神经网络(ANN)是这些神经元的网络,可以随机分布或排列成一个分层结构。这些神经元通过与它们相关的一组权重和偏置来学习。
下图对生物神经网络和人工神经网络的相似性给出了形象的对比:
深度学习 :由多个处理层(隐藏层)组成的计算模型。层数的增加会导致学习时间的增加。由于数据量庞大,学习时间进一步增加,现今的 CNN 或生成对抗网络(GAN)的规范也是如此。
TensorFlow 成为最受欢迎的深度学习库,原因
- TensorFlow 是一个强大的库,用于执行大规模的数值计算,如矩阵乘法或自动微分。这两个计算是实现和训练 DNN 所必需的。
- TensorFlow 在后端使用 C/C++,这使得计算速度更快。
- TensorFlow 有一个高级机器学习 API(tf.contrib.learn),可以更容易地配置、训练和评估大量的机器学习模型。
- 可以在 TensorFlow 上使用高级深度学习库 Keras。Keras 非常便于用户使用,并且可以轻松快速地进行原型设计。它支持各种 DNN,如RNN、CNN,甚至是两者的组合。
- 任何深度学习网络都由四个重要部分组成:数据集、定义模型(网络结构)、训练/学习和预测/评估。可以在 TensorFlow 中实现所有这些
数据集
DNN 依赖于大量的数据。可以收集或生成数据,也可以使用可用的标准数据集。
TensorFlow 支持三种主要的读取数据的方法,可以在不同的数据集中使用,下面是训练建立模型的一些数据集:
- MNIST:这是最大的手写数字(0~9)数据库。它由 60000 个示例的训练集和 10000 个示例的测试集组成。该数据集存放在 Yann LeCun 的主页(http://yann.lecun.com/exdb/mnist/)中。这个数据集已经包含在tensorflow.examples.tutorials.mnist 的 TensorFlow 库中。
- CIFAR10:这个数据集包含了 10 个类别的 60000 幅 32×32 彩色图像,每个类别有 6000 幅图像。其中训练集包含 50000 幅图像,测试数据集包含 10000 幅图像。数据集的 10 个类别分别是:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车。该数据由多伦多大学计算机科学系维护(h