小编Chi*_*tak的帖子

如何在使用具有张量流后端的Keras时控制内存?

我创建了一个初始化keras.models.Sequential模型的包装类,它有几种启动培训过程和监控进度的方法.我在我的main文件中实例化这个类并执行培训过程.相当普通的东西.

我的问题是:

如何释放所有分配的GPU内存tensorflow.我试了以下没有运气:

import keras.backend.tensorflow_backend as K
with K.get_session() as sess:
    K.set_session(sess)
    import tensorflow as tf
    from neural_net import NeuralNet
    with tf.device('/gpu:0'):
        nn = NeuralNet('config', train_db_path, test_db_path)
        nn.train(1000, 1)
        print 'Done'
    K._SESSION.close()
    K.set_session(None)
Run Code Online (Sandbox Code Playgroud)

即使会话已关闭并重置为None,nvidia-smi也不会反映内存使用量的任何减少.有任何想法吗?

理念

__exit__方法添加到我的NeuralNet类并将其实例化为:

with NeuralNet() as nn:
    nn.train(1000, 1)
Run Code Online (Sandbox Code Playgroud)

我应该如何在这种方法中释放keras模型的资源?

测试环境

我在带有3个GTX 960 GPU的Ubuntu 14.04上使用iPython Notebook.

参考:

  1. https://github.com/fchollet/keras/issues/2102
  2. https://groups.google.com/forum/#!topic/keras-users/MFUEY9P1sc8

python gpu deep-learning keras tensorflow

8
推荐指数
1
解决办法
5116
查看次数

更快地计算图像(M,N)和模板(3,3)之间的平方差之和以进行模板匹配?

我正在实现这里概述的纹理合成算法.为此,我需要计算平方差的和,这是一个度量,用于估计template不同位置之间的误差image.我的工作实施缓慢如下:

total_weight = valid_mask.sum()  
for i in xrange(input_image.shape[0]):  
    for j in xrange(input_image.shape[1]):  
        sample = image[i:i + window, j:j + window]  
        dist = (template - sample) ** 2  
        ssd[i, j] = (dist * valid_mask).sum() / total_weight  
Run Code Online (Sandbox Code Playgroud)

这里,total_weight只是为了规范化.有些像素的强度未知,因此我用它valid_mask来掩盖它们.这个嵌套循环位于2个循环内部,因此这是4个嵌套循环,这显然是性能杀手!

有没有办法让我在NumPy或Python中更快,这个嵌套循环的替代品?矢量化是可能的吗?我需要在上班(3, 3)的部分image用(3,3)的template.

我随后将在Cython中实现这一点,所以我可以更快地使用NumPy工作,更好的是.

你可以在这里找到完整的代码.第62-67行引用了这里.

谢谢,
Chintak

python numpy image-processing vectorization scipy

6
推荐指数
2
解决办法
3461
查看次数