引言
利用神经网络进行线性回归或者利用BP网络进行非线性回归,算是机器学习一个入门级的问题。但是整个算法实现的流程对于更复杂的算法,都具有借鉴意义。为此,总结如下:
准备数据
数据的来源可以很广泛,如果是Kaggle等类型的比赛,数据是由官方提供的;如果是视觉任务,数据可以从数据集中下载,也可以自己去采集;如果是机器人控制方面,除了直接从数据集中下载,自己使用机器人实际采集就不太容易了,那么可以采用仿真的办法生成数据。
数据的保存格式,对于数值类型的数据,常见的由txt和csv两种格式。txt文件通常使用空格来分割数值,csv文件通常使用逗号来分割数值。
本文使用的数据:23280x17
关于怎么生成有质量的特征,那个数据特征工程的事情。
数据读取
当我们开始训练神经网络的时候,我们需要不断读取数据块。如果直接使用案例,比如说mnist等,会有一个设计好的读取数据的函数。但是如果使用自己的数据,那么就需要自己设计数据读取函数。这里我们定义一个函数它每次返回batch_size个随机的样本和对应的目标。我们通过python的yield来构造一个迭代器。
|
|
初始化模型参数
随机初始化
这个地方会有什么文章吗?对于强化学习来说,如果从随机初始化的模型开始学习,可能不太会收敛。那么就需要使用已有的但效果不那么好的模型来生成数据,预训练。
定义模型
这时候就该神经网络出场了。不同的框架有不同定义模型的方式。但是大致上都差不多。
损失函数
损失函数可以衡量预测结果与真实结果的误差。它对模型参数的偏导数提供了参数优化的方向。
优化器的选择
梯度下降方法,有很多种。
训练
现在我们可以开始训练了。训练通常需要迭代数据数次,在这里使用epochs表示迭代总次数;一次迭代中,我们每次随机读取固定数个数据点,计算梯度并更新模型参数。
总结
参考文献
[1] 动手学深度学习