我正在尝试使用Keras的函数式API实现一个自定义层。我的想法是转置卷积算子。目前我得到了以下代码:
k1 = self.tied_to.kernel self.kernel = K.transpose(k1)
如果我只是传递前一层的卷积核而不对其做任何处理,代码是可以工作的。卷积核的形状定义为3×3,因此转置它应该可以很好地工作。但问题是卷积核的形式是一个形状为3x3x1x1的张量,而K.transpose
会转置整个张量。我该如何只转置卷积核本身,以便再次得到一个形状为3x3x1x1的卷积核呢?
回答:
你应该使用K.permute_dimensions
。
我不确定你想转置什么,但我看到了两种可能性。
- 转置空间维度(卷积核识别与原始卷积核相同的事物,但方向不同):
K.permute_dimensions(k1, (1,0,2,3))
- 转置输入和输出通道(可能是为了在某种反向层中使用卷积核 – 不知道这种层是否存在,但…):
K.permute_dimensions(k1, (0,1,3,2))