一般来说,我在安装和需要软件包时遇到困难。例如,对于inspect.lua包,我首先按照包中的说明通过luarocks安装(https://github.com/kikito/inspect.lua):
luarocks install inspect
Run Code Online (Sandbox Code Playgroud)
然后,如果我启动luatorch7 ( th),我将通过以下方式需要它:
local inspect = require 'inspect'
Run Code Online (Sandbox Code Playgroud)
该检查变量始终是nil:
require 'inspect'; print(inspect)
Run Code Online (Sandbox Code Playgroud)
返回nil。
最初,我不确定它是否正在返回nil,因此当我尝试时,例如inspect(1)我会收到错误“尝试调用全局‘检查’(零值)”。
使用火炬,似乎我可以成功使用“import 'inspect'”,尽管我不确定为什么这有效,而 require 却不起作用。
我究竟做错了什么?
我正在尝试构建一个CNN使用Torch 7. 我很新Lua。我试图点击此链接。我遇到了setmetatable以下代码块中调用的内容:
setmetatable(train_set,
{
__index = function(t, i)
return {t.data[i], t.label[i]}
end
});
Run Code Online (Sandbox Code Playgroud)
我知道第二个参数充当 table 的元表train_set。
1)是t元表还是t只是另一个名称train_set?
2)每当一个函数用于反对 时__index,解释器是否假设第一个参数(t)是一个表(或元表,取决于第一个问题的答案)?第二个参数总是 orkey吗index?
3)我的理解是,如果我使用train_set.data[1],它将调用__index. 这里的答案是当表中不存在__index时调用。key但与t.data[1]相同train_set.data[1]?如果是这样,口译员怎么知道这一点?
我正在尝试使用pytorch中的gather函数,但无法理解参数的作用dim。
代码:
t = torch.Tensor([[1,2],[3,4]])
print(torch.gather(t, 0, torch.LongTensor([[0,0],[1,0]])))
Run Code Online (Sandbox Code Playgroud)
输出:
1 2
3 2
[torch.FloatTensor of size 2x2]
Run Code Online (Sandbox Code Playgroud)
维度设置为 1:
print(torch.gather(t, 1, torch.LongTensor([[0,0],[1,0]])))
Run Code Online (Sandbox Code Playgroud)
输出变为:
1 1
4 3
[torch.FloatTensor of size 2x2]
Run Code Online (Sandbox Code Playgroud)
功能实际上如何gather运作?
对于 lua,根据本教程,可以通过名为 arg 的隐藏变量访问函数的三个点。
https://www.lua.org/pil/5.2.html
我写了一个非常简单的程序
require 'torch'
function triDot(...)
print('in triDot now')
print(arg)
for i,v in ipairs(arg) do
print('i is',i,'v is',v)
end
end
triDot('name1','name2')
Run Code Online (Sandbox Code Playgroud)
事实证明 arg 根本不包含 {'name1', 'name2'} 而是一堆系统参数。For 循环不会产生任何结果。
{ 0:“/home/jun/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th”-2:“-e”-5:“/home/jun/torch/install/bin /luajit" -3 : "package.path="/home/jun/.luarocks/share/lua/5.1/?.lua;/home/jun/.luarocks/share/lua/5.1/?/init.lua; /home/jun/torch/install/share/lua/5.1/?.lua;/home/jun/torch/install/share/lua/5.1/?/init.lua;"..package.path; package.cpath ="/home/jun/.luarocks/lib/lua/5.1/?.so;/home/jun/torch/install/lib/lua/5.1/?.so;"..package.cpath" -4 : " -e" -1 : "本地 k,l,_=pcall(require,"luarocks.loader") _=k 和 l.add_context("trepl","scm-1")" }
任何人都可以帮忙吗?
我正在尝试实现 fastai pretrain 语言模型,它需要火炬才能工作。运行代码后,我遇到了一些关于 import torch._C 的问题
我在我的 linux python 3.7.1 上运行它,通过 pip: torch 1.0.1.post2, cuda V7.5.17。我收到此错误:
Traceback (most recent call last):
File "pretrain_lm.py", line 7, in <module>
import fastai
File "/home/andira/anaconda3/lib/python3.7/site-packages/fastai/__init__.py", line 1, in <module>
from .basic_train import *
File "/home/andira/anaconda3/lib/python3.7/site-packages/fastai/basic_train.py", line 2, in <module>
from .torch_core import *
File "/home/andira/anaconda3/lib/python3.7/site-packages/fastai/torch_core.py", line 2, in <module>
from .imports.torch import *
File "/home/andira/anaconda3/lib/python3.7/site-packages/fastai/imports/__init__.py", line 2, in <module>
from .torch import *
File "/home/andira/anaconda3/lib/python3.7/site-packages/fastai/imports/torch.py", line 1, in <module>
import torch, torch.nn.functional as …Run Code Online (Sandbox Code Playgroud) 我正在学习pytorch,我不知道这个问题是否愚蠢,但我找不到解释nn.batchnorm1d的官方网站。我想知道怎么torch.nn.BatchNorm1d(d1)工作?我知道批量归一化就是让一批样本的均值和方差分别为0和1。我想知道是否有 nn.batchnorm2d,如果有,它有什么作用?参数是什么d1?
我正在编写一个神经网络来进行回归,这是我的代码:
class Model(nn.Module):
def __init__(self, input_size, hidden_size, num_classes):
super().__init__()
self.h1 = nn.Linear(input_size, hidden_size)
self.h2 = nn.Linear(hidden_size, hidden_size)
self.h3 = nn.Linear(hidden_size, num_classes)
def forward(self, x):
x = self.h1(x)
x = Fuc.tanh(x)
x = self.h2(x)
x = Fuc.relu(x)
x = self.h3(x)
return x
model = Model(input_size=input_size, hidden_size=hidden_size, num_classes=num_classes)
opt = optim.Adam(params=model.parameters(), lr=learning_rate)
for epoch in range(1000):
out = model(data)
print('target', target)
print('pred', out)
loss = torch.nn.MSELoss(out, target)
print('loss', loss)
model.zero_grad()
loss.backward()
opt.step()
Run Code Online (Sandbox Code Playgroud)
我的输入的形状为 (numberOfSample X 2),输出的格式为 [[2],[3],...],即一个列表列表,其中每个内部列表包含一个数字。
好的,现在我训练神经网络并得到这个错误:
...
[-0.1753],
[-0.1753],
[-0.1753]], …Run Code Online (Sandbox Code Playgroud) 我收到错误“CUDA 内存不足”,然后我将 torch.no_grad() 函数添加到我的代码中。这会影响我的准确性吗?
for iters in range(args.iterations):
with torch.no_grad():
encoded, encoder_h_1, encoder_h_2, encoder_h_3 = encoder(
res, encoder_h_1, encoder_h_2, encoder_h_3)
with torch.no_grad():
code = binarizer(encoded)
with torch.no_grad():
output, decoder_h_1, decoder_h_2, decoder_h_3, decoder_h_4 = decoder(
code, decoder_h_1, decoder_h_2, decoder_h_3, decoder_h_4)
res = res - output.detach()
codes.append(code.data.cpu().numpy())
torch.cuda.empty_cache()
print('Iter: {:02d}; Loss: {:.06f}'.format(iters, res.data.abs().mean()))
Run Code Online (Sandbox Code Playgroud) 在我的机器上,我不能“pip install torch”——我得到了臭名昭著的“单一源外部管理错误”——我无法修复它并使用了anaconda的“conda install torch”。
不过,检查版本很容易 - torch.__version__
但是如何查看它安装在哪里——torch 的主目录?假设我通过 pip 和 conda 安装了两个手电筒——如何知道项目中使用了哪一个?
import torch
print(torch__version__)
Run Code Online (Sandbox Code Playgroud) 我正在评估 pytorch 模型。它以以下方式给出结果
results = model(batch)
# results is a list of dictionaries with 'boxes', 'labels' and 'scores' keys and torch tensor values
Run Code Online (Sandbox Code Playgroud)
然后我尝试打印一些值来检查发生了什么
print(
(
f"{results[0]['boxes'].shape[0]}\n" # Returns how many boxes there is
f"{results[0]['scores'].mean()}" # Mean credibility score of the boxes
)
)
Run Code Online (Sandbox Code Playgroud)
这会导致错误
Exception has occurred: RuntimeError: operation does not have identity
让事情变得更加混乱的是,print有时只会失败。为什么会失败?