import tensorflow as tf sess = tf.Session() with sess.as_default(): tf.global_variables_initializer().run() dense_weights, out_weights = None, None with sess.as_default(): for layer in model.layers: if len(layer.weights) > 0: weights = layer.get_weights() if 'dense' in layer.name: dense_weights = layer.weights[0].eval() if 'out' in layer.name: out_weights = layer.weights[0].eval()
例如,Keras 模型最后一层的权重的均值和标准差分别为 -0.0025901748 和 0.30395043,Pyro 模型对应值为 0.0005974418 和 0.0005974418。数字小了很多,但效果真的不错!其实这就是 L2 或 Dropout 这种正则化算法要做的——把参数逼近到零,而我们可以用变分推理来实现它!隐藏层的权重变化更有趣。我们将一些权重向量绘制成图,蓝线是 Keras 模型的权重,橙线是 Pyro 模型的权重:

输入层与隐藏层之间的部分权重
真正有意思的不止是权重的均值与标准差变得小,还有一点是权重变得稀疏,所以基本上在训练中完成了第一个权重集的稀疏表示,以及第二个权重集的 L2 正则化,多么神奇!别忘了自己跑跑代码感受一下: https://github.com/Rachnog/Deep-Trading/tree/master/bayesian
我们在文中使用了新颖的方法对神经网络进行训练。不同于顺序更新静态权重,我们是更新的是权重的分布。因此,我们可能获得有趣又有用的结果。模式识别分类我想强调的是,贝叶斯方法让我们在调整神经网络时不需要手动添加正则化,了解模型的不确定性,并尽可能使用更少的数据来获得更好的结果。感谢阅读:)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-70150-6.html
予以还击