输入是特征(features)
将神经网络第一层加工后叫做代表特征(feature representation)
计算图纸
Tensorflow 首先要定义神经网络的结构,
然后再把数据放入结构当中去运算和 training.
因为TensorFlow是采用数据流图(data flow graphs)来计算,
所以首先我们得创建一个数据流图,
然后再将我们的数据(数据以张量(tensor)的形式存在)放在数据流图中计算.
节点(Nodes)在图中表示数学操作,
图中的线(edges)则表示在节点间相互联系的多维数据数组, 即张量(tensor).
训练模型时tensor会不断的从数据流图中的一个节点flow到另一节点, 这就是TensorFlow名字的由来.
Tensor 张量意义
张量(Tensor):
张量有多种.
零阶张量为纯量或标量 (scalar) 也就是一个数值. 比如 [1]
一阶张量为向量 (vector), 比如一维的 [1, 2, 3]
二阶张量为矩阵 (matrix), 比如二维的 [[1, 2, 3],[4, 5, 6],[7, 8, 9]]
以此类推, 还有 三阶 三维的 …
Tensorflow 是非常重视结构的, 我们得建立好了神经网络的结构,
才能将数字放进去, 运行这个结构.
这个例子简单的阐述了 tensorflow 当中如何用代码来运行我们搭建的结构.
过拟合(overfitting)解决办法
方法一: 增加数据量, 大部分过拟合产生的原因是因为数据量太少了.
如果我们有成千上万的数据, 红线也会慢慢被拉直, 变得没那么扭曲
方法二:运用正规化. L1, l2 regularization等等,
这些方法适用于大多数的机器学习, 包括神经网络.
他们的做法大同小异, 我们简化机器学习的关键公式为 y=Wx .
W为机器需要学习到的各种参数.
在过拟合中, W 的值往往变化得特别大或特别小.
为了不让W变化太大, 我们在计算误差上做些手脚.
原始的 cost 误差是这样计算, cost = 预测值-真实值的平方.
如果 W 变得太大, 我们就让 cost 也跟着变大, 变成一种惩罚机制.
所以我们把 W 自己考虑进来. 这里 abs 是绝对值.
这一种形式的 正规化, 叫做 l1 正规化.
L2 正规化和 l1 类似, 只是绝对值换成了平方.
其他的l3, l4 也都是换成了立方和4次方等等. 形式类似.
用这些方法,我们就能保证让学出来的线条不会过于扭曲.
还有一种专门用在神经网络的正规化的方法, 叫作 dropout.
在训练的时候, 我们随机忽略掉一些神经元和神经联结 ,
是这个神经网络变得”不完整”.
用一个不完整的神经网络训练一次.
到第二次再随机忽略另一些, 变成另一个不完整的神经网络.
有了这些随机 drop 掉的规则, 我们可以想象其实每次训练的时候,
我们都让每一次预测结果都不会依赖于其中某部分特定的神经元.
像l1, l2正规化一样, 过度依赖的 W , 也就是训练参数的数值会很大,
l1, l2会惩罚这些大的 参数.
Dropout 的做法是从根本上让神经网络没机会过度依赖.