在 Keras 中,使用Flatten()层会保留批量大小。例如,如果 Flatten 的输入形状为(32, 100, 100),则KerasFlatten 的输出为(32, 10000),但在 PyTorch 中为320000。为什么会这样呢?
我正在 PyTorch 中实现基于 U-Net 的架构。在火车时间,我有大小不一的补丁256x256。但是在测试时,我有全高清图像 ( 1920x1080)。这会在跳过连接期间导致问题。
1920x10803 次下采样给出240x135. 如果我再下采样一次,分辨率就会变成120x68上采样时给出的240x136. 现在,我无法连接这两个特征图。我该如何解决这个问题?
PS:我认为这是一个相当普遍的问题,但我没有得到任何解决方案,甚至在网络上的任何地方都没有提到这个问题。我错过了什么吗?
我有一个 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:我也想找到左边的第一个非零元素。我想,找到正确点的解决方案可以很容易地找到左点。
我正在尝试分析我的 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) 我正在运行使用 pytorch 和 GPU 的第三方代码的修改版本。我通过改变配置多次运行同一个模型,这是我在 python 中执行的操作,即我有一个包装器 python 文件,它使用不同的配置调用模型。out-of-memory但我在运行第二个或第三个模型时遇到错误。也就是说,模型可以正常运行一次,不会出现任何内存问题。因此,如果我在运行第一个模型后结束代码,然后重新启动第二个模型,则代码可以正常工作。然而,如果我在 python 中链接模型,我就会遇到out-of-memory问题。
我怀疑第三方代码中存在一些内存泄漏。在谷歌搜索上,我发现了两个建议。一种是调用torch.cuda.empty_cache(),另一种是使用 显式删除张量del tensor_name。然而,empty_cache()命令并不能帮助释放整个内存,而且第三方代码有太多张量,我无法单独删除所有张量。有没有办法在Python代码本身中清除当前Python程序使用的整个GPU内存?
我正在尝试重建我知道值是浮点像素位置的图像。我正在使用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) 我正在尝试使用 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
我有两个网络,我正在对它们进行分析以查看哪些操作占用了大部分时间。我注意到不同网络的操作是不同的CUDA time avg。aten::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) 很多时候,当我这样做时git pull,它会从服务器下载所有更改,然后给我一个错误Your local changes to the following files would be overwritten by merge:。因此,我要么隐藏或删除列出的文件中的更改。然后我必须git pull再次输入用户名和密码。由于 git 在我的第一次尝试中会从服务器下载更改,因此是否可以使用某些命令直接重用它?我不想再次输入用户名和密码。
PS:这并不是将我的密码存储在 git 缓存文件等中。我第一次输入密码没问题。但如果第一次出现错误,我想跳过第二次再次输入。