如何避免Python被杀:9创建这些数组?

时间:2016-05-22 17:20:15

标签: python numpy

以下是当前代码:

def load_data():
    files = glob.glob('../manga-resized/sliced_images/*.png')
    L = []
    target_dist = []
    i = 0
    for fl in files:
        image = color.rgb2lab(io.imread(fl))
        L.append(image[:,:,:1])
        ab = np.vstack(image[:,:,1:])
        #print 'ab shape: ',ab.shape
        #print 'KNN prediction shape: ',KNN.predict_proba(ab).shape
        target_dist.append(KNN.predict_proba(ab))
        i+=1
        print i
    print "finished creating L and target_dist"
    X = np.asarray(L)
    y = np.asarray(target_dist)
    #  remember to .transpose these later to 0,3,1,2
    print 'X shape: ',X.shape,'y shape: ',y.shape
    return X,y

目前我在i = 391之后收到Killed:9消息。我的电脑有16GB的RAM,但我觉得我在某种程度上做得非常低效。最终我希望用近100万个文件来做到这一点,更不用说400了。我觉得这应该是可能的,因为我知道人们用大于400个文件数据集进行训练。那么我怎么搞砸了?是否有一些内存泄漏?我以为那些在python中不可能发生。被杀的任何其他原因:9错误?

感谢

编辑:这是ulimit -a

的结果
Alexs-MBP-6:manga-learn alex$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 256
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited

这是打印内存使用量的输出 - 在文件221之后。

https://bpaste.net/show/26109a193e43。很明显,可用内存正在减少,但是当它被杀死时仍然存在:9

编辑2: 我在其他地方看到np.asarray非常低效。另外,当我从配方中取出这部分时,它确实很好并且不会被杀死。我已经看过np.fromiter等替代品,但那些只覆盖1D数组 - 而不是需要返回的两个4维数组,X和y。有谁知道正确的numpy方式来填充这些数组?

1 个答案:

答案 0 :(得分:0)

信号9是外部终止信号。

您可以在资源受限的环境中运行此ff,例如,ulimit -a将处理时间限制为1秒。在我的Mac上尝试这个,它礼貌地报告" Cputime限制超过&#34 ;;我不知道它会在linux中报告什么。

在运行程序的环境中从命令行尝试point_distance以查看是否有任何内容。