小编Nag*_*S N的帖子

PyTorch 展平不能保持批量大小

在 Keras 中,使用Flatten()层会保留批量大小。例如,如果 Flatten 的输入形状为(32, 100, 100),则KerasFlatten 的输出为(32, 10000),但在 PyTorch 中为320000。为什么会这样呢?

python pytorch

7
推荐指数
1
解决办法
3512
查看次数

如何在 Unet 架构 PyTorch 中处理奇数分辨率

我正在 PyTorch 中实现基于 U-Net 的架构。在火车时间,我有大小不一的补丁256x256。但是在测试时,我有全高清图像 ( 1920x1080)。这会在跳过连接期间导致问题。

1920x10803 次下采样给出240x135. 如果我再下采样一次,分辨率就会变成120x68上采样时给出的240x136. 现在,我无法连接这两个特征图。我该如何解决这个问题?

PS:我认为这是一个相当普遍的问题,但我没有得到任何解决方案,甚至在网络上的任何地方都没有提到这个问题。我错过了什么吗?

python image-processing hourglass deep-learning pytorch

7
推荐指数
1
解决办法
296
查看次数

在python中找到给定元素右侧的第一个非零元素的索引

我有一个 2D numpy.ndarray。给定位置列表,我想找到同一行中给定元素右侧的第一个非零元素的位置。是否可以将其矢量化?我有一个巨大的数组,循环花费了太多时间。

例如:

matrix = numpy.array([
    [1, 0, 0, 1, 1], 
    [1, 1, 0, 0, 1], 
    [1, 0, 0, 0, 1], 
    [1, 1, 1, 1, 1], 
    [1, 0, 0, 0, 1]
])
query = numpy.array([[0,2], [2,1], [1,3], [0,1]])
Run Code Online (Sandbox Code Playgroud)

预期结果:

>> [[0,3], [2,4], [1,4], [0,3]]
Run Code Online (Sandbox Code Playgroud)

目前我正在使用 for 循环执行此操作,如下所示

for query_point in query:
    y, x = query_point
    result_point = numpy.min(numpy.argwhere(self.matrix[y, x + 1:] == 1)) + x + 1
    print(f'{y}, {result_point}')
Run Code Online (Sandbox Code Playgroud)

PS:我也想找到左边的第一个非零元素。我想,找到正确点的解决方案可以很容易地找到左点。

python numpy vectorization numpy-ndarray

7
推荐指数
1
解决办法
357
查看次数

pytorch profiler 输出中的 cudaLaunchKernel 是什么

我正在尝试分析我的 pytorch 网络以了解瓶颈是什么。我注意到有一个名为的操作cudaLaunchKernel占用了大部分时间。这个答案说,使用 cuda 完成的每个操作都会调用它。如果假设我用 C++ 或任何其他语言实现这个网络,是否可以减少这个时间?

基本上,我问这个开销是否是因为我已经在 python 中实现了我的网络,或者这个开销是否始终存在并且无法用任何语言进行优化?

完整的分析器输出:

-------------------------------------------------------  ------------  ------------  ------------  ------------  ------------  ------------  ------------  ------------  ------------  ------------  
                                                   Name    Self CPU %      Self CPU   CPU total %     CPU total  CPU time avg     Self CUDA   Self CUDA %    CUDA total  CUDA time avg    # of Calls  
-------------------------------------------------------  ------------  ------------  ------------  ------------  ------------  ------------  ------------  ------------  ------------  ------------  
                                       cudaLaunchKernel        99.80%     933.739ms        99.80%     933.739ms      20.750ms       0.000us         0.00%       0.000us       0.000us            45  
                                        model_inference         0.05%     453.000us       100.00%     935.567ms …
Run Code Online (Sandbox Code Playgroud)

python profiling pytorch

7
推荐指数
1
解决办法
1767
查看次数

在不退出python的情况下清除当前python代码中pytorch使用的所有GPU内存

我正在运行使用 pytorch 和 GPU 的第三方代码的修改版本。我通过改变配置多次运行同一个模型,这是我在 python 中执行的操作,即我有一个包装器 python 文件,它使用不同的配置调用模型。out-of-memory但我在运行第二个或第三个模型时遇到错误。也就是说,模型可以正常运行一次,不会出现任何内存问题。因此,如果我在运行第一个模型后结束代码,然后重新启动第二个模型,则代码可以正常工作。然而,如果我在 python 中链接模型,我就会遇到out-of-memory问题。

我怀疑第三方代码中存在一些内存泄漏。在谷歌搜索上,我发现了两个建议。一种是调用torch.cuda.empty_cache(),另一种是使用 显式删除张量del tensor_name。然而,empty_cache()命令并不能帮助释放整个内存,而且第三方代码有太多张量,我无法单独删除所有张量。有没有办法在Python代码本身中清除当前Python程序使用的整个GPU内存?

python memory-leaks memory-management out-of-memory pytorch

7
推荐指数
1
解决办法
305
查看次数

将权重传递给 scipy.interpolate.griddata() 函数

