如何解决运行时错误“目前仅由用户(图叶)明确创建的张量支持深度复制协议”

问题描述 投票:2回答:1

我想使用NN的输出变量作为另一个函数的输入,但是遇到了这样的错误:“目前只有用户(图形叶子)显式创建的张量才支持Deepcopy协议。输出变量需要渐变。

我尝试通过将输出变量更改为numpy值,但是在这种情况下,反向传播不起作用,因为它将numpy值视为不需要渐变的变量。]​​>

output = model(SOC[13])

# Three output values of NN
Rs=output[0]
R1=output[1]
C1=output[2]

# Using these variables in another function

num1=[Rs*R1*C1,R1+Rs]
den1=[C1*R1,1]
G = control.tf(num,den)

它应该工作,但是会出错。

     14             num=[Rs*R1*C1,R1+Rs]
     15             den=[C1*R1,1]
---> 16             G = control.tf(num,den)
~\Anaconda3\lib\site-packages\control\xferfcn.py in __init__(self, *args)
    106 
    107         """
--> 108         args = deepcopy(args)
    109         if len(args) == 2:
    110             # The user provided a numerator and a denominator.
~\Anaconda3\lib\site-packages\torch\tensor.py in __deepcopy__(self, memo)
     16     def __deepcopy__(self, memo):
     17         if not self.is_leaf:
---> 18             raise RuntimeError("Only Tensors created explicitly by the user "
     19                                "(graph leaves) support the deepcopy protocol at the moment")
     20         if id(self) in memo:

我想使用NN的输出变量作为另一个函数的输入,但是遇到这样的错误'仅由用户(图叶)显式创建的张量在...支持深度复制协议...]

pytorch python-2.5
1个回答
0
投票

我曾经遇到过类似的问题。简而言之,该错误是由Deepcopy引起的,它不适用于非叶子节点。您可以打印Rs,R1和C1来检查它们是否是叶节点。

如果它们是叶节点,则存在“ requires_grad = True”,而不是“ grad_fn = SliceBackward”或“ grad_fn = CopySlices”。我猜非叶节点具有grad_fn

© www.soinside.com 2019 - 2024. All rights reserved.