Memory Error: Numpy.random.normal
Memory Error: Numpy.random.normal
在 theano 中,以下代码片段抛出内存错误:
self.w = theano.shared(
np.asarray(
np.random.normal(
loc=0.0, scale=np.sqrt(1.0/n_out), size=(n_in, n_out)),
dtype=theano.config.floatX),
name='w', borrow=True)
仅提及尺寸 n_in=64*56*56 和 n_out=4096。该片段取自全连接层的 init 方法。查看回溯:
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
File "final.py", line 510, in __init__
loc=0.0, scale=np.sqrt(1.0/n_out), size=(n_in, n_out)),
File "mtrand.pyx", line 1636, in mtrand.RandomState.normal (numpy/random/mtrand/mtrand.c:20676)
File "mtrand.pyx", line 242, in mtrand.cont2_array_sc (numpy/random/mtrand/mtrand.c:7401)
MemoryError
有什么办法可以解决这个问题吗?
A MemoryError
是 Python 的表达方式:"I tried getting enough memory for that operation but your OS says it doesn't have enough".
所以没有解决方法。您必须以另一种方式进行(或购买更多 RAM!)。我不知道你的 floatX
是什么,但你的数组包含 64*56*56*4096
元素,转换为:
- 6.125 GB 如果你使用
float64
- 3.063 GB 如果你使用
float32
- 1.531 GB 如果你使用
float16
(不确定你的操作是否支持 float16
)
但是 MemoryError
s 的问题是仅仅避免它们 一次 通常是不够的。如果你不改变你的方法,一旦你执行需要中间或新数组的操作(然后你有两个巨大的数组)或者强制转换为更高的 dtype(然后你有两个巨大的数组),你就会再次遇到问题新的 dtype 更高,因此需要更多 space).
所以唯一可行的解决方法是改变方法,也许你可以从计算子集开始(map-reduce 方法)?
在 theano 中,以下代码片段抛出内存错误:
self.w = theano.shared(
np.asarray(
np.random.normal(
loc=0.0, scale=np.sqrt(1.0/n_out), size=(n_in, n_out)),
dtype=theano.config.floatX),
name='w', borrow=True)
仅提及尺寸 n_in=64*56*56 和 n_out=4096。该片段取自全连接层的 init 方法。查看回溯:
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
File "final.py", line 510, in __init__
loc=0.0, scale=np.sqrt(1.0/n_out), size=(n_in, n_out)),
File "mtrand.pyx", line 1636, in mtrand.RandomState.normal (numpy/random/mtrand/mtrand.c:20676)
File "mtrand.pyx", line 242, in mtrand.cont2_array_sc (numpy/random/mtrand/mtrand.c:7401)
MemoryError
有什么办法可以解决这个问题吗?
A MemoryError
是 Python 的表达方式:"I tried getting enough memory for that operation but your OS says it doesn't have enough".
所以没有解决方法。您必须以另一种方式进行(或购买更多 RAM!)。我不知道你的 floatX
是什么,但你的数组包含 64*56*56*4096
元素,转换为:
- 6.125 GB 如果你使用
float64
- 3.063 GB 如果你使用
float32
- 1.531 GB 如果你使用
float16
(不确定你的操作是否支持float16
)
但是 MemoryError
s 的问题是仅仅避免它们 一次 通常是不够的。如果你不改变你的方法,一旦你执行需要中间或新数组的操作(然后你有两个巨大的数组)或者强制转换为更高的 dtype(然后你有两个巨大的数组),你就会再次遇到问题新的 dtype 更高,因此需要更多 space).
所以唯一可行的解决方法是改变方法,也许你可以从计算子集开始(map-reduce 方法)?