R-具有权重约束的自定义Keras层

R-具有权重约束的自定义Keras层,r,tensorflow,machine-learning,keras,deep-learning,R,Tensorflow,Machine Learning,Keras,Deep Learning,我正在尝试编写一个自定义Keras层,其中包含R中的可训练权重: 获取输入向量x并返回值expA*x*A,其中$A$是对角的且可训练的。。 其中exp是矩阵指数映射 请注意,了解批次大小的位置非常重要,层不能具有基于批次大小的权重,除非您使用批次形状或批次输入形状而不是形状定义输入-这将迫使您在模型中使用固定的批次大小。由于批量大小通常用于单个和独立样本,因此在操作和混合样本时使用批量大小是不健康的 这就是说,我假设这里的X具有shapebatch,dim,dim,并且A将具有shapedim,

我正在尝试编写一个自定义Keras层,其中包含R中的可训练权重:

获取输入向量x并返回值expA*x*A,其中$A$是对角的且可训练的。。
其中exp是矩阵指数映射

请注意,了解批次大小的位置非常重要,层不能具有基于批次大小的权重,除非您使用批次形状或批次输入形状而不是形状定义输入-这将迫使您在模型中使用固定的批次大小。由于批量大小通常用于单个和独立样本,因此在操作和混合样本时使用批量大小是不健康的

这就是说,我假设这里的X具有shapebatch,dim,dim,并且A将具有shapedim,dim

为此,您可以构建一个自定义图层,如下所示:

其中build将有一个内核,其形状为1,dim,1-

因此,我们将不使用对角线,而是使用元素乘法的广播技巧:

    call = function(x, mask = NULL) {
      kernelTransposed <- tf$reshape(self$kernel, shape(1L, 1L, -1L)) #(1, 1, dim)
      B <- self$kernel * kernelTransposed #(1, dim, dim)
      tf$math$exp(x * B)
    },

什么意思?这就是R返回的结果me@DanielMöller抱歉,我当时真的是新手,所以我不明白问题是*矩阵乘法还是元素乘法?你能描述一下a和X的维数吗,包括批量大小?这是一个矩阵乘法,a和X都是平方d X d矩阵d>0一个整数。我有点困惑函数矩阵指数表达式在哪里?@AIM\u BLB,对不起,我忘了表达式,它现在在答案中。我不明白这个问题。。。。只有经验?使用一个Lambda层和一个只调用exp的函数。你不需要它是keras。Keras完全建立在tensorflow之上,所以您可以使用tf$linalg$expm,就像我使用tf$math$exp一样。我不使用R,但看起来就是这样:
#supposing A has the elements [a, b, c, ...] in the diagonals,

B is:
[ [aa, ab, ac, ...],
  [ab, bb, bc, ...],
  [ac, bc, cc, ...],
  ...
]
    call = function(x, mask = NULL) {
      kernelTransposed <- tf$reshape(self$kernel, shape(1L, 1L, -1L)) #(1, 1, dim)
      B <- self$kernel * kernelTransposed #(1, dim, dim)
      tf$math$exp(x * B)
    },
    compute_output_shape = function(input_shape) {
      input_shape
    }