我正在使用在Lua中使用Torch进行图像处理的CNN模型(AlexNet)。我正在修改Torch starter code。
我的问题是我使用18个频道而不是3个频道制作图像来训练模型,并且为了将这些图像发送到GPU,它比发送图像时需要大约20个(每批2.13秒)。三个通道(每批0.14s)。我还试着看看将4个通道的图像发送到GPU需要多长时间。我看到,一旦通道数量增加到3个以上的通道,时间就增加了大约20倍。例如,即使对于具有4个通道的图像,每批次也需要大约2秒,这比运行3个通道图像大约多19倍。
我想知道是否有一个错误导致花费这么多时间,如果没有任何错误,如果有任何方法我可以减少这个运行时间?
答案 0 :(得分:0)
这是一个不会消失的问题。这是CPU到GPU缓冲的带宽问题。您已经增加了必须通过总线发送的数据量。
您要做的事情的本质是在模型中包含先前的帧。如果这是你想要完成的,那么还有另一种方法。
如果培训批次不是随机选择的堆叠图像,则培训批次是常规图像,但都是按时间顺序排列。
在第二种情况下,您只需3个频道即可发送图像,但图像不会出现故障。
让我们探讨一下假设。
首先,您仍然可以通过更改每个批次的开始时间和结束时间来创建随机抽样,并随机选择要选择的视频。
其次,你可以使用[批量,高度,重量,通道]张量在GPU上生成一个新的张量
[ batch[1:], height, width, channel] - [ batch[:-1], height, width, channel]
and assign it to diffTensor
然后连接以下张量
origTensor [ batch[5:-0], height, width, channel]
diffTensor [ batch[5:-0], height, width, channel]
diffTensor [ batch[4:-1], height, width, channel]
diffTensor [ batch[3:-2], height, width, channel]
diffTensor [ batch[2:-3], height, width, channel]
diffTensor [ batch[1:-4], height, width, channel]
diffTensor [ batch[0:-5], height, width, channel]
如果你想要5“回头看”
这会实现什么?好吧,如果您向GPU发送了100张图像,那么该网络将能够生成95个图像+差异图像,网络价格只发送100张图像,而不是您尝试发送95张图像+差异图像,其中包含5层图像每个你必须支付发送500张图像的网络价格。基本上,您可以通过 x5
来降低网络成本