Custom Layer Keras: преобразование вывода в определенных позициях - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь написать пользовательский слой в Keras (с бэкэндом тензорного потока), который делает определенные позиции двоичными.

Например, предположим, что у меня есть [0.6,0.8,0.9,0.2] и что позиции 1 и 3 должны быть двоичными, я хотел бы иметь слой, который выводит [0.6,1,0.9,0]

например, output [pos]> 0.5, затем output [pos] = 1, иначе output [pos] = 0

Я написал это, но это не работает вообще ...

...Layers of the net...
x = Lambda(self.adjust_positions)(x)

здесь функции, которые я написал

    def update_1(self, x, pos):
        with tf.control_dependencies([tf.assign(x[pos],[1])]):
                return tf.identity(x)

    def update_0(self, x, pos):
        with tf.control_dependencies([tf.assign(x[pos],[0])]):
                return tf.identity(x)

    def adjust_positions(self, x):
        for pos in indexes:
            tf.cond(tf.gather(x, pos)<[0.5], self.update_0(x, pos), self.update_1(x,pos))
        return x

Я получаю ошибку:

ValueError: Sliced assignment is only supported for variables
     55     def update_0(self, x, pos):
---> 56         with tf.control_dependencies([tf.assign(x[pos],[0])]):
     57                 return tf.identity(x)

Как я могу реализовать эту функцию?Что я сделал разумно?

...