据称,开始训练神经网络非常简单。许多库和框架都以展示 30 行神奇的代码片段来解决问题而自豪,给人一种这些东西是即插即用的(错误)印象。常见的情况如下:
>>> your_data = # plug your awesome dataset here
>>> model = SuperCrossValidator(SuperDuper.fit, your_data, ResNet50, SGDOptimizer)
#conquer world here
这些库和示例激活了我们大脑中熟悉标准软件的部分 - 通常可以获得干净的 API 和抽象。请求库演示:
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
不幸的是,神经网络并非如此。当您稍微偏离训练 ImageNet 分类器时,它们就不是“现成的”技术。
当您破坏或错误配置代码时,通常会遇到某种异常。您插入了一个整数,而某个函数需要字符串。该函数只需要 3 个参数。此导入失败。该键不存在。两个列表中的元素数量不相等。此外,通常可以为某个功能创建单元测试。
这只是训练神经网络的开始。从语法上来说,一切都可能是正确的,但整个过程并没有得到正确的安排,而且很难分辨。“可能的错误面”很大,符合逻辑(而不是语法),并且很难进行单元测试。例如,也许你在数据增强期间左右翻转图像时忘记翻转标签。你的网络仍然可以(令人震惊地)很好地工作,因为你的网络可以