Keras如何在模型中与变化的变量相乘

时间:2018-06-26 09:09:08

标签: keras

我目前正在尝试为Keras中的logit层创建遮罩。但是,此掩码不是静态的,在我调用model.predict时,它总是在变化。有什么办法可以实现?

self.mask_change = np.zeros(104)

def build_model(self):
    input = Input(shape=(14,))
    layer = Dense(32, activation='relu')(input)
    layer = Dense(32, activation='relu')(layer)
    logit = Dense(104)(layer)
    masked_logit = Lambda(lambda x: x*self.mask_change)(logit)
    output = Activation('softmax')(masked_logit)
    model = Model(input, output)
    model.compile(loss='categorical_crossentropy',optimizer=Adam(lr=self.learning_rate))

在运行时,如果我在程序中的某个地方更改self.mask_change,然后调用model.predict(),它将始终返回构建模型时self.mask_change的输出。

1 个答案:

答案 0 :(得分:0)

您可以将蒙版作为附加输入传递给模型:

def build_model(self):
    input = Input(shape=(14,))
    mask = Input(shape=(104,))
    layer = Dense(32, activation='relu')(input)
    layer = Dense(32, activation='relu')(layer)
    logit = Dense(104)(layer)
    masked_logit = logit * mask
    output = Activation('softmax')(masked_logit)
    model = Model([input, mask], output)

致电预测时,您可以每次都使用不同的掩码,model.predict([input, mask_change])。面具不再以这种方式固定在模型中。

相关问题