我正在尝试重建我知道值是浮点像素位置的图像。我正在使用scipy.interpolate.griddata()插入每个整数位置的值并重建图像。但是,我也想为我拥有的所有已知点提供权重。是否可以在griddata(). 如果是,我该怎么做?

import numpy
import scipy.interpolate
image = numpy.array([[246,  50, 101], [116,   1, 113], [187, 110,  64]])
depth = numpy.array([[5, 3, 5], [20, 25, 3], [45, 23, 11]])
height, width = image.shape
iy = numpy.array([[1.5, 0.2, 2.3], [1.6, 0.1, 2.8], [2.4, 2.6, 2.5]])
ix = numpy.array([[0.1, 2.1, 1.7], [1.2, 2.3, 0.7], [0.1, 1.9, 2.7]])
indices = numpy.stack([ix, it], axis=2)
y1d = numpy.array(range(height))
x1d = numpy.array(range(width))
x2d, y2d = numpy.meshgrid(x1d, y1d)

indices_flat = numpy.reshape(indices, newshape=(height*width, 2))
image_flat …
Run Code Online (Sandbox Code Playgroud)

python interpolation scipy weighted-average

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

RuntimeError:当启用急切执行时,传递给 Optimizer.compute_gradients 的 `loss` 应该是一个函数。使用 Tensorflow 1.15

我正在尝试使用 tensorflow 1.15 训练模型并启用急切执行。对于火车损失,我正在使用

train loss = mse_loss*args.lmbda + bits_per_pixel_loss
Run Code Online (Sandbox Code Playgroud)

我已经定义了优化器如下

main_optimiser = tf.train.AdamOptimiser(learning_rate=1e-3)
Run Code Online (Sandbox Code Playgroud)

到这里代码工作正常错误出现在优化的最小部分

main_step = main_optimiser.minimise(train_loss, global_step=step)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

RuntimeError: `loss` passed to Optimizer.compute_gradients should be a function when eager execution is enabled.
Run Code Online (Sandbox Code Playgroud)

因此,当我在函数内部计算 train_loss 时说,loss_computer在 train 函数内部构建然后使用

main_step =main_optimiser.minimise(loss_computer, global_step=step)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

AttributeError: 'NoneType' object has no attribute 'dtype'.
Run Code Online (Sandbox Code Playgroud)

如何在启用 Eager Execution 的情况下训练模型?如果我需要澄清任何事情,请告诉我。非常感谢任何帮助,谢谢!

python optimization training-data deep-learning tensorflow1.15

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

Pytorch 分析器显示两个不同网络的卷积平均执行时间不同

我有两个网络,我正在对它们进行分析以查看哪些操作占用了大部分时间。我注意到不同网络的操作是不同的CUDA time avgaten::conv2d这也增加了一个数量级。在我的第一个网络中,它是22us,而对于第二个网络,它是3ms。我的第一个网络具有最多带有512滤波器的卷积层,但第二个网络仅具有最多192滤波器。因此,我预计第二个网络中卷积运算所花费的平均时间应该更短。相反,它高出 3 个数量级。为什么会出现这种情况呢?

完整的分析输出如下

网络1:

                                                  Name    Self CPU %      Self CPU   CPU total %     CPU total  CPU time avg     Self CUDA   Self CUDA %    CUDA total  CUDA time avg    # of Calls  

                                      cudaLaunchKernel        99.80%     933.739ms        99.80%     933.739ms      20.750ms       0.000us         0.00%       0.000us       0.000us            45  
                                       model_inference         0.05%     453.000us       100.00%     935.567ms     935.567ms       0.000us         0.00%     195.000us     195.000us             1  
                               aten::cudnn_convolution         0.04%     388.000us        99.84%     934.047ms     103.783ms     195.000us       100.00%     195.000us      21.667us             9  
                                    aten::_convolution …
Run Code Online (Sandbox Code Playgroud)

profiling pytorch

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

属性错误:模块“flax”没有属性“nn”

我正在尝试运行RegNeRF,它需要亚麻。在安装最新版本的 flax==0.6.0 时,我收到一条错误消息,指出 flax 没有属性 optim。这个答案建议将亚麻降级到 0.5.1。这样做后,现在我收到错误AttributeError: module 'flax' has no attribute 'nn'

我在网上找不到此错误的任何解决方案。任何帮助表示赞赏。

我使用的是ubuntu 20.04

python jax flax

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

删除对跟踪文件的更改后,重复 git pull 无需密码

很多时候,当我这样做时git pull,它会从服务器下载所有更改,然后给我一个错误Your local changes to the following files would be overwritten by merge:。因此,我要么隐藏或删除列出的文件中的更改。然后我必须git pull再次输入用户名和密码。由于 git 在我的第一次尝试中会从服务器下载更改,因此是否可以使用某些命令直接重用它?我不想再次输入用户名和密码。

PS:这并不是将我的密码存储在 git 缓存文件等中。我第一次输入密码没问题。但如果第一次出现错误,我想跳过第二次再次输入。

git

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