Python Tensorflow Keras在tf.math.pow中学习指数
我试图创建一个层来学习幂函数的指数。我的Keras层如下所示:Python Tensorflow Keras在tf.math.pow中学习指数,python,tensorflow,keras,Python,Tensorflow,Keras,我试图创建一个层来学习幂函数的指数。我的Keras层如下所示: class-density\u电源(层): 定义初始(自我,**kwargs): 超级(高密度、自功率)。\uuuuu初始值(**kwargs) def构建(自我,输入_形状): self.kernel=self.add_weight('kernel', 形状=(输入形状[1],), initializer=tf.keras.initializers.glorot_uniform(), 可培训=真实) #为该层创建可训练重量变量。
class-density\u电源(层):
定义初始(自我,**kwargs):
超级(高密度、自功率)。\uuuuu初始值(**kwargs)
def构建(自我,输入_形状):
self.kernel=self.add_weight('kernel',
形状=(输入形状[1],),
initializer=tf.keras.initializers.glorot_uniform(),
可培训=真实)
#为该层创建可训练重量变量。
自功率=自加重量(“功率”,
形状=(输入形状[1],),
initializer=tf.keras.initializers.glorot_uniform(),
可培训=真实)
超级(密集的力量,自我)。构建(输入形状)#最后一定要调用这个
def呼叫(自我,x):
power_val=tf.math.pow(x,self.power)
dot\u prod=tf.linalg.matmul(power\u val,self.kernel)
返回点
def计算输出形状(自身、输入形状):
返回(输入形状[0],输入形状[1])
然而,当我尝试训练网络时,我的损失是很小的。为什么会这样?
我的模型是
inp=Input(shape=(1,))
x=密集功率(1)(inp)
模型=模型(inp,x)
model.compile(优化器='rmsprop',
损失='mse')
x_序列=np.随机均匀(-10010020000000)
y_列车=9.82*x_列车**2
型号.配合(x\U系列、y\U系列、批量大小=1024)
起初,我认为Tensorflow无法将梯度传播到tf.math.pow的指数,但是我使用
使用tf.GradientTape()作为磁带:
x=tf.变量(2.0)
功率=tf.变量(3.0)
x_pow=tf.math.pow(x,pow)
损耗=tf.减少平均值(x_功率**2)
梯度=磁带梯度(损耗,[x,功率])
打印(渐变)
[, ]
这是不是Keras不传播梯度的问题