我用这个代码
def train():
model.train()
total_loss, total_accuracy = 0, 0
# empty list to save model predictions
total_preds=[]
# iterate over batches
for step,batch in enumerate(train_dataloader):
# progress update after every 50 batches.
if step % 50 == 0 and not step == 0:
print(' Batch {:>5,} of {:>5,}.'.format(step, len(train_dataloader)))
# push the batch to gpu
#batch = [r for r in batch]
sent_id, mask, labels = batch['input_ids'],batch['attention_mask'],batch['labels']
print(6)
print(sent_id)
print(mask)
print(labels)
print(batch['input_ids'].shape)
print(batch['attention_mask'].shape)
print(batch['labels'].shape)
# clear previously calculated gradients …Run Code Online (Sandbox Code Playgroud) python neural-network torch cross-entropy bert-language-model
我用来Pytorch运行 Transformer 模型。当我想分割数据(标记化数据)时,我使用以下代码:
train_dataset, test_dataset = torch.utils.data.random_split(
tokenized_datasets,
[train_size, test_size])
Run Code Online (Sandbox Code Playgroud)
torch.utils.data.random_split使用洗牌方法,但我不想洗牌。我想按顺序分割它。
有什么建议吗?谢谢
numpy中有一个函数可用于导出两个张量的并集,如下所示:
import torch
import numpy as np
a = torch.tensor([0, 1, 2])
b = torch.tensor([2, 3, 4])
c = np.union1d(a, b) # c = array([0, 1, 2, 3, 4])
c = torch.from_numpy(c) # c = torch.tensor([0, 1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)
但是,我正在寻找可以直接在两个张量上使用的torch函数。如果我使用上面的 numpy 函数,我必须将结果从 numpy 转换为 torch,并且还必须使用 cpu,尽管该函数应用于张量。
torch中有没有可以直接在两个张量上使用的联合函数?或者,至少可以使用其他火炬功能简单地实现它吗?
我必须使用Torch框架训练卷积神经网络,然后在C中编写相同的网络.为此,我必须以某种方式从我的C程序中读取网络的学习参数,但我找不到办法将Torch Tensors转换或写入文件以使其在C中可读.理想情况下,我想将Tensors转换为C中的double数组.
有谁知道这是怎么做到的吗?提前致谢 :)
我有这个功能:
function MSECriterion:updateOutput(input, target)
return input.nn.MSECriterion_updateOutput(self, input, target)
end
Run Code Online (Sandbox Code Playgroud)
现在,
input.nn.MSECriterion_updateOutput(self, input, target)
Run Code Online (Sandbox Code Playgroud)
返回一个数字.我不知道它是怎么做到的.我已经在调试器中一步步走了,似乎这只是计算一个没有中间步骤的数字.
input is a Tensor of size 1 (say, -.234). And the
nn.MSECriterion_updateOutput(self, input, target) looks like it is just the function MSECriterion:updateOutput(input, target).
Run Code Online (Sandbox Code Playgroud)
我对如何计算数字感到困惑.
我很困惑为什么甚至允许这样做.参数输入是一个张量,它甚至没有任何名为nn.MSE input.nn.MSECriterion_updateOutput的方法.
我试图在lua中找到类似于类的东西.在python中,我会这样做:
a = {}
type(a)
>>>> dict
Run Code Online (Sandbox Code Playgroud)
所以我在lua中有对象词汇.当我打印对象时,我得到:
print(vocab)
>>> {
3 : 20
o : 72
m : 70
d : 61
( : 9
}
Run Code Online (Sandbox Code Playgroud)
我如何让lua吐出对象,类似于python中的type()? - 它将为您提供对象的类
我看到了一些关于tensorflow和的基准pytorch.Tensorflow可能更快,但似乎不是更快,甚至有时更慢.
是否有关于静态图和动态图专门测试的基准测试,证明静态图比动态图快得多?
在Lua with Torch中,您使用"th"来运行Lua脚本.在Python中,您使用"python"或"python3"来运行python脚本.在Java中,您使用"java"来运行java类脚本.
命令前面的这个词是什么,实际上叫做?我试图自己搜索这个名字,但我找不到任何东西.
我正在训练一个神经网络模型,我的模型很好地拟合了训练数据。训练损失稳定下降。一切正常。
但是,当我输出模型的权重时,我发现它自随机初始化以来并没有太大变化(我没有使用任何预训练的权重。所有权重在 PyTorch 中默认初始化)。权重的所有维度仅变化约 1%,而训练数据的准确率从 50% 攀升至 90%。什么可以解释这种现象?权重的尺寸是否太高,我需要减小模型的尺寸?或者还有其他可能的解释吗?
我知道这是一个相当广泛的问题,但我认为在这里展示我的模型并对其进行数学分析是不切实际的。所以我只想知道这个问题的一般/常见原因是什么。
我正在构建一个自动编码器,我需要将图像编码为长度为 100 的潜在表示。我的模型使用以下架构。
self.conv1 = nn.Conv2d(in_channels = 3, out_channels = 32, kernel_size=3)
self.conv2 = nn.Conv2d(in_channels=32,out_channels=64,kernel_size=3,stride=2)
self.conv3 = nn.Conv2d(in_channels=64,out_channels=128,kernel_size=3,stride=2)
self.linear = nn.Linear(in_features=128*30*30,out_features=100)
self.conv1_transpose = nn.ConvTranspose2d(in_channels=128,out_channels=64,kernel_size=3,stride=2,output_padding=1)
self.conv2_transpose = nn.ConvTranspose2d(in_channels=64,out_channels=32,kernel_size=3,stride=2,output_padding=1)
self.conv3_transpose = nn.ConvTranspose2d(in_channels=32,out_channels=3,kernel_size=3,stride=1)
Run Code Online (Sandbox Code Playgroud)
有什么方法可以将Linear图层的输出提供给一个Conv2D或一个ConvTranspose2D图层,以便我可以重建我的图像?如果我删除Linear图层,输出将恢复。我想知道如何重建我的图像保留Linear层
任何帮助,将不胜感激。谢谢!