我想访问图形的所有张量实例。例如,我可以检查张量是否分离或者我可以检查大小。它可以在tensorflow 中完成。
我不想要图形的可视化。
我有一个特殊的用例,我必须将推理和反向传播分开:我必须将所有图像和切片输出推断为批次,然后逐批反向传播。我并不需要更新网络的权重。
我将cifar10_tutorial 的片段修改为以下内容来模拟我的问题:j是一个变量,用于表示由我自己的逻辑返回的索引,我想要一些变量的梯度。
for epoch in range(2): # loop over the dataset multiple times
for i, data in enumerate(trainloader, 0):
# get the inputs
inputs, labels = data
inputs.requires_grad = True
# zero the parameter gradients
optimizer.zero_grad()
# forward + backward + optimize
outputs = net(inputs)
for j in range(4): # j is given by external logic in my own case
loss = criterion(outputs[j, :].unsqueeze(0), labels[j].unsqueeze(0))
loss.backward()
print(inputs.grad.data[j, …Run Code Online (Sandbox Code Playgroud) 我想f(*args, **kwargs)从已安装的模块中进行猴子修补。我在自己的代码中使用了装饰器的想法,但是已安装模块中的其他方法无法f正确调用。
这是一个例子:
import numpy as np
def log(func):
def wrapper(*args, **kwargs):
print('logging')
return func(*args, **kwargs)
return wrapper
if __name__ == "__main__":
a1 = np.asarray([0, 1, 2])
print(f'a1={a1}')
a2 = np.array([0, 1, 2])
print(f'a2={a2}')
np.array = log(np.array)
a3 = np.asarray([0, 1, 2])
print(f'a3={a3}')
a4 = np.array([0, 1, 2])
print(f'a4={a4}')
Run Code Online (Sandbox Code Playgroud)
输出是:
a1=[0 1 2]
a2=[0 1 2]
a3=[0 1 2]
logging
a4=[0 1 2]
Run Code Online (Sandbox Code Playgroud)
我希望结果是:
a1=[0 1 2]
a2=[0 1 2]
logging
a3=[0 1 2]
logging
a4=[0 …Run Code Online (Sandbox Code Playgroud) monkeypatching metaprogramming python-import python-3.x python-internals
在 的文档中torch.autograd.grad,它指出,对于参数,
参数:
输出(张量序列)——微分函数的输出。
输入(张量序列)– 将返回梯度的输入(而不是累积到 .grad 中)。
我尝试以下操作:
a = torch.rand(2, requires_grad=True)
b = torch.rand(2, requires_grad=True)
c = a+b
d = a-b
torch.autograd.grad([c, d], [a, b]) #ValueError: only one element tensors can be converted to Python scalars
torch.autograd.grad(torch.tensor([c, d]), torch.tensor([a, b])) #RuntimeError: grad can be implicitly created only for scalar outputs
Run Code Online (Sandbox Code Playgroud)
我想得到一个张量列表的梯度和另一个张量列表。输入参数的正确方法是什么?