本文章只是学习笔记,不具备任何参考性
DNN(深度神经网络算法)
神经网络是一个生物启发式的计算和学习模型。像生物神经元一样,它们从其他细胞(神经元或环境)获取加权输入。这个加权输入经过一个处理单元并产生可以是二进制或连续(概率,预测)的输出。
人工神经网络(ANN)是这些神经元网络,可以随机分布或排列成一个分层结构。这些神经元通过与它们相关的一组权重和偏置来学习。
下图对生物神经网络和人工神经网络的相似性给出了形象的对比
深度学习是由多个处理层(隐藏层)组成的计算模型。层数的增加会导致学习时间的增加。由于数据量庞大,学习时间进一步增加。
TensorFlow成为最受欢迎的深度学习库,原因如下:
- TensorFlow 是一个强大的库,用于执行大规模的数值计算,如矩阵乘法或自动微分。这两个计算是实现和训练DNN所必需的。
- TensorFLow 在后端使用C/C++,这使得计算速度更快
- TensorFlow 有一个高级机器学习API,可以更容易地配置,训练和评估大量的机器学习模型
- 可以在TensorFlow 上使用高级深度学习库Keras,其可以轻松快速地进行原型设计。
任何深度学习网络都有四个重要部分组成:数据集、定义模型(网络结构)、训练/学习和预测/评估。
数据集
DNN 依赖于大量的数据。可以收集或生成数据,也可以使用可用的标准数据集。TensorFlow支持三种主要的读取数据的方法,可以在不同的数据集中使用。
- MNIST:这是最大的手写数字(0~9)数据库。它有60000个示例训练集和10000个示例的测试集组成。
- CIFAR10:这个数据集包含了 10 个类别的 60000 幅 32×32 彩色图像,每个类别有 6000 幅图像。其中训练集包含 50000 幅图像,测试数据集包含 10000 幅图像。数据集的 10 个类别分别是:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车。
- WORDNET:这是一个英文的词汇数据库。它包含名词、动词、副词和形容词,被归为一组认知同义词(Synset),即代表相同概念的词语,例如 shut 和 close,car 和 automobile 被分组为无序集合。它包含 155287 个单词,组织在 117659 个同义词集合中,总共 206941 个单词对。
- ImagNET:这是一个根据 WORDNET 层次组织的图像数据集(目前只有名词)。每个有意义的概念(synset)由多个单词或单词短语来描述。每个子空间平均由 1000 幅图像表示。目前共有 21841 个同义词,共有 14197122 幅图像。
- YouTube-8M:这是一个由数百万 YouTube 视频组成的大型标签视频数据集。它有大约 700 万个 YouTube 视频网址,分为 4716 个小类,并分为 24 个大类。
读取数据
在TensorFlow 中可以通过三种方式读取数据
- 通过feed_dict传递数据
- 从文件中能够读取数据
- 使用预加载的数据
通过feed_dict传递数据
运行每个步骤都会使用run()或eval() 函数调用的feed_dict 参数来提供数据。 这是在占位符的帮助下完成的,这个方法允许传递Numpy数组数据。可以使用TensorFlow的以下代码
y = tf.placeholder(tf.float32)
x = tf.placeholder(tf.float32)
...
with tf.Session as sess:
X_Array = some Numpy Array
Y_Array = other Numpy Array
loss = ...
sess. run(loss,feed_dict = {x:X_Array,y:Y_Array})
...
这里x和y是占位符;使用它们,在feed_dict 的帮助下传递包含X值的数组和包含Y值的数组
从文件中读取
当数据集非常大时,使用此方法可以确保不是所有数据都立即占用内存(例如60GB的YouTube-8m数据集)从文件读取的过程通过以下步骤完成:
- 使用字符串张量["file0",file1]或者[("file%d"i)for in in range(2)] 的方式关键文件名列表
- 文件名队列:创建一个队列来保存文件名,此时需要使用tf.train.string_input_producer函数:
filename_queue = tf.train.string_input_produce(files)
- Reader 用于从文件名队列中读取文件。根据输入文件格式选择相应的阅读器。read方法是标识文件和记录(调式时有用)以及标量字符串值的关键字
- Decoder : 使用一个或多个解码器和转换操作来将字符串解码位构成训练样本的张量:
一般来说数据被分为三部分:训练数据、验证数据和测试数据。
定义模型
建立描述网络结构的计算图。它涉及指定信息从一组神经元到另一组神经元的超参数、变量个占位符序列列以及损失/错误函数
训练/学习
在DNN中的学习通常基于一度下降算法,其母的是要找到训练变量(权重/偏置),将损失/错误函数最小化
评估模型
一旦网络被训练,通过predict()函数验证数据和测试数据来评估网络。这可以评价模型是否设和响应数据集,可以避免过拟合或欠拟合的问题。