我想知道为什么这个“残留”张量的行为就像使用深拷贝吗?在火炬

问题描述

我正在执行MT任务的标准转换器模型。

我在查看代码时发现了一些奇怪的东西。

在下面的代码中,“残留”张量的行为就像是通过Deepcopy函数创建的。

但是,我发现通过“ =”复制的张量被视为浅复制函数

我想知道为什么这个“残留”张量的行为就像使用深拷贝吗?

代码

residual = x

print("1residual[0][0][::5]",residual[0][0][::5])               
print("1x[0][0][::5]",x[0][0][::5])  

x,_ = self.multiheadattn(
                query=x,key=sub_x,value=sub_x,key_padding_mask=encoder_padding_mask,incremental_state=None,static_kv=True,need_weights=False,need_head_weights=False,)
                
print("2residual[0][0][::5]",residual[0][0][::5])        
print("2x[0][0][::5]",x[0][0][::5])

x = residual + x

输出

1residual[0][0][::5] tensor([ 1.3521,1.3306,-1.1453,-0.1397,-2.2784,-1.1663,-0.5153,1.5583,0.1059,0.6325,0.2289,1.6822,0.9763,0.4017,-1.4673,-1.5497,-0.6318,0.0108,-1.6200,1.3530,-0.1374,-1.7577,0.1391,0.0248,-0.8227,0.4263,0.8211,1.4342,-0.5377,-0.5277,-0.0795,-0.5049,-0.5339,-0.6436,-0.4398,0.5060,-0.1911,0.7437,2.5046,-2.8393,1.1571,0.1106,-0.2168,0.4713,1.1808,0.2489,-0.7536,-0.0453,-0.2402,-0.5716,1.2411,-2.4182,-0.1383,-2.1117,0.0493,0.6261,-0.1686,-2.0018,0.7831,-1.4499,0.8209,-0.5233,0.7590,1.9428,-0.5897,0.2109,1.0017,-0.4491,0.6002,1.1454,1.2466,-0.1256,0.5996,1.4363,-1.6691,0.6059,0.3088,-0.6391,-0.3145,1.2027,-0.4174,-0.0501,-0.3436,0.4720,-0.2447,0.5388,1.4538,-0.7511,0.1187,-0.1979,1.0719,2.0763,-0.7202,0.3722,1.1610,-0.2179,-0.7530,0.3527,0.6980,0.9341,1.0412,0.0147,-0.2960],device='cuda:0',grad_fn=<SliceBackward>)
1x[0][0][::5] tensor([ 1.3521,grad_fn=<SliceBackward>)
2residual[0][0][::5] tensor([ 1.3521,grad_fn=<SliceBackward>)
2x[0][0][::5] tensor([ 0.1738,0.6783,-0.2968,1.1303,0.6132,-0.5918,0.2267,-0.3374,-0.5745,0.1530,0.0043,0.6083,0.3553,-0.5386,-0.2723,0.0015,0.2741,0.6016,0.4180,-0.6023,-0.6721,-0.9145,-0.6082,-0.4389,0.8483,-0.0562,-0.5399,-1.0523,-0.6536,-0.0798,0.2746,-0.0280,0.7279,-0.6152,-0.5345,-0.3318,-1.1347,0.3154,0.1172,-0.0724,0.1864,0.3994,-0.4004,0.2400,-0.7960,0.9199,-1.3849,-0.8970,0.2758,-0.8580,0.4118,-1.1278,0.3327,0.6214,-0.2227,0.2295,0.1727,0.5949,0.6832,0.0175,0.7517,-0.0953,0.3625,-0.3285,-1.1618,0.3990,-0.0499,0.8074,-0.6752,-0.4328,0.1844,-0.3171,-1.1403,-0.2506,0.5167,-0.1901,0.6843,0.3155,0.0033,-0.0223,0.8267,0.1425,-0.3694,-0.0446,-0.5382,-0.0374,0.5072,-0.3962,-0.2341,0.2888,0.3623,0.7051,-0.3522,-0.7652,-0.8573,-0.5052,-0.1593,-0.6634,0.2140,0.2003,0.2761,-0.5391],grad_fn=<SliceBackward>)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...