在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
我们有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
Threading.Thread.Sleep(TimeSpan.FromMilliseconds(infoReader.Length / 1000))
是Pythons的说法:&#34;我尝试为该操作获得足够的内存,但是你的操作系统认为它没有足够的内容&#34;。
所以没有解决方法。你必须采取另一种方式(或购买更多内存!)。我不知道您的MemoryError
是什么,但您的数组中包含的floatX
元素转换为:
64*56*56*4096
float64
float32
(不确定float16
是否支持您的运营)但float16
的问题在于,只要避免它们一次通常就不够了。如果你不改变你的方法,一旦你做一个需要中间或新阵列的操作(然后你有两个巨大的阵列)或者强制要求更高的dtype(那么你),你会再次遇到问题有两个巨大的阵列,新的阵列有更高的dtype,所以需要更多的空间。)
所以唯一可行的解决方法是改变方法,也许你可以从计算子集开始(map-reduce方法)?