Keras中的列式操作

Keras中的列式操作,keras,Keras,假设我有一个向量v和一个矩阵M——它们不是输入,而是由其他运算产生的中间张量。我想做一个逐列操作,也就是说,对M的每一列应用一个函数f i=1的运算(v,M)=[f(v,M[:,i])。。N 我所做的是以下(伪代码): 对于i范围(K.int_形状(M))[1]: 列=λ(λx:x[:,i])(M) ... ... 我发现,在运行时(即model.fit())期间,for循环中的列是相同的,而不是检索每个列。我怀疑Lambda(Lambda x:x[:,I])不是在Keras中检索列的正确方

假设我有一个向量v和一个矩阵M——它们不是输入,而是由其他运算产生的中间张量。我想做一个逐列操作,也就是说,对M的每一列应用一个函数f

i=1的运算(v,M)=[f(v,M[:,i])。。N

我所做的是以下(伪代码):

对于i范围(K.int_形状(M))[1]:
列=λ(λx:x[:,i])(M)
...  ...
我发现,在运行时(即model.fit())期间,for循环中的列是相同的,而不是检索每个列。我怀疑Lambda(Lambda x:x[:,I])不是在Keras中检索列的正确方法


在Keras中,在矩阵中执行列操作的正确方法是什么?

我发现了一个问题。Python中的lambda函数执行延迟求值。也就是说,它不是在声明时而是在执行时在lambda函数中设置i的值。这就是为什么所有Lambda层都试图检索最后一列的原因


当我将lambda函数定义更改为
column=lambda(lambda j:lambda x:x[:,j](I))(M)
时,它现在可以工作了

根据您的
f
,最好不要使用任何循环。但只有知道f才能肯定地说这是可能的。(通常是这样)例如,如果运算是求和、乘法等,只要正确地重塑张量,就可以在一行中完成。
for i range(K.int_shape(M))[1]:
    column = Lambda(lambda x:x[:,i])(M) 
    ... <a code performing f(v, column)> ...