标签: pytorch

在神经机器翻译中绑定权重

我想将解码器的embedding层和预测层的权重联系起来。next_word嵌入维度设置为 300,解码器的隐藏大小设置为 600。NMT 中目标语言的词汇量为 50000,因此嵌入权重维度为 ,50000 x 300预测下一个单词的线性层权重为50000 x 600

那么,我怎样才能把它们绑起来呢?在这种情况下实现重量绑定的最佳方法是什么?

python deep-learning recurrent-neural-network pytorch seq2seq

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

RuntimeError: Given groups=1, weight of size 16 1 5 5, 预期输入[100, 3, 256, 256] 有 1 个通道,但得到 3 个通道

我尝试在 Pytorch 中针对图像分类问题运行以下程序:

import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
import torch.utils.data as data

# Device configuration
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')

# Hyper parameters
num_epochs = 5
num_classes = 10
batch_size = 100
learning_rate = 0.001

TRAIN_DATA_PATH = "train/"
TEST_DATA_PATH = "test/"
TRANSFORM_IMG = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(256),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406],
                         std=[0.229, 0.224, 0.225] )
    ])

train_dataset = torchvision.datasets.ImageFolder(root=TRAIN_DATA_PATH, transform=TRANSFORM_IMG)
train_loader = data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True,  num_workers=4)
test_dataset = torchvision.datasets.ImageFolder(root=TEST_DATA_PATH, transform=TRANSFORM_IMG)
test_loader  = …
Run Code Online (Sandbox Code Playgroud)

pytorch

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

在 Pytorch 中将 3D 张量转换为 4D 张量

我很难找到有关在 PyTorch 中重塑的信息。Tensorflow 非常简单。

我的张量有 shape torch.Size([3, 480, 480])。我想将其转换为形状为 [1,3,480,480] 的 4D 张量。我怎么做?

pytorch

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

pytorch线性方法中的多维输入?

在构建简单的感知器神经网络时,我们通常将格式输入的二维矩阵传递给二维权(batch_size,features)重矩阵,类似于numpy 中的这个简单神经网络。我一直假设神经网络的感知器/密集/线性层只接受 2D 格式的输入并输出另一个 2D 输出。但是最近我遇到了这个 pytorch 模型,其中一个 Linear 层接受一个 3D 输入张量并输出另一个 3D 张量 ( o1 = self.a1(x))。

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim

class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.a1 = nn.Linear(4,4)
        self.a2 = nn.Linear(4,4)
        self.a3 = nn.Linear(9,1)
    def forward(self,x):
        o1 = self.a1(x)
        o2 = self.a2(x).transpose(1,2)
        output = torch.bmm(o1,o2)
        output = output.view(len(x),9)
        output = self.a3(output)
        return output

x = torch.randn(10,3,4)
y = torch.ones(10,1)

net = Net()

criterion …
Run Code Online (Sandbox Code Playgroud)

perceptron neural-network deep-learning pytorch

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

Pytorch 运行时错误:设备类型为 cuda 的预期对象,但在调用 _th_index_select 时获得了参数 #1 'self' 的设备类型 cpu

我正在训练一个模型,该模型采用标记化的字符串,然后通过嵌入层和 LSTM。但是,输入中似乎存在错误,因为它没有通过嵌入层。

class DrugModel(nn.Module):
    def __init__(self, input_dim, output_dim, hidden_dim, drug_embed_dim,
            lstm_layer, lstm_dropout, bi_lstm, linear_dropout, char_vocab_size,
            char_embed_dim, char_dropout, dist_fn, learning_rate,
            binary, is_mlp, weight_decay, is_graph, g_layer,
            g_hidden_dim, g_out_dim, g_dropout):

        super(DrugModel, self).__init__()

        # Save model configs
        self.drug_embed_dim = drug_embed_dim
        self.lstm_layer = lstm_layer
        self.char_dropout = char_dropout
        self.dist_fn = dist_fn
        self.binary = binary
        self.is_mlp = is_mlp
        self.is_graph = is_graph
        self.g_layer = g_layer
        self.g_dropout = g_dropout
        self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

        # For one-hot encoded SMILES
        if not is_mlp:
            self.char_embed = nn.Embedding(char_vocab_size, char_embed_dim,
                                           padding_idx=0) …
Run Code Online (Sandbox Code Playgroud)

gpu runtime-error embedding pytorch

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

PyTorch CNN:损失不变

