绘制隐藏权重



我对神经网络感兴趣已经有一段时间了,并且刚刚开始学习深度学习教程。我有一个我希望是一个相对直接的问题,我希望有人能回答。

在多层感知教程中,我对看到网络在不同层的状态很感兴趣(类似于在本文中看到的:http://www.iro.umontreal.ca/~lisa/publications2/index.php/publications/show/247)。例如,我可以使用

写出隐藏层的权重
    W_open = open('mlp_w_pickle.pkl','w')
cPickle.dump(classifier.hiddenLayer.W.get_value(borrow=True), W_open, -1)

当我使用utils.py tile绘图时,我得到以下漂亮的绘图[编辑:漂亮的绘图被删除,因为我没有足够的代表]。

如果我想绘制logRegressionLayer上的权重,这样

cPickle.dump(classifier.logRegressionLayer.W.get_value(borrow=True), W_open, -1)

我实际需要做什么?上面的代码似乎不起作用——它返回一个形状为(500,10)的2array。我知道这500指的是隐藏单位的数量。杂项页上的段落:

绘制权重有点棘手。我们有n_hidden hidden单位,每个单位对应权矩阵的一列。一个列有相同的形状,可见,其中的权重与可见单元j对应的连接位于j位置。因此,如果我们重塑每个这样的列,使用numpy。重塑,我们获取一个过滤器图像,告诉我们这个隐藏单元是如何受到输入图像。

让我有点困惑。我不确定我该怎么把它们串起来。

谢谢大家-抱歉,如果这个问题令人困惑!

你可以像第一层的权重一样绘制它们,但它们不一定有多大意义。

考虑神经网络第一层的权重。如果输入大小为784(例如MNIST图像),并且在第一层中有2000个隐藏单元,那么第一层权重是大小为784 × 2000的矩阵(或者可能是转置,这取决于它是如何实现的)。这些权重可以绘制为784个大小为2000的斑块,或者更常见的是,2000个大小为784的斑块。在后一种情况下,每个patch都可以绘制为28x28的图像,直接与原始输入相关联,因此是可解释的。

对于你的高级回归层,你可以绘制10个瓷砖,每个大小为500(例如,22x23大小的补丁,一些填充使其成为矩形),或500个大小为10的补丁。两者都可以说明一些正在发现的模式,但可能很难将这些模式绑定回原始输入。

最新更新