训练神经网络主要围绕以下四个方面:层、数据输入与目标、损失函数、优化器,如图一
从上图可以看出,训练神经网络是一个迭代的过程,输入X经过层的变化后,预测值与真实目标值在损失函数下计算出损失值,再通过优化器重新学习更新权重,经过N轮迭代后停止权重更新,也就确定了模型。
层
层(layer)是神经网络的核心组件,神经网络的基本数据结构,它是一种数据处理模块,你可以将它看成数据过滤器。每一层只接受特定形状的输入张量,并返回特定形状的输,将一个或多个输入张量转换为一个或多个输出张量。有些层是无状态的,但大多数的层是有状态的,即层的权重。权重是利用随机梯度下降学到的一个或多个张量。
从层中进去一些数据,出来的数据变得更加有用。具体来说,层从输入数据中提取表示——我们期望这种表示有助于解决手头的问题,这也是深度学习与传统机器学习算法的不同之处,深度学习是自动学习特征,而传统的机器学习,如lightgbm,对特征非常敏感,在铁柱的工作中,铁柱使用lightgbm对未进行特征工程的气象数据进行风功率预测,预测结果非常糟糕,接近于一条直线,手动筛选特征后,预测效果才和LSTM的预测效果达到同一水平。 对于现代深度学习,神经网络能够从原始数据中自动提取有用的特征。这是否意味着,只要使用深度神经网络,就无须担心特征工程呢?注意,能够自动提取特征并不代表特征工程不重要,原因有两点: 1良好的特征仍然可以让你用更少的资源更优雅地解决问题。 2 良好的特征可以让你用更少的数据解决问题。深度学习模型自主学习特征的能力依赖于大量的训练数据。如果只有很少的样本,那么特征的信息价值就变得非常重要。也就是说,哪个忽悠你说深度学习中特征工程不重要,纯属瞎扯淡,如果你的样本量不多(比如风场运行初期训练样本数据少得可怜),或者计算资源有限(某些领导不一定会给你配服务器,只能在小小的笔记本上跑模型),特征工程还是很重要的。
数据数据涉及到数据集的划分、归一化、缺失值处理、特征工程等等。我们需要将数据整理为预定的格式feed给模型,不同的张量格式与不同的数据处理类型需要用到不同的层。例如,简单的向量数据保存在形状为(samples, features) 的2D 张量中,通常用密集连接层[densely connected layer,也叫全连接层(fully connected layer)或密集层(dense layer),对应于Keras 的Dense 类]来处理。序列数据保存在形状为(samples, timesteps, features) 的3D 张量中,通常用循环层(recurrent layer,比如Keras 的LSTM 层)来处理。图像数据保存在4D 张量中,通常用二维卷积层(Keras 的Conv2D)来处理。相应的目标可分为分类任务(比如云的分类)和回归任务(比如AQI预测)。
决定学习过程如何进行。你要使用哪种优化器?学习率是多少?当然 ,你也可以选择动态学习率。
图二 keras 优化器
铁柱最近在学习有关自然语言处理书籍的时候,恰巧看到了优化算法可视化的案例(基于tensorflow的SGD,方便大家进一步理解keras的底层后端,铁柱再唠叨两句,此书是花39美刀真金白银买的2018年的新书,大家一定要好好珍惜它,想了解tensorflow 阅读第二章即可。另外不得不感叹印度三哥整体的AI实力,书籍可在文章末尾下载哦,百度云链接保留7天有效)
第一步 选择序贯模型还是函数式模型。
第二步 构建网络层,包含输入层、隐藏层、输出层。
第三步 编译,确定优化函数,损失函数、评估方法、迭代次数、batch大小等。
第四步 预处理好数据后,feed给算法。
第五步 预测。
图三 建模顺序
本文主要参考如下网络资源:
keras学习笔记(3)—优化器 - ice_actor的博客 - CSDN博客
https://blog.csdn.net/ice_actor/article/details/78335093
深度学习:Keras入门(一)之基础篇
https://blog.csdn.net/zdy0_2004/article/details/74736656
百度云链接:
链接:https://pan.baidu.com/s/1-gB6VlZcGNqAqFp2rKfJ8w
提取码:z8ka (第二章含有SGD的可视化过程和tensorflow入门基础)