自定义图层Keras:在某些位置转换输出

时间:2018-10-22 08:19:32

标签: python tensorflow keras keras-layer

我正在尝试在Keras(带有tensorflow后端)中编写一个自定义层,以使某些位置变为二进制。

例如,假设我有[0.6,0.8,0.9,0.2]并且位置1和3必须为二进制,我想有一个输出[0.6,1,0.9,0]的层

例如输出[pos]> 0.5,然后输出[pos] = 1,否则输出[pos] = 0

我写了这个,但是根本没用...

Binds
@IntoMap
@ViewModelKey(ModeMenuViewModel::class)
abstract fun bindModeMenuViewModel(modeMenuViewModel: ModeMenuViewModel): ViewModel

这里是我编写的功能

...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

如何实现此功能?我所做的是合理的吗?

0 个答案:

没有答案