elementwise 中的name 会导致与用户期望不一致的结果
Created by: wzzju
所有的 elementwise op 有一个name的参数,如果name != None, 则output variable的name 就等于用户传入的name,这会导致 如果多个elementwise op 设置了相同的name,则他们会被强行指定的是同一个Variable,会导致与用户期望的行为不一致
复现代码如下:
import paddle.fluid as fluid
import numpy as np
x = fluid.data(name="x", shape=[1], dtype='float32')
y = fluid.data(name="y", shape=[1], dtype='float32')
z = fluid.data(name="z", shape=[1], dtype='float32')
c = fluid.layers.elementwise_add( x, y, name = "add")
fluid.layers.Print( c )
d = fluid.layers.elementwise_add( y, z, name = "add")
fluid.layers.Print( d )
h = c + d
fluid.layers.Print( h )
place = fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(feed={ "x" : np.ones( (1), "float32") * 2 , "y" : np.ones( (1), "float32" ) * 3, "z" : np.ones( (1), "float32") * 5 }, )
x = 2 y = 3 z = 5 c = 5 d = 8 h 应该等于 13,但是出现了bug,等于了16,原因是 在执行 h = c + d的时候,由于c 和d的name 是同一个,其实指向的是同一个Variable,等于第二个elementwise_add 返回的结果。