因为AI这两年的火爆,大家拿着锤子到处找钉子,锤子当然也砸到了我头上,有很多做业务的同事尝试通过AI的方法解决需要一些很复杂的业务逻辑算法,同时需要很多参数组合才能搞定的问题。但因为都是非科班出身也没有系统学习,所以遇到不少问题,所以在这里一一列出来,并且持续更新,希望能够总结出一些经验,在后续的应用中能够跳过这些坑,把更多精力集中在数据和业务问题上。
关于神经网络为什么不工作,有一篇非常实用的指南,在训练过程中遇到问题可以首先参考这个指南。传送门。
问题1、没有激活函数,你是认真的吗
真的会发生这样的问题,尤其是直接用tensorflow写模型的时候。同事前几天写了段代码,搭了一个单隐层的模型来近似一个产品中的算法,但是怎么训练都不收敛,按说那个算法是复杂,但也没有必要整一个十好几层的模型来模拟,尝试了种种手段也还是没用,最后仔细一看模型代码,所有层都没有激活函数,相当于费很大劲写了个线性回归还要拟合出产品算法(/摊手)。所以对于大多数的应用,不涉及复杂的网络结构或初始化、loss函数的,就用keras吧,毕竟人生苦短。
当然,无激活函数,也就是单位激活函数,在一些场景下也会使用,通常这种使用能够带来减少训练参数的好处。所以除非是有意的设计来简化网络,否则激活函数可不能忘掉。
问题2、还是激活函数,选对了没有
很多指南上也都说过,一般情况下,分类器隐层的激活函数用relu,输出层用sigmoid或softmax就八九不离十了,但是这里也有坑。许多的例子中使用的数据集是离我们面临的问题比较远的,最