这似乎是这里的常见问题之一(1,2,3 ) ,但我仍在努力定义PyTorch conv1D输入的正确形状。
我有长度为 512 的文本序列(每个序列的标记数量),每个标记由长度为 768 的向量表示(嵌入)。我使用的批量大小是 6。
所以我的 conv1D 输入张量的形状为 [6, 512, 768]。
input = torch.randn(6, 512, 768)
Run Code Online (Sandbox Code Playgroud)
现在,我想使用 PyTorch 的 conv1D 层对内核大小为 2 的序列长度 (512) 进行卷积。
理解1:
我假设“in_channels”是 conv1D 层的嵌入维度。如果是这样,那么 conv1D 层将以这种方式定义,其中
in_channels = embedding dimension (768)
out_channels = 100 (arbitrary number)
kernel = 2
convolution_layer = nn.conv1D(768, 100, 2)
feature_map = convolution_layer(input)
Run Code Online (Sandbox Code Playgroud)
但有了这个假设,我得到以下错误:
RuntimeError: Given groups=1, weight of size 100 768 2, expected input `[4, 512, 768]` to have 768 …
Run Code Online (Sandbox Code Playgroud) 使用 PyTorch 转换器训练 BERT 模型(遵循此处的教程)。
教程中的以下语句
loss = model(b_input_ids, token_type_ids=None, attention_mask=b_input_mask, labels=b_labels)
Run Code Online (Sandbox Code Playgroud)
造成
TypeError: forward() got an unexpected keyword argument 'labels'
Run Code Online (Sandbox Code Playgroud)
这是完整的错误,
TypeError Traceback (most recent call last)
<ipython-input-53-56aa2f57dcaf> in <module>
26 optimizer.zero_grad()
27 # Forward pass
---> 28 loss = model(b_input_ids, token_type_ids=None, attention_mask=b_input_mask, labels=b_labels)
29 train_loss_set.append(loss.item())
30 # Backward pass
~/anaconda3/envs/systreviewclassifi/lib/python3.6/site-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
539 result = self._slow_forward(*input, **kwargs)
540 else:
--> 541 result = self.forward(*input, **kwargs)
542 for hook in self._forward_hooks.values():
543 hook_result = hook(self, …
Run Code Online (Sandbox Code Playgroud) 这似乎是 PyTorch 中 LSTM 最常见的问题之一,但我仍然无法弄清楚 PyTorch LSTM 的输入形状应该是什么。
即使遵循了几个帖子(1、2、3)并尝试了解决方案,它似乎也不起作用。
背景:我已经对一批大小为 12 的文本序列(可变长度)进行了编码,并且使用pad_packed_sequence
功能对序列进行了填充和打包。MAX_LEN
对于每个序列是 384,序列中的每个标记(或单词)的维度为 768。因此,我的批处理张量可能具有以下形状之一:[12, 384, 768]
或[384, 12, 768]
。
该批次将是我对 PyTorch rnn 模块(此处为 lstm)的输入。
根据用于PyTorch文档LSTMs,其输入尺寸是(seq_len, batch, input_size)
我的理解如下。
seq_len
- 每个输入流中的时间步数(特征向量长度)。
batch
- 每批输入序列的大小。
input_size
- 每个输入标记或时间步长的维度。
lstm = nn.LSTM(input_size=?, hidden_size=?, batch_first=True)
这里的确切值input_size
和hidden_size
值应该是什么?
我写了一个简单的java程序来创建一个lucene索引,但是我的语法错误了.
我的代码:
static final String INDEX_DIRECTORY = "/home/yuqing/Desktop/index";
Directory index = FSDirectory.open(new File(INDEX_DIRECTORY));
Run Code Online (Sandbox Code Playgroud)
我收到以下错误,
open (java.nio.file.path) in FSDirectory cannot be applied to java.io.file
Run Code Online (Sandbox Code Playgroud) 我有 3 个关于微调词向量的问题。请帮帮我。我会很感激的!提前谢谢了!
当我训练自己的 CNN 进行文本分类时,我使用 Word2vec 来初始化单词,然后我只是使用这些预先训练好的向量作为我的输入特征来训练 CNN,所以如果我从来没有嵌入层,它肯定不能做任何事情通过反向传播进行微调。我的问题是如果我想做微调,是否意味着创建一个嵌入层?以及如何创建它?
当我们训练 Word2vec 时,我们使用的是无监督训练,对吗?就我而言,我使用skip-gram 模型来获取我预先训练好的word2vec;但是当我拥有 vec.bin 并在文本分类模型 (CNN) 中使用它作为我的词初始化器时,如果我可以微调 vec.bin 中的词到向量映射,是否意味着我必须拥有与训练 Word2vec 时完全相同的 CNN 网络结构?微调的东西会改变 vec.bin 还是只是微调计算机内存?
skip-gram 模型和 CBOW 模型是否仅用于无监督 Word2vec 训练?或者他们也可以申请其他一般的文本分类任务?Word2vec 无监督训练和监督微调之间的网络有什么不同?
@Franck Dernoncourt 谢谢你提醒我。我在这里很绿,希望能从强大的社区中学到一些东西。有空的时候请看看我的问题,再次感谢!
假设我有一个 3D 张量 A
A = torch.arange(24).view(4, 3, 2)
print(A)
Run Code Online (Sandbox Code Playgroud)
并需要使用 2D 张量对其进行屏蔽
mask = torch.zeros((4, 3), dtype=torch.int64) # or dtype=torch.ByteTensor
mask[0, 0] = 1
mask[1, 1] = 1
mask[3, 0] = 1
print('Mask: ', mask)
Run Code Online (Sandbox Code Playgroud)
使用 PyTorch 中的 masked_select 功能会导致以下错误。
torch.masked_select(X, (mask == 1))
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-72-fd6809d2c4cc> in <module>
12
13 # Select based on new mask
---> 14 Y = torch.masked_select(X, (mask == 1))
15 #Y = X * mask_
16 print(Y)
RuntimeError: …
Run Code Online (Sandbox Code Playgroud) 假设,我们有一个张量
t = torch.tensor([True, False, True, False])
Run Code Online (Sandbox Code Playgroud)
我们如何将其转换为具有值的整数张量[1, 0, 1, 0]
?
我编写了以下代码,以XML响应的形式获取结果,并将一些内容写入Java的文件中.这是通过向公共数据库接收大约700,000个查询的XML响应来完成的.
但是,在代码可以写入文件之前,它会被代码中随机位置的一些随机异常(来自服务器)停止.我尝试从For-loop本身写入文件,但是无法做到.所以我尝试将收到的响应中的块存储到Java HashMap中,并在一次调用中将HashMap写入文件.但是在代码收到for循环中的所有响应并将它们存储到HashMap之前,它会停止一些异常(可能在第15000次迭代!!).当需要这样的迭代来获取数据时,是否还有其他有效的方法可以用Java写入文件?
我用于此代码的本地文件位于此处.
我的代码是,
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringWriter;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.XML;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
public class random {
static FileWriter fileWriter;
static PrintWriter …
Run Code Online (Sandbox Code Playgroud)