我在github上看到了这个LSTM语言模型的例子(链接).它一般来说对我来说非常清楚.但是我仍然在努力理解调用的内容contiguous(),这在代码中会多次发生.
例如,在代码输入的第74/75行中,创建LSTM的目标序列.数据(存储在其中ids)是二维的,其中第一维是批量大小.
for i in range(0, ids.size(1) - seq_length, seq_length):
# Get batch inputs and targets
inputs = Variable(ids[:, i:i+seq_length])
targets = Variable(ids[:, (i+1):(i+1)+seq_length].contiguous())
Run Code Online (Sandbox Code Playgroud)
举个简单的例子,当使用批量大小为1和seq_length10时inputs,targets看起来像这样:
inputs Variable containing:
0 1 2 3 4 5 6 7 8 9
[torch.LongTensor of size 1x10]
targets Variable containing:
1 2 3 4 5 6 7 8 9 10
[torch.LongTensor of size 1x10]
Run Code Online (Sandbox Code Playgroud)
所以一般来说我的问题是,contiguous()我需要什么以及为什么需要它?
此外,我不明白为什么该方法被调用目标序列而不是输入序列,因为两个变量都包含相同的数据.
怎么可能targets是inputs不连续的,仍然是连续的? …
我知道Keras的LSTM需要一个带有形状(nb_samples, timesteps, input_dim)作为输入的3D张量.但是,我不完全确定在我的情况下输入应该是什么样子,因为我只有一个T观察样本用于每个输入,而不是多个样本,即(nb_samples=1, timesteps=T, input_dim=N).将每个输入分成长度样本是否更好T/M?T对我来说是几百万的观察,那么在这种情况下每个样本应该多长时间,即我将如何选择M?
另外,我是正确的,因为这个张量应该看起来像:
[[[a_11, a_12, ..., a_1M], [a_21, a_22, ..., a_2M], ..., [a_N1, a_N2, ..., a_NM]],
[[b_11, b_12, ..., b_1M], [b_21, b_22, ..., b_2M], ..., [b_N1, b_N2, ..., b_NM]],
...,
[[x_11, x_12, ..., a_1M], [x_21, x_22, ..., x_2M], ..., [x_N1, x_N2, ..., x_NM]]]
Run Code Online (Sandbox Code Playgroud)
其中M和N如前所述定义,x对应于我将从上面讨论的分裂中获得的最后一个样本?
最后,给定一个pandas数据帧,T每列中都有观察值,N列,每个输入一个,如何创建这样的输入以馈送给Keras?
我想导入sklearn,但显然没有模块:
ModuleNotFoundError: No module named 'sklearn'
Run Code Online (Sandbox Code Playgroud)
我正在使用Anaconda Python 3.6.1; 我到处检查过但仍无法找到答案.
当我使用命令时:
conda install scikit-learn这不应该只是工作吗?
anaconda在哪里安装包?
我正在检查我的python库中的框架,并且没有任何关于sklearn只有numpy和scipy.
请帮助,我是新手使用python包,尤其是通过anaconda.
我需要一个Torch命令来检查两个张量是否具有相同的内容,如果它们具有相同的内容则返回TRUE.
例如:
local tens_a = torch.Tensor({9,8,7,6});
local tens_b = torch.Tensor({9,8,7,6});
if (tens_a EQUIVALENCE_COMMAND tens_b) then ... end
Run Code Online (Sandbox Code Playgroud)
我应该在这个脚本中使用什么而不是EQUIVALENCE_COMMAND?
我试过简单,==但它不起作用.
我想将带有gensim的预训练word2vec嵌入到PyTorch嵌入层中.
所以我的问题是,如何将gensim加载的嵌入权重加到PyTorch嵌入层中.
提前致谢!
通过使用pyTorch有两种方式滤除
torch.nn.Dropout和torch.nn.functional.Dropout.
我很难看到使用它们之间的区别
- 何时使用什么?
- 这有什么不同吗?
当我换掉它时,我没有看到任何性能差异.
我想在 python 中加载一个 JSONL 文件作为 JSON 对象。有没有简单的方法来做到这一点?
我是TensorFlow的初学者,我正在尝试将两个矩阵相乘,但我不断得到一个例外:
ValueError: Shapes TensorShape([Dimension(2)]) and TensorShape([Dimension(None), Dimension(None)]) must have the same rank
Run Code Online (Sandbox Code Playgroud)
这是最小的示例代码:
data = np.array([0.1, 0.2])
x = tf.placeholder("float", shape=[2])
T1 = tf.Variable(tf.ones([2,2]))
l1 = tf.matmul(T1, x)
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
sess.run(feed_dict={x: data}
Run Code Online (Sandbox Code Playgroud)
令人困惑的是,以下非常相似的代码工作正常:
data = np.array([0.1, 0.2])
x = tf.placeholder("float", shape=[2])
T1 = tf.Variable(tf.ones([2,2]))
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
sess.run(T1*x, feed_dict={x: data}
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出问题是什么?我必须在这里遗漏一些明显的东西..
我不是分布式系统和CUDA的专家.但有一个非常有趣的功能,PyTorch支持的是nn.DataParallel和nn.DistributedDataParallel.他们是如何实际实施的?他们如何分离常见的嵌入和同步数据?
这是一个基本的例子DataParallel.
import torch.nn as nn
from torch.autograd.variable import Variable
import numpy as np
class Model(nn.Module):
def __init__(self):
super().__init__(
embedding=nn.Embedding(1000, 10),
rnn=nn.Linear(10, 10),
)
def forward(self, x):
x = self.embedding(x)
x = self.rnn(x)
return x
model = nn.DataParallel(Model())
model.forward(Variable.from_numpy(np.array([1,2,3,4,5,6], dtype=np.int64)).cuda()).cpu()
Run Code Online (Sandbox Code Playgroud)
PyTorch可以拆分输入并将它们发送到许多GPU并将结果合并.
它如何管理并行模型或分布式模型的嵌入和同步?
我在PyTorch的代码中闲逛,但很难知道基础知识是如何工作的.
c++ parallel-processing distributed-computing python-3.x pytorch
我想知道在调试(第一张图片)时是否可以在VS Code中显示一个pandas数据帧,因为它显示在PyCharm中(第二张图片)?
谢谢你的帮助.
df 在vs代码中打印:
df 在pycharm中打印: