我正在尝试找到一个变量的渐变,但由于我在手之前舍入了变量,theano的渐变函数将渐变记录为0(因为舍入是一个不连续的函数)。例如,
import theano
import theano.tensor as T
x = T.scalar()
y = T.round(x)**2
dy = T.grad(y, x)
df = theano.function(inputs=[x],outputs = dy)
print(df(3))
返回0.0,但我希望它返回2x。
有没有办法让T.round(x)的渐变像x一样?
答案 0 :(得分:1)
实际上,如果函数具有不连续的域,它不会计算(“注册”?)梯度为零:相反,梯度将是未定义的(不能区分不连续的域)。
为什么要计算舍入变量的渐变?想想这个假定的“渐变”会产生什么(如果有的话)几何感。