标题说明了一切。pytorch中是否有一个方便的函数可以执行类似的操作(通过梯形规则对np.trapz(y, x)
点进行积分)?x
y
我有两个 PyTorch 张量:A
和B
,形状均为(b, c, 3)
。我想对C
和A
进行外积B
,得到的形状是(b, c, 3, 3)
,并用加法代替乘法运算。我该怎么做呢?
我是 keras 的初学者,我有一个 pytorch 代码,我需要将其更改为 keras,但我无法理解其中的某些部分。特别是我在输出形状的大小方面遇到问题。的形状image
是 (:, 3,32,32) ,第一个维度image
是批次的大小。现在,我的问题是:这条线的作用是什么以及输出形状是什么:
image_yuv_ch = image[:, channel, :, :].unsqueeze_(1)
Run Code Online (Sandbox Code Playgroud)
它在位置 1 处添加了一个维度?输出形状是什么?:( 过滤器的大小是 (64,8,8) 然后我们有,这是否意味着isfilters.unsqueez_(1)
的新形状?这条线的作用是什么? 它与 keras 中的 conv2d 相同吗?它的输出张量的形状?我也无法理解视图的作用?我知道它试图以新的形状显示张量,但在下面的代码中我无法理解每个 或 后的输出形状。您能告诉我什么吗是每条线的输出形状吗?先谢谢你了。filters
(64,1,8,8)
image_conv = F.conv2d(image_yuv_ch, filters, stride=8)
unsqueez_
permute
view
import torch.nn.functional as F
def apply_conv(self, image, filter_type: str):
if filter_type == 'dct':
filters = self.dct_conv_weights
elif filter_type == 'idct':
filters = self.idct_conv_weights
else:
raise('Unknown filter_type value.')
image_conv_channels = []
for channel in range(image.shape[1]):
image_yuv_ch = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 torch.dist 在 Pytorch 中获取欧几里得距离,如下所示:
torch.dist(vector1, vector2, 1)
Run Code Online (Sandbox Code Playgroud)
如果我使用“1”作为第三个参数,我将得到曼哈顿距离,结果是正确的,但我试图获取欧几里德距离和无限距离,结果不正确。我在第三个参数上尝试了很多不同的数字,但无法获得所需的距离。
如何使用 Pytorch 获得欧几里德距离和无限距离?
通过类使用 SageMaker 部署模型时PyTorchModel
,是否可以传递自定义环境变量或 kwargs?
我希望能够通过自定义参数切换服务代码的功能,而不是需要编写多个serve.py
来处理不同的训练模型导出方法。
model = PyTorchModel(name='my_model',
model_data=estimator.model_data,
role=role,
framework_version='1.0.0',
entry_point='serve.py',
source_dir='src',
sagemaker_session=sess,
predictor_cls=ImagePredictor,
<custom_argument?>
)
Run Code Online (Sandbox Code Playgroud) 我正在使用一些训练 lstm 生成序列的代码。训练模型后,调用 lstm() 方法:
x = some_input
lstm_output, (h_n, c_n) = lstm(x, hc)
funcc = nn.Linear(in_features=lstm_num_hidden,
output_features=vocab_size,
bias=True)
func_output = func(lstm_output)
Run Code Online (Sandbox Code Playgroud)
我已经查看了文档,nn.Linear()
但我仍然不明白这个转换正在做什么以及为什么它是必要的。如果 lstm 已经经过训练,那么它给出的输出应该已经具有预先建立的维度。该输出(lstm_output)将是生成的序列,或者在我的例子中是向量数组。我在这里错过了什么吗?
对于给定的二维张量,我想检索值为 的所有索引1
。我期望能够简单地使用torch.nonzero(a == 1).squeeze()
,这将返回tensor([1, 3, 2])
。然而,相反,torch.nonzero(a == 1)
返回一个 2D 张量(没关系),每行有两个值(这不是我所期望的)。然后,应使用返回的索引来索引 3D 张量的第二个维度(索引 1),再次返回 2D 张量。
import torch
a = torch.Tensor([[12, 1, 0, 0],
[4, 9, 21, 1],
[10, 2, 1, 0]])
b = torch.rand(3, 4, 8)
print('a_size', a.size())
# a_size torch.Size([3, 4])
print('b_size', b.size())
# b_size torch.Size([3, 4, 8])
idxs = torch.nonzero(a == 1)
print('idxs_size', idxs.size())
# idxs_size torch.Size([3, 2])
print(b.gather(1, idxs))
Run Code Online (Sandbox Code Playgroud)
显然,这不起作用,导致运行时错误:
RuntimeError:无效参数 4:索引张量必须与 C:\w\1\s\windows\pytorch\aten\src\TH/generic/THTensorEvenMoreMath.cpp:453 处的输入张量具有相同的维度
看来idxs
不是我想象的那样,也不能按照我想的方式使用。idxs
是 …
python multidimensional-array pytorch tensor tensor-indexing
对于这个张量是 PyTorch,
tensor([[ 0.7646, 0.5573, 0.4000, 0.2188, 0.7646, 0.5052, 0.2042, 0.0896,
0.7667, 0.5938, 0.3167, 0.0917],
[ 0.4271, 0.1354, 0.5000, 0.1292, 0.4260, 0.1354, 0.4646, 0.0917,
-1.0000, -1.0000, -1.0000, -1.0000],
[ 0.7208, 0.5656, 0.3000, 0.1688, 0.7177, 0.5271, 0.1521, 0.0667,
0.7198, 0.5948, 0.2438, 0.0729],
[ 0.6292, 0.8250, 0.4000, 0.2292, 0.6271, 0.7698, 0.2083, 0.0812,
0.6281, 0.8604, 0.3604, 0.0917]], device='cuda:0')
Run Code Online (Sandbox Code Playgroud)
我如何提取这些值到新的张量
0.7646, 0.5573, 0.4000, 0.2188
0.4271, 0.1354, 0.5000, 0.1292
Run Code Online (Sandbox Code Playgroud)
如何将两行的前 4 行放入新的张量中?
我尝试将 pytorch 代码翻译为tensorflow。index_select
所以我想知道在tensorflow中是否有一个与pytorch等效的函数
我知道如何为我想要运行的 Python 脚本添加参数。例如,如果test.py
是我的脚本文件,并且它有一个参数,'--batch_size'
那么我可以launch.json
在 VS Code 中编辑并设置"args": ["--batch_size", "32"]
但我不知道如何为Python本身添加环境参数。例如,Python有-m
环境变量,它将库模块作为脚本运行。如果我想运行python -m torch.distributed.launch test.py --batch_size 32
,我应该在 VS Code 中编辑什么来运行调试器?
更新:这是我的launch.json