Home

拼搭小怪

智能体设计师


Blog Github

玩项目:TensorFlow Playground

很久之前就玩过 TensorFlow Playground,但当时对神经网络只有一个简单的概念,不明白各种参数的意义,把它们胡乱点了一遍,并且尝试多次也没能把螺旋形状的数据集分类成功。

现在Andrew Ng 的课程学习过半( 对之前 Ng 课程笔记有兴趣的同学可以访问 线性回归逻辑回归神经网络 ),在理解的基础上再玩了下,的确有不同的体会。而且由于 TensorFlow Playground 是开源的( 代码简洁工整 ),所以可以把源码取回来然后按照自己的方式来玩~

So~,我的玩法就是修改 TensorFlow Playground 来回顾 Ng 之前课程的内容,以下是玩法参考。有啥有意思的玩法也请留言告诉我哈 (●—●) ~

线性回归

  • 将所有的 特征 直接连接到 OUTPUT
  • 当问题类型选择为 Regression( 回归问题 )的时候,OUTPUT 的激活函数默认用的 Linear( 就是 Identity,见激活函数部分 ),所以整个网络的输出和 线性回归 的 预测函数 相同
  • 神经网络使用的学习算法是 反向传播,根据 链式法则 你会发觉,我们这样连接网络后,权值的更新方式和 线性回归 是相同的
  • 可以添加高次的 多项式特征 来增强网络的学习能力( 记得在代码的序列化部分也加上,这样你的选择状态就会被记录下来,省得每次要重新把特征一个个选上 )
  • Standardization,把特征标准化( 注意一定要做 Standardization,否则你的 损失函数 瞬间就飞走了,根本走不到谷底 )

逻辑回归

  • 将所有的 特征 直接连接到 OUTPUT
  • 问题类型为 Classification( 分类问题 )时,OUTPUT 默认的激活函数是 Tanh,所以我们要把它改为 Sigmoid,使得整个网络的输出和 逻辑回归 的 预测函数 相同
  • 将 测试集 原先的结果 1、-1 改为 1、0
  • 添加新的 损失函数,使得经过 链式法则,权值的更新方式和 逻辑回归 是相同的
  • 添加高次 多项式特征
  • Standardization,把特征标准化
  • 将 决策边界 的判断值 0 改为 0.5( 因为网络的输出已经变成了 0 到 1 )

神经网络

  • 根据 Wiki 的 Activation Function 词条 来尝试不同的激活函数
  • 修改网络的层数限制
  • 修改每层网络神经元个数限制

Tips

  • 连接神经元的权值是可以手动修改的
  • 隐含层的每个神经元左下角可以手动观察调整 Bais
  • 把鼠标停留在神经元上,可以在右侧观察它的输出
  • 单步可以帮助你来调试你修改的代码是否正确( 输出一些中间计算值 )
  • 从 学习曲线 可以帮助你判断你的模型遇到 高偏差 还是 高方差 问题
  • 希望权值不要过大而产生 过拟合 的话,可以使用 L1 或 L2 正则化

拼搭小怪

2018-04-27

Blog Github