gpt4 book ai didi

tensorflow - 自定义池化层 - minmax pooling - Keras - Tensorflow

转载 作者:行者123 更新时间:2023-12-05 08:40:27 25 4
gpt4 key购买 nike

我想定义我的自定义池化层,而不是像 MaxPooling 层那样返回最大值,它会输出 k 个最大值和 k 个最小值。

我正在使用 Tensorflow 作为后端。我需要对输出向量进行排序。

我正在考虑这样做:

from keras.layers.pooling import _Pooling1D

class MinMaxPooling1D(_Pooling1D):

def __init__(self, output_dim, **kwargs):
self.output_dim = output_dim
super(MinMaxPooling1D, self).__init__(**kwargs)

def _pooling_function(self, inputs, **kwargs):
sorted_ = tf.contrib.framework.sort(inputs, axis = -1)
print(sorted_)
return np.concatenate((sorted_[:,:,:self.output_dim/2], sorted_[:,:,-self.output_dim/2:]))

但后来我得到:

Tensor("min_max_pooling1d_1/sort/Neg_1:0", shape=(?, 1, 1, ?), dtype=float32)
ValueError: zero-dimensional arrays cannot be concatenated

MinMaxPooling1D 层应用于 (None, 1, 10) 形状输出。

当时我正在考虑在 MinMaxPooling1D 层之前添加一个 Flatten 层,但随后出现了尺寸问题:

ValueError: Input 0 is incompatible with layer min_max_pooling1d_5: expected ndim=3, found ndim=2

最佳答案

我没有尝试使用池化层,而是使用了 Lambda:

def top_k(inputs, k):
return tf.nn.top_k(inputs, k=k, sorted=True).values

def least_k(inputs, k):
return -tf.nn.top_k(-inputs, k=k, sorted = True).values

def minmax_k(inputs, k):
return tf.concat([least_k(inputs, k), top_k(inputs, k)], axis = -1)

model = Sequential()
...
model.add(Lambda(minmax_k, arguments={'k': R}))

关于tensorflow - 自定义池化层 - minmax pooling - Keras - Tensorflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55186762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com