如何从numpy数组中逐渐释放内存?

2024-06-01 08:37:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我处于这样一种情况,我的内存不断达到极限(我有20克内存)。不知怎么的,我设法把这个巨大的数组放入内存并继续我的进程。现在需要将数据保存到磁盘上。我需要以leveldb格式保存它。在

这是负责将规范化数据保存到磁盘上的代码段:

print 'Outputting training data'

leveldb_file = dir_des + 'svhn_train_leveldb_normalized'
batch_size = size_train

# create the leveldb file
db = leveldb.LevelDB(leveldb_file)
batch = leveldb.WriteBatch()
datum = caffe_pb2.Datum()

for i in range(size_train):
    if i % 1000 == 0:
        print i

    # save in datum
    datum = caffe.io.array_to_datum(data_train[i], label_train[i])
    keystr = '{:0>5d}'.format(i)
    batch.Put( keystr, datum.SerializeToString() )

    # write batch
    if(i + 1) % batch_size == 0:
        db.Write(batch, sync=True)
        batch = leveldb.WriteBatch()
        print (i + 1)

# write last batch
if (i+1) % batch_size != 0:
    db.Write(batch, sync=True)
    print 'last batch'
    print (i + 1)

现在,我的问题是,在保存到磁盘时,我几乎达到了我的极限(604k项中需要保存到磁盘上的604k项中有495k项)。在

为了解决这个问题,我想在写完每一批之后,我会从numpy数组(data_train)中释放相应的内存,因为leveldb似乎是以事务方式写入数据的,在所有数据都写入之前,它们不会被刷新到磁盘上!在

我的第二个想法是以某种方式使写操作成为非事务性的,当使用the db.Write编写每个批时,它实际上会将内容保存到磁盘上。在

我不知道这些想法是否适用。在


Tags: 数据内存dbdatasizeifbatchtrain