u-net 架构中有一个著名的技巧,就是使用自定义权重图来提高准确性。下面是它的详细信息:
现在,通过在这里和其他多个地方询问,我了解了 2 种方法。我想知道哪个是正确的,或者还有其他更正确的正确方法吗?
首先是torch.nn.Functional
在训练循环中使用方法:
loss = torch.nn.functional.cross_entropy(output, target, w)
其中 w 将是计算出的自定义重量。
二是reduction='none'
在训练循环外调用损失函数时
使用criterion = torch.nn.CrossEntropy(reduction='none')
然后在训练循环中乘以自定义权重:
gt # Ground truth, format torch.long
pd # Network output
W # per-element weighting based on the distance map from UNet
loss = criterion(pd, gt)
loss = W*loss # Ensure that weights are scaled appropriately
loss = torch.sum(loss.flatten(start_dim=1), axis=0) # Sums the loss per image
loss = torch.mean(loss) # Average across a batch
Run Code Online (Sandbox Code Playgroud)
现在,我有点困惑哪个是正确的,或者还有其他方法,还是两者都是正确的?
我正在尝试使用 google 音译[1] 将用英语书写的印地语单词转换为印地语。例如-
输入文本- Main sahi hun。
必填文本 - ??? ??????
我想将输入字符串传递给 api 并需要印地语的必需文本。我正在使用 google 音译,但因为它很久以前就被弃用了,所以找不到合适的方法在 python 上执行它,因为目前他们提供的示例是在 javascript 中,对初学者不太友好。怎么做?
我正在尝试通过在规则间隔的 100*100 网格上采样控制点来实现弹性变形,其中 \xcf\x83 = 20 以及图像的双线性变体和掩模的最近邻。\n我找到了DeepMind 的 TensorFlow 实现。 \n到目前为止,我使用下面的实现作为 lambda 转换 -
\ndef elastic_transform(image, alpha=1000, sigma=20, spline_order=1, mode=\'nearest\', random_state=np.random):\n"""Elastic deformation of image as described in [Simard2003]_.\n.. [Simard2003] Simard, Steinkraus and Platt, "Best Practices for\n Convolutional Neural Networks applied to Visual Document Analysis", in\n Proc. of the International Conference on Document Analysis and\n Recognition, 2003.\n"""\n#assert image.ndim == 3\nimage = np.array(image)\nassert image.ndim == 3\nshape = image.shape[:2]\n\ndx = gaussian_filter((random_state.rand(*shape) * 2 - 1),\n sigma, mode="constant", cval=0) * alpha\ndy = …
Run Code Online (Sandbox Code Playgroud) image-processing python-3.x deep-learning tensorflow pytorch
我推测我在使用 PyTorch 框架训练 Conv 网络时遇到了 GPU 内存泄漏。下图
为了解决这个问题,我添加了 -
os.environ['CUDA_LAUNCH_BLOCKING'] = "1"
但由于我当时使用的是torch.nn.DataParallel
,所以我希望我的代码能够利用所有 GPU,但现在它只利用GPU:1
.
在使用之前os.environ['CUDA_LAUNCH_BLOCKING'] = "1"
,GPU 利用率低于(同样糟糕)-
经过进一步挖掘,我发现,当我们使用 时torch.nn.DataParallel
,我们不应该使用CUDA_LAUNCH_BLOCKING'
,因为它会使网络陷入某种死锁机制。所以,现在我又回到了 GPU 内存问题,因为我认为我的代码没有利用它在没有设置的情况下显示的那么多内存CUDA_LAUNCH_BLOCKING=1
。
我要使用的代码torch.nn.DataParallel
-
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
if torch.cuda.device_count() > 1:
print("Let's use", torch.cuda.device_count(), "GPUs!")
# dim = 0 [30, xxx] -> [10, ...], [10, ...], [10, ...] on 3 GPUs
model_transfer = nn.DataParallel(model_transfer.cuda(),device_ids=range(torch.cuda.device_count()))
model_transfer.to(device)
Run Code Online (Sandbox Code Playgroud)
如何解决GPU内存问题?编辑:最少的代码 -
image_dataset = datasets.ImageFolder(train_dir_path,transform = …
Run Code Online (Sandbox Code Playgroud) parallel-processing gpu deep-learning conv-neural-network pytorch