【发布时间】:2021-09-09 16:09:23
【问题描述】:
我正在使用 tensorflow 2.2 进行研究,并希望实现一个自定义层,该层接受向量(张量)输入并输出向量(张量)。我的输入/输出关系很复杂,我需要创建一个计算前向传递和梯度的函数。我遇到了完成这项工作的custom_gradient function。不幸的是,完全不清楚的是如何将它用于向量或张量输入和输出。特别是,我不知道如何返回雅可比矩阵或其某种形式。
举个简单的例子,假设我的自定义层计算输入 a 和权重 W(权重)的向量矩阵乘积。这就是我解决问题的方法(为简单起见,跳过初始化权重、构建等步骤)。
@tf.custom_gradient
def custom_op(A,W): # A is of size (#samples, length of input)
result = tf.matmul(A,W) # I compute the output tensor.
def custom_grad(dy):
grad = ... # I have no idea what exactly grad stores, mathematically speaking
return grad
return result, custom_grad
class CustomLayer(tf.keras.layers.Layer):
def __init__(self):
super(CustomLayer, self).__init__()
def call(self, A):
return custom_op(A, self.W) # assuming self.W are the weights
任何帮助将不胜感激。谢谢!
【问题讨论】:
标签: python tensorflow keras