我正在尝试使用列上的逻辑索引切片PyTorch张量.我想要与索引向量中的1值对应的列.切片和逻辑索引都是可能的,但它们是否可以一起使用?如果是这样,怎么样?我的尝试一直在抛出无益的错误
TypeError:使用ByteTensor类型的对象索引张量.唯一支持的类型是整数,切片,numpy标量和torch.LongTensor或torch.ByteTensor作为唯一的参数.
期望的输出
C = torch.LongTensor([[1, 3], [4, 6]])
# 1 3
# 4 6
Run Code Online (Sandbox Code Playgroud)
仅对列进行逻辑索引
import torch
A_log = torch.ByteTensor([1, 0, 1]) # the logical index
B = torch.LongTensor([[1, 2, 3], [4, 5, 6]])
C = B[:, A_log] # Throws error
Run Code Online (Sandbox Code Playgroud)
我也试过使用索引列表
import torch
A_idx = torch.LongTensor([0, 2]) # the index vector
B = torch.LongTensor([[1, 2, 3], [4, 5, 6]])
C = B[:, A_idx] # Throws error
Run Code Online (Sandbox Code Playgroud)
如果向量大小相同,则逻辑索引有效
import torch
A_log = torch.ByteTensor([1, 0, 1]) # the logical …
Run Code Online (Sandbox Code Playgroud) 我想要可视化神经网络层的权重.我正在使用pytorch.
import torch
import torchvision.models as models
from matplotlib import pyplot as plt
def plot_kernels(tensor, num_cols=6):
if not tensor.ndim==4:
raise Exception("assumes a 4D tensor")
if not tensor.shape[-1]==3:
raise Exception("last dim needs to be 3 to plot")
num_kernels = tensor.shape[0]
num_rows = 1+ num_kernels // num_cols
fig = plt.figure(figsize=(num_cols,num_rows))
for i in range(tensor.shape[0]):
ax1 = fig.add_subplot(num_rows,num_cols,i+1)
ax1.imshow(tensor[i])
ax1.axis('off')
ax1.set_xticklabels([])
ax1.set_yticklabels([])
plt.subplots_adjust(wspace=0.1, hspace=0.1)
plt.show()
vgg = models.vgg16(pretrained=True)
mm = vgg.double()
filters = mm.modules
body_model = [i for i in mm.children()][0]
layer1 = …
Run Code Online (Sandbox Code Playgroud) 我得到了一维IntTensor,但我想将其转换为整数。我通过这种方法尝试:
print(dictionary[IntTensor.int()])
Run Code Online (Sandbox Code Playgroud)
但出现错误:
KeyError: Variable containing:
423
[torch.IntTensor of size 1]
Run Code Online (Sandbox Code Playgroud)
谢谢〜
如何使用PyTorch上的fastai实现加载预训练模型?就像在SkLearn中一样,我可以使用pickle将模型转储到文件中,然后加载并稍后使用.在声明像bellow这样的学习实例之后,我使用了.load()方法来加载以前保存的权重:
arch=resnet34
data = ImageClassifierData.from_paths(PATH, tfms=tfms_from_model(arch, sz))
learn = ConvLearner.pretrained(arch, data, precompute=False)
learn.load('resnet34_test')
Run Code Online (Sandbox Code Playgroud)
然后预测图像的类:
trn_tfms, val_tfms = tfms_from_model(arch,100)
img = open_image('circle/14.png')
im = val_tfms(img)
preds = learn.predict_array(im[None])
print(np.argmax(preds))
Run Code Online (Sandbox Code Playgroud)
但它让我错误:
ValueError: Expected more than 1 value per channel when training, got input size [1, 1024]
Run Code Online (Sandbox Code Playgroud)
如果我使用此代码learn.fit(0.01, 3)
而不是learn.load()
.我真正想要的是避免在我的应用程序中的训练步骤.
我发现了一些教程和帖子,其中仅说使用张量服务来提供张量流模型。在model.conf文件中,有一个参数model_platform,其中可以提及tensorflow或任何其他平台。但是我们如何以张量流的方式导出其他平台模型,以便可以通过张量流服务加载它。
假定具有以下形状的火炬张量:
x = torch.rand(20, 1, 120, 120)
Run Code Online (Sandbox Code Playgroud)
我现在想要的是获取每个120x120矩阵的最大值的索引。为了简化问题,我将首先x.squeeze()
使用shape [20, 120, 120]
。然后,我想获取火炬张量,它是具有shape的索引列表[20, 2]
。
我该如何快速完成?
当我通过 Torch Hub 下载模型时,模型会自动以/home/me/.cache/torch
.
如何修改此行为?
我已经通过使用 pytorch 获得了完整的模型,但是我想将 .pth 文件转换为 .pb,它可以在 Tensorflow 中使用。有没有人有一些想法?
我想在 C++ 中将 pytorch 张量转换为 opencv mat,反之亦然。我有这两个功能:
cv::Mat TensorToCVMat(torch::Tensor tensor)
{
std::cout << "converting tensor to cvmat\n";
tensor = tensor.squeeze().detach().permute({1, 2, 0});
tensor = tensor.mul(255).clamp(0, 255).to(torch::kU8);
tensor = tensor.to(torch::kCPU);
int64_t height = tensor.size(0);
int64_t width = tensor.size(1);
cv::Mat mat(width, height, CV_8UC3);
std::memcpy((void *)mat.data, tensor.data_ptr(), sizeof(torch::kU8) * tensor.numel());
return mat.clone();
}
torch::Tensor CVMatToTensor(cv::Mat mat)
{
std::cout << "converting cvmat to tensor\n";
cv::cvtColor(mat, mat, cv::COLOR_BGR2RGB);
cv::Mat matFloat;
mat.convertTo(matFloat, CV_32F, 1.0 / 255);
auto size = matFloat.size();
auto nChannels = matFloat.channels();
auto tensor …
Run Code Online (Sandbox Code Playgroud) pytorch ×10
python ×2
scikit-learn ×2
tensorflow ×2
c++ ×1
indices ×1
matplotlib ×1
max ×1
memory ×1
opencv ×1
path ×1
resnet ×1
tensor ×1