Keras定制的非训练层用于切换输入; “一个操作的渐变为”无“

时间:2018-04-17 20:03:49

标签: python tensorflow machine-learning keras

尝试在Keras(Tensorflow后端)中实现自定义“切换”图层时遇到问题。该层需要3个输入:前两个输入是图像,第三个是一些数据,可用于确定要使用的前两个输入中的哪一个,然后将该输入传递给下一层不变。

将此图层插入模型中,所有内容都可以毫无问题地编译,但是当我适应模型时,我会收到以下消息:

  

ValueError:对于渐变,操作具有None。请确保您的所有操作都定义了渐变(即可区分)。没有渐变的常见操作:K.argmax,K.round,K.eval。

我已将问题与我的模型中包含此自定义图层分开;如果我离开图层,我可以训练(虽然不使用第二和第三个输入,因为这是它们输入的唯一层。)

以下是代码:

import numpy as np
from keras.engine.topology import Layer

class SwitchLayer(Layer):
    def __init__(self, output_dim, **kwargs):
        self.output_dim = output_dim
        super(SwitchLayer, self).__init__(**kwargs)

    def build(self, input_shape):
        super(SwitchLayer, self).build(input_shape)
        self.trainable = False


    def call(self, inputs, mask=None):
        img_one = inputs[0]
        img_two = inputs[1]


        if (np.array(inputs[2]) == np.array([1, 0])).all():
            return img_one
        return img_two

有趣的是,如果我只是在不执行检查的情况下返回img_oneimg_two,那么一切正常(但当然,我会失去所需的切换)。

0 个答案:

没有答案