首先,我想说这是我第一次在这里发帖提问,我希望我不会违反任何规则,如果是这样,请随时纠正我。我会尽量保持清醒。
我正在实现我自己版本的卷积神经网络(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)
(上述测试在初始化之后和进行一些计算之后给出相同的结果)
感谢您的阅读。我希望这已经足够了,请随时要求任何精确度。