Я хочу поменять объекты, прежде чем передать их на другой слой. У меня есть 4 переменные, поэтому мой входной массив имеет размер (#samples, 4)
Допустим, есть следующие функции: x1, x2, x3, x4
Исключенный вывод:
Обмен1: x4, x3, x2, x1
Обмен2: x2, x3, x2, x1
…. et c
Вот что я попробовал
def toy_model():
_input = Input(shape=(4,))
perm = Permute((4,3,2,1)) (_input)
dense = Dense(1024)(perm)
output = Dense(1)(dense)
model = Model(inputs=_input, outputs=output)
return model
toy_model().summary()
ValueError: Input 0 is incompatible with layer permute_58: expected ndim=5, found ndim=2
Однако слой Permute ожидает, что массивы с несколькими измерениями будут переставлять массивы, поэтому он не выполняет свою работу. Есть ли как-нибудь решить эту проблему в кератах?
Я также пытался передать текущие функции как лямбда-слой, и я получаю ошибку
def permutation(x):
x = keras.backend.eval(x)
permutation = [3,2,1,0]
idx = np.empty_like(x)
idx[permutation] = np.arange(len(x))
permutated = x[:,idx]
return K.constant(permutated)
ValueError: Layer dense_93 was called with an input that isn't a symbolic tensor. Received type:
<class 'keras.layers.core.Lambda'>. Full input: [<keras.layers.core.Lambda object at
0x7f20a405f710>]. All inputs to the layer should be tensors.