Numpy数组内存使用问题

时间:2016-08-11 12:56:09

标签: python arrays numpy memory neural-network

首先,我想说这是我第一次在这里发帖提问,我希望我不会违反任何规则,如果是这样,请随时纠正我。我会尽量保持清醒。

我正在实现我自己版本的卷积神经网络(CNN),而我正面临着关于numpy数组的问题。我的实现一直在工作,并且仍在工作,问题是我的CNN实例比几个小时前占用了更多的内存。在故障排除后我发现只有完全连接层中的参数才显示出这个问题(可能是因为它更加沉重,因此在卷积层上问题不会出现)。 我加载了一个我为了说明而保存的较旧的实例。两者都是几乎相同大小的numpy数组:

>>> n.FCLay[0].theta.values.shape
(27744, 800)
>>> m.FCLay[0].theta.values.shape
(23064, 800)

n是" big" CNN和"小"一(考虑内存使用)

此外,它们包含的数据与显示此screen capture

的类型相同

然而,当我查看他们使用pympler's asizeof的内存时,这就是我得到的:

>>> asizeof.asizeof(n.FCLay[0].theta.values)
44390512
>>> asizeof.asizeof(m.FCLay[0].theta.values)
112

如您所见,差异非常大。

所以我一直在尝试不同的东西:

>>> type(n.FCLay[0].theta.values) == type(m.FCLay[0].theta.values)
True

>>> n.FCLay[0].theta.values.nbytes
44390400
>>> m.FCLay[0].theta.values.nbytes
36902400

看起来这里的尺寸可以比较,我不明白为什么如果你想要减少结果

>>> n.FCLay[0].theta.values.itemsize
2
>>> n.FCLay[0].theta.values.itemsize
2

关于源代码,这是初始化这些值的方式:

    self.values = np.random.randn
    self.values = np.random.randn(sizePrevLay, sizeNextLay)
    self.values *= sqrt(2.0/sizeInpt)
    self.values = self.values.astype(np.float16)

(上述测试在初始化之后和进行一些计算之后给出相同的结果)

感谢您的阅读。我希望这已经足够了,请随时要求任何精确度。

0 个答案:

没有答案