小编Moh*_*mba的帖子

PyTorch 中的权重标准化

本文介绍了一种重要的权重归一化技术,并且很早就被包含在 PyTorch 中,如下:

    from torch.nn.utils import weight_norm
    weight_norm(nn.Conv2d(in_channles, out_channels))
Run Code Online (Sandbox Code Playgroud)

从我了解到的文档weight_norm中,每次传递之前都会重新参数化forward()。但我不确定当所有内容都在内部运行with torch.no_grad()并且模型设置为eval()模式时,这种重新参数化是否也会在推理过程中发生。

有人可以帮我知道是否weight_norm仅在训练期间或在上述推理模式期间有效吗?

谢谢

python pytorch

6
推荐指数
1
解决办法
1万
查看次数

在Google Colab中使用yml文件创建conda环境

我有一个environment.yml文件,我在本地系统上使用它,如下所示,

conda env create -f environment.yml
Run Code Online (Sandbox Code Playgroud)

但我现在已经转向 Google Colab 并使用此链接将 Conda 安装到其中。

现在,我如何像以前在本地系统上那样使用 .yml 文件在 Colab 内创建新的 conda 环境?

conda google-colaboratory

6
推荐指数
0
解决办法
1782
查看次数

Pytorch nn.function.interpolate 使用哪些信息?

img在 PyTorch 中有一个大小的张量bx2xhxw,想使用 对其进行上采样torch.nn.functional.interpolate。但是,在插值时,我不希望通道 1 使用通道 2 中的信息。为此,我应该这样做,

img2 = torch.rand(b,2,2*h,2*w) # create a random torch tensor.
img2[:,0,:,:] = nn.functional.interpolate(img[:,0,:,:], [2*h,2*w], mode='bilinear', align_corners=True)
img2[:,1,:,:] = nn.functional.interpolate(img[:,1,:,:], [2*h,2*w], mode='bilinear', align_corners=True)
img=img2
Run Code Online (Sandbox Code Playgroud)

或者简单地使用

img = nn.functional.interpolate(img, [2*h,2*w], mode='bilinear', align_corners=True)
Run Code Online (Sandbox Code Playgroud)

将解决我的目的。

python interpolation pytorch

6
推荐指数
1
解决办法
9325
查看次数

在 NumPy 中创建 2D 汉宁、汉明、布莱克​​曼、高斯窗

我对在 NumPy 中创建 2D hanning、hamming、Blackman 等窗口感兴趣。我知道 NumPy 中存在一维版本的现成函数,例如np.blackman(51)np.hamming(51)np.kaiser(51)np.hanning(51)等。

如何创建它们的 2D 版本?我不确定以下解决方案是否是正确的方法。

window1d = np.blackman(51)
window2d = np.sqrt(np.outer(window1d,window1d)) 
Run Code Online (Sandbox Code Playgroud)

- -编辑

令人担忧的是,np.sqrt只期望正值,而np.outer(window1d,window1d)肯定会有一些负值。一种解决方案是放弃np.sqrt

有什么建议如何将这些 1d 函数扩展到 2d 吗?

signal-processing numpy fft dft

5
推荐指数
1
解决办法
5029
查看次数

在 PyTorch 中设置随机权重平均的学习率

以下是 Pytorch 中随机权重平均的一个小工作代码,取自此处

loader, optimizer, model, loss_fn = ...
swa_model = torch.optim.swa_utils.AveragedModel(model)
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=300)
swa_start = 160
swa_scheduler = SWALR(optimizer, swa_lr=0.05)

for epoch in range(300):
    for input, target in loader:
        optimizer.zero_grad()
        loss_fn(model(input), target).backward()
        optimizer.step()
        if epoch > swa_start:
            swa_model.update_parameters(model)
            swa_scheduler.step()
        else:
            scheduler.step()

    # Update bn statistics for the swa_model at the end
    torch.optim.swa_utils.update_bn(loader, swa_model)
    # Use swa_model to make predictions on test data
    preds = swa_model(test_input)
Run Code Online (Sandbox Code Playgroud)

在此代码中,第 160 个纪元之后,swa_scheduler使用 代替通常的scheduler。意味着什么swa_lr?文件 …

python optimization machine-learning pytorch

5
推荐指数
1
解决办法
2819
查看次数

如何决定“kaiming_normal”初始化使用哪种模式

我已经阅读了几个使用nn.init.kaiming_normal_()PyTorch进行层初始化的代码。某些代码使用fan in默认模式。在众多示例中,可以在此处找到一个示例并显示如下。

init.kaiming_normal(m.weight.data, a=0, mode='fan_in')
Run Code Online (Sandbox Code Playgroud)

但是,有时我会看到人们使用此处和下图所示的fan out模式。

if isinstance(m, nn.Conv2d):
                nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')

Run Code Online (Sandbox Code Playgroud)

有人可以给我一些指导方针或提示来帮助我决定选择哪种模式吗?此外,我正在使用 PyTorch 进行图像超分辨率和去噪任务,哪种模式更有益。

initialization pytorch

4
推荐指数
1
解决办法
1081
查看次数

PyTorch 中降低 Adam 优化器学习率的首选方法

我一直在看到使用 Adam 优化器的代码。他们降低学习率的方式如下:


    optimizer = torch.optim.Adam(net.parameters(),lr=0.01)
    (training...
    optimizer.step()...)

    if iteration >= some_threshold:
        for param_group in optimizer.param_groups:
            param_group['lr'] = 0.001

Run Code Online (Sandbox Code Playgroud)

我认为所有参数的学习率都相同。那么为什么要迭代 param_groups 并为每个参数单独设置学习率呢?

下面的方法不是更快并且具有相同的效果吗?


    optimizer = torch.optim.Adam(net.parameters(),lr=0.01)
    scheduler = MultiStepLR(optimizer, milestones=[some_threshold], gamma=0.1)
    (training...
    optimizer.step()
    scheduler.step())

Run Code Online (Sandbox Code Playgroud)

谢谢

pytorch

4
推荐指数
1
解决办法
2380
查看次数

在 PyTorch 中对 CPU(而非 GPU)上的深度模型进行基准测试的最佳实践?

我不太确定如何在 PyTorch 中测量 CPU 上深度模型的执行时间,仅用于推理。我在这里列出了其中一些,但它们可能不准确。如果需要,请更正它们,并在需要时提及更多。我在 PyTorch 版本 1.3.1 和 Intel Xeon 上运行,具有 64GB RAM、3.5GHz 处理器和 8 个内核。

  1. 我们应该使用time.time()?

    • 我知道对于 GPU 来说,这是一个非常糟糕的主意。对于 GPU 我做如下
with torch.no_grad():
    wTime = 0
    start = torch.cuda.Event(enable_timing=True)
    end = torch.cuda.Event(enable_timing=True)
    out = model(input) # JUST FOR WARMUP

    start.record()
    for i in range(200):
        input = torch.rand(1,1,2048,2048).to(device)

#        beg = time.time() DO NOT USE FOR GPU

        got = net_amplifier(low,for_amplifier)

#        wTime+=time.time()-beg DO NOT USE FOR GPU
    end.record()
    torch.cuda.synchronize()

    print('execution time in MILLISECONDS: {}'.format(start.elapsed_time(end)/200))

Run Code Online (Sandbox Code Playgroud)

对于此代码执行是在 GPU 上完成的。如果我必须在 …

python pytorch

3
推荐指数
1
解决办法
1808
查看次数