神经网络学习过程,实际上是在学习一个数据集的固有属性。
对于线性回归问题来说,我们定义的模型是线性模型,训练数据也是满足线性回归关系的,这样我们通过合适的方式就能用数值的方法得到和解析解之间误差在可接受范围内的数值解。
得到理想的训练结果的过程中,有各种各样的问题等着我们:
- 数据集问题。以线性回归问题为例,数据集全是一条直线上的数据,训练就没有意义;
- 训练过程收敛得慢,训练很长时间也得不到理想结果;
- 学习率设置得不合适,导致loss一直震荡;
- 模型不符合实际规律。本来是线性回归模型,非要建立二次函数模型,这样就算拟合能够得到结果,训练出来的模型泛化性也不会很好(偏个题,理论上可以为一组数据拟合出任何形式的函数关系,我没能给出证明,我只记得这是在学习数值计算方法的时候得到的结论);
- …
上边列出来的问题,是我这几天写程序遇到的,当然还有很多我没遇到的。这些内容希望可以为以后训练模型的时提供一些改进的思路。
总之,构建模型是非常关键的,这是基础,在一个正确的基础上,在拥有充足高质量数据集的情况下,结合各种参数调节技巧和高效的优化算法,我们最终才有可能训练出理想的结果。
前边的神经网络结构中,隐藏层在数学本质上是只有一个神经元的全连接层。
tf.reshape
tf.random_normal
记清楚每个张量的形状
继续训练:
如果一个神经网络已经训练了一段时间,由于某种原因想中止,但有不想丢失训练结果,所以就把训练结果进行保存。下次训练时直接加载上次训练中止时的训练结果,在此基础上继续训练。
神经网络的训练结果非常明确,就是参数。