相关疑难解决方法(0)

如何在变量中保存traceback/sys.exc_info()值?

我想将错误的名称和回溯详细信息保存到变量中.这是我的尝试.

import sys
try:
    try:
        print x
    except Exception, ex:
        raise NameError
except Exception, er:
    print "0", sys.exc_info()[0]
    print "1", sys.exc_info()[1]
    print "2", sys.exc_info()[2]
Run Code Online (Sandbox Code Playgroud)

输出:

0 <type 'exceptions.NameError'>
1 
2 <traceback object at 0xbd5fc8>
Run Code Online (Sandbox Code Playgroud)

期望的输出:

0 NameError
1
2 Traceback (most recent call last):
  File "exception.py", line 6, in <module>
    raise NameError
Run Code Online (Sandbox Code Playgroud)

PS我知道这可以使用traceback模块轻松完成,但我想知道sys.exc_info()[2]对象的用法.

python exception-handling

111
推荐指数
4
解决办法
9万
查看次数

如何在PyTorch中清除Cuda内存

我正在尝试获取已经训练过的神经网络的输出。输入是大小为300x300的图像。我使用的批量大小为1,但是CUDA error: out of memory成功获取25张图像的输出后,仍然出现错误。

我在网上搜索了一些解决方案并遇到了torch.cuda.empty_cache()。但这似乎仍不能解决问题。

这是我正在使用的代码。

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

train_x = torch.tensor(train_x, dtype=torch.float32).view(-1, 1, 300, 300)
train_x = train_x.to(device)
dataloader = torch.utils.data.DataLoader(train_x, batch_size=1, shuffle=False)

right = []
for i, left in enumerate(dataloader):
    print(i)
    temp = model(left).view(-1, 1, 300, 300)
    right.append(temp.to('cpu'))
    del temp
    torch.cuda.empty_cache()
Run Code Online (Sandbox Code Playgroud)

这种for loop运行给内存错误之前为25次,每次时间。

每次,我都会在网络中发送一个新图像进行计算。因此,在循环中的每次迭代之后,我实际上都不需要将先前的计算结果存储在GPU中。有什么办法可以做到这一点?

任何帮助将不胜感激。谢谢。

python pytorch

7
推荐指数
2
解决办法
5137
查看次数

标签 统计

python ×2

exception-handling ×1

pytorch ×1