网站托管服务器,高端vi设计机构,wordpress非常卡,ftp网站备份转自http://www.sohu.com/a/162460147_505915
源地址https://twiecki.io/blog/2016/07/05/bayesian-deep-learning/
今天#xff0c;我们将使用Lasagne构建一个更有趣的模型#xff0c;这是一个灵活的Theano图书馆#xff0c;用于构建各种类型的神经网络。你可能知道…转自http://www.sohu.com/a/162460147_505915
源地址https://twiecki.io/blog/2016/07/05/bayesian-deep-learning/
今天我们将使用Lasagne构建一个更有趣的模型这是一个灵活的Theano图书馆用于构建各种类型的神经网络。你可能知道PyMC3还使用了Theano因此在Lasagne中建立了人工神经网络ANN将贝叶斯先验放在参数上然后在PyMC3中使用变分推理ADVI来估计模型。
由于Lasagne的优秀表现我们可以轻松地建立一个具有最大汇集层的分层贝叶斯卷积ANN在MNIST上实现98的准确性。 数据集MNIST
我们将使用手写数字的经典MNIST数据集。 与之前的博客文章相反MNIST是具有合理数量的维度和数据点的有实际挑战性的ML任务当然不如像ImageNet那样有挑战性。 Loading data... 模型说明
我想像应该可以把Lasagne和PyMC3搭在一起因为他们都依赖于Theano。 然而目前还不清楚它将会是多么困难。 幸运的是第一个实验做得很好但有一些潜在的方法可以使这更容易。 我开设了一个GitHub issue在Lasagnes的报告里在这几天后PR695被合并允许他们更好的整合。 首先Lasagne创建一个具有2个完全连接的隐藏层每个具有800个神经元的ANN这几乎是从教程中直接采用的Lasagne代码。 当使用lasagne.layers.DenseLayer创建图层时我们可以传递一个函数init该函数必须返回一个用作权重和偏差矩阵的Theano表达式。 接下来为ANN创建权重函数。 因为PyMC3要求每个随机变量具有不同的名称我们创建一个类并且是唯一命名的先验。
在这里priors充当了调节者的角色试图保持ANN small的权重。它在数学上等价于一个L2的损失项作为通常的做法是将大的权重惩罚到目标函数中。 下面是一些设置小批量ADVI的函数。 放在一起
让我们用小批量的ADVI来运行ANN: 确保一切聚合: Accuracy on test data 89.81%
分层神经网络学习数据的正则化
上面我们只是固定了所有层的sd 0.1但是可能第一层应该有不同于第二层的值。也许开始时是0.1要么太小或太大。在贝叶斯建模中很常见的是在这种情况下放置hyperprior并学习最佳正则化应用到数据中去。这节省了我们在超参数优化中对参数进行调优的时间。 Accuracy on test data 92.25999999999999%
我们得到一个很小但很好的boost在准确性上。 我们来看看超参数后面的部分 有趣的是它们都是不同的这表明改变正规化数量在网络的每一层是有意义的。
卷积神经网络
但到目前为止在PyMC3中实现也很简单。有趣的是我们现在可以构建更复杂的ANNs像卷积神经网络: Accuracy on test data 98.03%