机器学习中的软件测试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chongtong/article/details/78939891

摘要

机器学习的实现需要使用软件代码,从这一角度来说,机器学习也是软件工程的一部分。针对软件就会引入对软件是否正确的检验,那么在机器学习中如何进行软件测试?相关源码


什么是软件测试

TDD-测试驱动开发
是指开发功能代码之前,先编写测试代码,然后只编写使测试通过的功能代码,从而以测试来驱动整个开发过程的进行。这有助于编写简洁可用和高质量的代码,有很高的灵活性和健壮性,能快速响应变化,并加速开发过程。
安照测试覆盖面分白盒黑盒
安照测试阶段分单元集成和集成测试

为什么要进行软件测试

  • 编写代码时因为个人习惯、手误或分心等产生的问题
    如===写成==,for循环边界问题
  • 对编程语言、调用库的特性不能足够深入的了解
    矩阵的例子
import numpy as np
arr = np.ones(12)
print(arr)
print(arr.transpose())
  • 对算法本身没有足够深入的了解
    梯度的例子

机器学习中软件测试的特点

总体来看,大部分机器学习模型本质上就是低稳定性和高随机性的。主要原因在于数据计算部分(精度、溢出、计算本身的稳定性)
一般来说很难对整个测试集保证其正确或者错误,所以一般机器学习的测试集是用来测试根据训练集得到的模型是否在测试集上运行良好,既符合期望。

如何进行机器学习软件测试

白盒测试

  • tensorflow测试

黑盒测试

一般机器学习的测试集是用来测试根据训练集得到的模型是否在测试集上运行良好,既符合期望。

机器学习中的测试重点

代码逻辑验证

特别是自己实现的条件和分支较多的代码。如tensorflow代码测试

算法验证

具体算法具体分析。基本原则是通过另一条途径,而非原始代码的实现路径来进行验证。

结论——如何防止机器学习编码中产生bug

编码模块最小化

这是软件工程中对代码的要求。分模块,各个模块尽量单一,简单。尽可能的将稳定性的代码从总体非稳定性代码中分离出来

尽量使用现有成熟库和方法,而不要自己写代码

现有成熟库和方法针对专项功能进行了深度优化,远比重新造轮子要快得多,也稳定得多。这样在编码效率、算法开销上都会提升

进行单元测试

使用现有机器学习框架所提供的测试功能,如TensorFlow的test_util.TensorFlowTestCase类

针对具体算法做相应的算法验证

在代码中使用导数公式来实现反向传播,验证时就根据极限法则来验证导数公式的正确性


参考资料
- 斯坦福教程-梯度检验
- UFLDL教程
- 梯度检验
- 计算梯度的三种方法: 数值法,解析法,反向传播法
- 大规模Tensorflow网络的一些技巧
- Testing guide.
- 测试驱动开发

猜你喜欢

转载自blog.csdn.net/chongtong/article/details/78939891