我曾尝试研究我的不变损失的情况,我找到的所有答案都特定于代码。我刚刚开始学习 CNN,大部分 CNN 来自一个示例,并进行了修改以适应我的数据集的需求。我正在尝试对 ECG 的类型(正常、心房颤动、其他、嘈杂)进行分类。当我尝试训练 CNN 时,损失保持不变,我认为这是因为我的 CNN 没有学习并且只输出零。到目前为止,我已经尝试改变学习率/损失函数并没有产生任何影响。

我是在Google Colab 上这样做的,因此可以随意编辑代码,并且不要忘记将运行时选项卡下的硬件加速更改为 GPU。

代码:

import os
import cv2
import numpy as np
from tqdm import tqdm
from scipy.io import loadmat
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import matplotlib.pyplot as plt

if torch.cuda.is_available():
  device = torch.device("cuda:0")
  print("Running on GPU -", device )
else:
  device = torch.device("cpu")
  print("Running on CPU -", device )


REBUILD_DATA = True # processing data

class ECG_DATA(): …
Run Code Online (Sandbox Code Playgroud)

python conv-neural-network pytorch

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

为什么当我在 'with torch.no_grad():' 中包含 'loss.backward()' 时,反向传播过程仍然可以工作?

我正在 PyTorch 中使用线性回归示例。我知道我在 'with torch.no_grad():' 中包含 'loss.backward()' 是错误的,但是为什么它与我的代码运行良好?

根据pytorch docstorch.autograd.no_grad是一个禁用梯度计算的上下文管理器。所以我真的很困惑。

代码在这里:

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
# Toy dataset
x_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168], 
                    [9.779], [6.182], [7.59], [2.167], [7.042], 
                    [10.791], [5.313], [7.997], [3.1]], dtype=np.float32)

y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573], 
                    [3.366], [2.596], [2.53], [1.221], [2.827], 
                    [3.465], [1.65], [2.904], [1.3]], dtype=np.float32)

input_size = 1
output_size = 1
epochs = 100
learning_rate = 0.05 …
Run Code Online (Sandbox Code Playgroud)

backpropagation pytorch

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

在pytorch中连接两个不同形状的火炬张量

我有两个火炬张量。一种有形[64, 4, 300],一种有形[64, 300]。如何连接这两个张量以获得 shape 的合成张量[64, 5, 300]。我知道tensor.cat用于此的函数,但为了使用该函数,我需要重塑第二个张量以匹配张量的维数。我听说不应该对张量进行整形,因为它可能会弄乱张量中的数据。我该如何进行这种连接?

我试过重塑,但接下来的部分让我对这种重塑更加怀疑。

a = torch.rand(64,300)

a1 = a.reshape(64,1,300)

list(a1[0]) == list(a)
Out[32]: False
Run Code Online (Sandbox Code Playgroud)

concat concatenation torch pytorch tensor

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

拥抱面变压器:encode_plus 中的截断策略

encode_plus在 Huggingface 的转换器库中,允许截断输入序列。有两个参数是相关的:truncationmax_length。我将成对的输入序列传递给encode_plus并且需要以“截断”的方式简单地截断输入序列,即,如果整个序列由两个输入组成text并且text_pairmax_length它长,则应该从右侧相应地截断。

似乎这两种截断策略都不允许这样做,而是longest_first从最长的序列中删除标记(可以是 text 或 text_pair,但不仅仅是从序列的右侧或末尾,例如,如果文本更长,则 text_pair ,这似乎会首先从文本中删除标记),only_firstonly_second仅从第一个或第二个中删除标记(因此,也不仅仅是从末尾删除),并且do_not_truncate根本不会截断。还是我误解了这一点,实际上longest_first可能是我正在寻找的?

pytorch huggingface-transformers

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

HTTPS POST 使用 python 请求查询 FastAPI

我正在尝试使用 FastAPI 为神经网络提供服务。

from fastapi import Depends, FastAPI
from pydantic import BaseModel
from typing import Dict

class iRequest(BaseModel):
    arg1: str
    arg2: str

class iResponse(BaseModel):
    pred: str
    probs: Dict[str, float]

@app.post("/predict", response_model=iResponse)
def predict(request: iRequest, model: Model = Depends(get_model)):
    pred, probs = model.predict(request.arg1, request.arg2)
    return iResponse(pred = pred, probs = probs)
Run Code Online (Sandbox Code Playgroud)

手动站点 http://localhost:8000/docs#/default/predict_predict_post 工作正常并转换为以下 curl 命令:

curl -X POST "http://localhost:8000/predict" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{\"arg1\":\"I am the King\",\"arg2\":\"You are not my King\"}"
Run Code Online (Sandbox Code Playgroud)

这也有效。当我尝试使用 python 请求查询 API 时:

import …
Run Code Online (Sandbox Code Playgroud)

python api python-requests pytorch fastapi

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