标签: pytorch

使用 pytorch 进行张量乘法的“@”

本文https://towardsdatascience.com/understand-kaiming-initialization-and-implementation-detail-in-pytorch-f7aa967e9138关于智能权重初始化使用语法

x@w
Run Code Online (Sandbox Code Playgroud)

表示张量(/矩阵)乘法。我以前没有看到过这一点,而是认为我们需要将其“拼写出来”为:

 torch.mm(x, w.t())
Run Code Online (Sandbox Code Playgroud)

使用以前的(更好的)语法需要什么?那篇文章没有显示他们正在使用的完整导入集。

python pytorch

0
推荐指数
1
解决办法
3450
查看次数

为什么我得到的每个通道的计算填充输入大小小于内核大小?

我有以下模型,但它返回错误。不知道为什么。我尝试过谷歌搜索,但到目前为止还没有找到任何东西。我的输入是 6 x 6 的 numpy 数组。

class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(1, 16, kernel_size=(3,3), stride=1, padding=0)
        self.conv2 = nn.Conv2d(16, 32, kernel_size=(3,3), stride=1, padding=0)
        self.conv3 = nn.Conv2d(32, 64, kernel_size=(3,3), stride=1, padding=0)

        self.fc1 = nn.Linear(64*4*4, 320)
        self.fc2 = nn.Linear(320, 160)
        self.out = nn.Linear(160, 2)


    def forward(self, x):
        x = self.conv1(x)
        x = F.relu(x)
        x = F.max_pool2d(x, kernel_size=2, stride=2)

        x = self.conv2(x)
        x = F.relu(x)
        x = F.max_pool2d(x, kernel_size=2, stride=2)

        x = self.conv3(x)
        x = F.relu(x)
        x = F.max_pool2d(x, kernel_size=2, …
Run Code Online (Sandbox Code Playgroud)

python conv-neural-network pytorch

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

最小化两个张量的余弦相似度并输出一个标量。火炬

我使用Pytorch余弦相似度函数如下。我有两个特征向量,我的目标是使它们彼此不同。所以,我想我可以最小化它们的余弦相似度。我对我的编码方式有一些疑问。感谢您对以下问题的建议。

  1. 我不知道为什么这里有一些负值val1

  2. 我已经完成了三个步骤来转换val1为标量。我的做法正确吗?还有其他办法吗?

  3. 为了最小化相似性,我使用了1/var1. 这是执行此操作的标准方法吗?如果我使用它正确吗1-var1

    def loss_func(feat1, feat2):
         cosine_loss = torch.nn.CosineSimilarity(dim=1, eps=1e-6)
         val1 = cosine_loss(feat1, feat2).tolist()
         # 1. calculate the absolute values of each element,
         # 2. sum all values together,
         # 3. divide it by the number of values
         val1 = 1/(sum(list(map(abs, val1)))/int(len(val1)))
         val1 = torch.tensor(val1, device='cuda', requires_grad=True)
         return val1 
    
    Run Code Online (Sandbox Code Playgroud)

cosine-similarity pytorch

0
推荐指数
1
解决办法
7068
查看次数

为什么pytorch线性模型不使用sigmoid函数

我期望 pytorch 中的线性模型产生sigmoid(WX+b). 但我看到它只是回归Wx+b。为什么会这样呢?

\n

在 Udacity “Intro to Deep Learning with pytorch” -> Lesson 2: Introduction to Neural Networks 中,他们说输出是 sigmoid:

\n
\xcc\x82 =(11+22+)\n
Run Code Online (Sandbox Code Playgroud)\n

从下面的代码中,我预计 y cap 为 0.38391371665752183,但这只是 的值WX+b,我确认了输出。为什么会出现这样的差异呢?

\n
import torch\nfrom torch import nn\nimport numpy as np\n\ntorch.manual_seed(0)\nmodel = nn.Linear(2,1)\nw1 = model.weight.detach().numpy()\nb1 = model.bias.detach().numpy()\nprint (f'model.weight = {w1}, model.bias={b1}')\nx = torch.tensor([[0.2877, 0.2914]])\nprint(f'model predicted {model(x)}')\nz = x.numpy()[0][0] * w1[0][0] + x.numpy()[0][1] * w1 [0][1] + b1[0]\nprint(f'manual multiplication yielded {z}')\nycap = 1/(1+ np.exp(-z))\nprint(f'y cap …
Run Code Online (Sandbox Code Playgroud)

neural-network pytorch

0
推荐指数
1
解决办法
4715
查看次数

torch.einsum 如何执行这个 4D 张量乘法?

我遇到了一个用于torch.einsum计算张量乘法的代码。我能够理解低阶张量的工作原理,但是不能理解 4D 张量的工作原理,如下所示:

import torch

a = torch.rand((3, 5, 2, 10))
b = torch.rand((3, 4, 2, 10))

c = torch.einsum('nxhd,nyhd->nhxy', [a,b])

print(c.size())

# output: torch.Size([3, 2, 5, 4])
Run Code Online (Sandbox Code Playgroud)

我需要以下方面的帮助:

  1. 这里执行的操作是什么(解释矩阵如何相乘/转置等)?
  2. torch.einsum在这种情况下实际上有好处吗?

python matrix-multiplication pytorch tensor

0
推荐指数
1
解决办法
2224
查看次数

Conda - ModuleNotFoundError:没有名为“torch”的模块

重现步骤:

我在 Windows 上使用 Anaconda 来为此存储库设置环境。

conda create --name pytorch-yolo

然后我安装所有依赖项conda install --file requirements.txt

哪个返回

PackagesNotFoundError: The following packages are not available from current channels:
- torch[version='>=1.2']
Run Code Online (Sandbox Code Playgroud)

所以我安装 pytorchconda install pytorch torchvision cudatoolkit=10.2 -c pytorch

当我尝试使用内部 conda 环境评估以下存储库中的模型: https://github.com/eriklindernoren/PyTorch-YOLOv3python3 test.py --weights_path weights/yolov3.weights时,它返回以下错误ModuleNotFoundError: No module named 'torch'

如果我运行 Jupyter 实验室或笔记本,甚至在 conda 终端中使用 python,则可以轻松导入 torch。

我已经尝试过的:

几乎所有内容都来自此线程:没有名为“Torch”的模块

具体来说,创建一个新的conda环境,将python设置为3.8.2,将torch安装到base,然后安装到环境中。

我还使用 pyenv 将全局 python 设置为 3.8.2,但这根本没有帮助。

conda list显示我已经安装了 pytorch

我无法解决这个问题。

python anaconda conda pytorch

0
推荐指数
1
解决办法
4614
查看次数

找不到满足要求的版本 torch==1.7.0+cpu

我想torch==1.7.0+cpu从requirements.txt安装我有一个错误

找不到满足 torch==1.7.0+cpu 要求的版本(来自 -rrequirements.txt(第 42 行))(来自版本:0.1.2、0.1.2.post1、0.1.2.post2、0.3 .1、0.4.0、0.4.1、1.0.0、1.0.1、1.0.1.post2、1.1.0、1.2.0、1.3.0、1.3.1、1.4.0、1.5.0、1.5 .1、1.6.0、1.7.0、1.7.1、1.8.0、1.8.1) 未找到 torch==1.7.0+cpu 的匹配发行版

我在用

Python 3.6.12 (default, Aug 18 2020, 02:08:22) 
[GCC 5.4.0 20160609] on linux
Run Code Online (Sandbox Code Playgroud)

pytorch

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

为什么使用 GPU 比使用 CPU 慢?

考虑以下网络:

%%time
import torch
from torch.autograd import grad
import torch.nn as nn
import torch.optim as optim

class net_x(nn.Module): 
        def __init__(self):
            super(net_x, self).__init__()
            self.fc1=nn.Linear(1, 20) 
            self.fc2=nn.Linear(20, 20)
            self.out=nn.Linear(20, 400) #a,b,c,d

        def forward(self, x):
            x=torch.tanh(self.fc1(x))
            x=torch.tanh(self.fc2(x))
            x=self.out(x)
            return x

nx = net_x()

#input
val = 100
t = torch.rand(val, requires_grad = True) #input vector
t = torch.reshape(t, (val,1)) #reshape for batch

#method 
dx = torch.autograd.functional.jacobian(lambda t_: nx(t_), t)
Run Code Online (Sandbox Code Playgroud)

这输出

CPU times: user 11.1 s, sys: 3.52 ms, total: 11.1 s
Wall time: …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing gpu neural-network pytorch

0
推荐指数
1
解决办法
2728
查看次数

使用pytorch计算均方对数误差

你好,我是新手PyTorch,我想在我的神经网络中使用均方对数误差作为损失函数来训练我的 DQN 代理,但我找不到 MSLE,最好的实现方式是什么nn.functionalPyTorch

pytorch

0
推荐指数
1
解决办法
3641
查看次数

分词器的batch_encode_plus方法存在问题

我在batch_encode_plus标记器的方法中遇到了一个奇怪的问题。我最近从 Transformer 版本 3.3.0 切换到 4.5.1。(我正在为 NER 创建数据束)。

我有两个句子需要编码,并且我有一个句子已经被标记化的情况,但是由于这两个句子的长度不同,所以我需要pad [PAD]较短的句子才能获得一批统一的长度。

下面是我使用 3.3.0 版本的 Transformer 所做的代码

from transformers import AutoTokenizer

pretrained_model_name = 'distilbert-base-cased'
tokenizer = AutoTokenizer.from_pretrained(pretrained_model_name, add_prefix_space=True)

sentences = ["He is an uninvited guest.", "The host of the party didn't sent him the invite."]

# here we have the complete sentences
encodings = tokenizer.batch_encode_plus(sentences, max_length=20, padding=True)
batch_token_ids, attention_masks = encodings["input_ids"], encodings["attention_mask"]
print(batch_token_ids[0])
print(tokenizer.convert_ids_to_tokens(batch_token_ids[0]))

# And the output
# [101, 1124, 1110, 1126, 8362, 1394, 5086, 1906, 3648, …
Run Code Online (Sandbox Code Playgroud)

python pytorch huggingface-transformers huggingface-tokenizers huggingface-datasets

0
推荐指数
1
解决办法
6046
查看次数