我正在尝试使用borrow = True分配一个非常大的数据集(在ndarray中大约28GB的RAM),以避免复制内存。为此,我使用以下功能:
def load_dataset(path):
# Load dataset from memory
data_f = np.load(path+'train_f.npy')
data_t = np.load(path+'train_t.npy')
# Split into training and validation
return (
(
theano.shared(data_f[:-1000, :], borrow=True),
theano.shared(data_t[:-1000, :], borrow=True)
), (
theano.shared(data_f[-1000:, :], borrow=True),
theano.shared(data_t[-1000:, :], borrow=True)
)
)
为了避免数据转换,在将阵列保存到磁盘之前,我已经将它们定义为正确的格式(之后填充它们并将它们转储到带有np.save()的磁盘中):
data_f = np.ndarray((len(rows), 250*250*3), dtype=theano.config.floatX)
data_t = np.ndarray((len(rows), 1), dtype=theano.config.floatX)
但是,似乎theano轮胎要复制内存,但却抛弃了以下错误:
错误分配25594500000字节的设备内存(内存不足)。驱动程序报告3775729664字节空闲,总计4294639616字节。
Theano配置为在GPU上运行(GTX 970)。
答案 0 :(得分:10)
可以使用theano.shared
强制将数据分配到CPU内存中,而不是使用theano.tensor._shared
。固定代码最终如下:
def load_dataset(path):
# Load dataset from memory
data_f = np.load(path+'train_f.npy')
data_t = np.load(path+'train_t.npy')
# Split into training and validation
return (
(
theano.tensor._shared(data_f[:-1000, :], borrow=True),
theano.tensor._shared(data_t[:-1000, :], borrow=True)
), (
theano.tensor._shared(data_f[-1000:, :], borrow=True),
theano.tensor._shared(data_t[-1000:, :], borrow=True)
)
)