现在我们已经对Theano有了初步的认识,再来看一个非常实际的例子,并实现一个基于最小二乘法(Ordinary Least Squares,OLS)的回归。关于回归分析的相关内容,请参见第10章。
让我们从创建包含5个训练样本的一维数据集开始:
请注意,在构造NumPy数组时,我们将数据格式设定为theano.config.floatX,这使得我们可以在需要时将数据在CPU和GPU之间来回传递。
接下来,我们来实现一个训练函数,以误差平方和作为代价函数,它可以通过学习得到线性回归模型的回归系数。其中,w0为偏置单元(x=0时y轴上的截距)。代码如下:
上述示例代码中的grad函数是Theano的一个非常实用的功能。我们通过wrt传递参数,此函数可以自动计算表达式相对于参数的导数。
在实现了训练函数后,我们训练线性回归模型,并通过查看误差平方和代价函数的值来检验模型是否收敛:
如下图所示,学习算法在经过5次迭代后就已经收敛:
到目前为止一切进展顺利,通过查看代价函数,我们似乎已经在此特定数据集上构建了一个可用的回归模型。现在,我们编译一个新的函数,用来对输入的特征进行预测:
实现预测函数也相当简单,只需遵循Theano的三个步骤:定义、编译和执行。接下来,我们绘制出线性回归在训练数据上的拟合情况:
由结果图像可以看出,模型恰当地拟合了数据点。
构建简单的回归模型是熟悉Theano API的一个很好的方式。不过,我们的最终目标是发挥出Theano的优势,也就是实现高效的人工神经网络。现在我们已经拥有了实现第12章中多层感知器所需的工具:Theano。不过实现起来依然让人感到枯燥,对吗?因此,我们来学习一下我个人最喜欢的一个深度学习库,它构建在Theano之上,可以尽可能简单地实现神经网络相关的实验。不过,在介绍Keras库之前,我们先在下一节中讨论一下如何选择神经网络中的激励函数。