Day232:mxnet在多显卡训练u-net中的坑

其实这也是自己之前跑带有triplet loss代码的时候 , 遇到的问题 , 当使用多块GPU的时候 , 就会出现将一个Batch中的样本平分到多个GPU上 , 导致出现广播的问题 , 具体见我的文章:
Day199:Pythonzh中的广播机制:
背景:mxnet框架下u-net多分类 , 双卡1080服务器 , ubuntu系统
错误类型:
Day232:mxnet在多显卡训练u-net中的坑文章插图
截图不完整 , 大致的意思就是需要的数据类型是[8,3,256,256] , 提供的源数据类型是[4,3,256,256],最开始的8是因为设置的batch_size=8 , 那4嘞 , 咋来的?最开始怀疑数据格式不对 , 检查了3+遍证明没问题 , 又怀疑是迭代器造成的 , 检查了7+遍 , 在网上找别人的代码 , 也是没发现原因 。 7.3中午出现的bug晚上下班还没有解决 , 于是乎 , 我超级不淡定了 , 晚上回家接着看 , 还找来搞医疗方向的朋友帮我看 , 虽然人家搞过一段时间的深度学习 , 但是用的框架是caffe , 搞到零点 , 愣愣的是没解决 , 好吧 , 看来还是不够认真 , 于是乎 , 第二天接着找资料~挠头~找资料~挠头,在头发快被我薅完之际 , 决定厚着脸皮请教我的冯老师(因为总是麻烦她) , 她看了bug就说应该是两张显卡平分了一个batch , 虽然batch_size=8 , 但是平分到一张显卡上就是4 , 这跟网络模型设置不一致 。 纳尼~还能这样
【Day232:mxnet在多显卡训练u-net中的坑】改进就是把Reshape(batch_size,channels,w,h)改成Reshape(-1,channels,w,h) , 这样显卡自动计算 , 保证原来的batch_size不变,ctx = [cpu(0),cpu(1)]
不要放过任何一个小细节
原文: