4.4 训练呼叫回归预测器
现在,你已经准备好使用TensorFlow对NYC 311数据拟合此模型。你可能通过观察清楚地发现,它们自然符合NYC 311数据,特别是如果TensorFlow可以找出将曲线的中心点放在春天和夏天附近的mu
值,那时有相当大的呼叫量,以及一个接近最优标准差的sig
值。
清单4.4创建TensorFlow训练的会话、相关的超参数、学习率和训练epoch数。我使用了一个相当大的学习率步长,这样TensorFlow就可以在收敛之前采用足够大的步伐来合适地扫描mu
和sig
的值。epoch的数量——5000,给予算法足够的训练次数来确定最优值。在我的笔记本计算机上进行本地测试时,这些超参数达到了很高的准确性(99%),所花费的时间不到1分钟。但是我本可以选择其他超参数,比如0.5的学习率,并给训练过程更多的训练次数(epoch)。机器学习的一部分乐趣来自超参数训练,与其说是科学,不如说是艺术,尽管元学习等技术和HyperOpt等算法未来可以简化此过程。关于超参数调优的详细讨论超出了本章的范畴,但是通过在线搜索就可以得到许多相关的介绍。
设置超参数之后,定义占位符X和Y,分别用于输入周数和呼叫数(归一化)。前面,我在清单4.2中提到了归一化Y值并创建nY_train
变量,便于训练。原因是,我们尝试学习的高斯函数模型的Y为e的指数,其值仅在0~1之间。函数model
定义要学习的高斯模型,相关的变量mu
和sig
被初始化为1
。cost
函数定义为L2范数,训练采用梯度下降算法。在你的回归模型训练了5 000个epoch之后,清单4.4的最后一步打印出学习得到的mu
和sig
。
清单4.4 为你的高斯曲线设置和训练TensorFlow模型
清单4.4的输出大致应该是这样,具体取决于学习得到的mu
和sig
:
当你完成值的打印并将它们保存在局部变量mu_val
和sig_val
中时,不要忘记关闭TensorFlow会话,这样可以释放5000个训练迭代所使用的资源。你可以通过调用sess.close()
完成任务。
提示 清单4.4向你展示了如何使用TensorFlow 1.x构建呼叫中心体量预测算法。如果你想知道如何在TensorFlow 2.x中实现,在附录中,我已经在TensorFlow 2.x-speak中讨论并重新实现了模型。它们有一些小的区别,但值得一看。到目前你看到的其他数据清洗和准备的代码,以及即将看到的验证和误差计算的代码都是相同的。