首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用borrow=True创建Theano共享变量时内存不足

使用borrow=True创建Theano共享变量时内存不足
EN

Stack Overflow用户
提问于 2015-04-15 11:59:10
回答 1查看 3.1K关注 0票数 9

我正在尝试将一个非常大的数据集(在ndarray中的内存为28 of )分配到theano共享变量中,使用borrow=True来避免内存的复制。为了做到这一点,我使用以下函数:

代码语言:javascript
复制
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()将它们转储到磁盘中):

代码语言:javascript
复制
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)上工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-15 12:41:20

不使用theano.shared,可以使用theano.tensor._shared强制将数据分配到CPU内存中。固定代码的结果如下:

代码语言:javascript
复制
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)
        )
    )
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29649623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档