本文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)
使用以前的(更好的)语法需要什么?那篇文章没有显示他们正在使用的完整导入集。
我有以下模型,但它返回错误。不知道为什么。我尝试过谷歌搜索,但到目前为止还没有找到任何东西。我的输入是 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) 我使用Pytorch
余弦相似度函数如下。我有两个特征向量,我的目标是使它们彼此不同。所以,我想我可以最小化它们的余弦相似度。我对我的编码方式有一些疑问。感谢您对以下问题的建议。
我不知道为什么这里有一些负值val1
?
我已经完成了三个步骤来转换val1
为标量。我的做法正确吗?还有其他办法吗?
为了最小化相似性,我使用了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)
我期望 pytorch 中的线性模型产生sigmoid(WX+b)
. 但我看到它只是回归Wx+b
。为什么会这样呢?
在 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
,我确认了输出。为什么会出现这样的差异呢?
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) 我遇到了一个用于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)
我需要以下方面的帮助:
torch.einsum
在这种情况下实际上有好处吗?重现步骤:
我在 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
我无法解决这个问题。
我想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) 考虑以下网络:
%%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) 你好,我是新手PyTorch
,我想在我的神经网络中使用均方对数误差作为损失函数来训练我的 DQN 代理,但我找不到 MSLE,最好的实现方式是什么nn.functional
?PyTorch
我在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