Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Keras如何在模型中与变化的变量相乘_Keras - Fatal编程技术网

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

Keras如何在模型中与变化的变量相乘,keras,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='re

我目前正在尝试为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\u change,然后调用model.predict(),它将始终返回生成模型时self.mask\u更改的输出。

您可以将掩码作为额外输入传递到模型:

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)

调用predict时,每次都可以传递不同的掩码,
model.predict([input,mask\u change])
。掩码不再以这种方式固定在模型中。

当这种方式起作用时(我不得不使用Lambda进行logit*掩码操作),真的没有其他方法吗?例如,如果我的模型有20个这样的变量,将它们全部作为输入传递将是非常痛苦的…您可以再次作为单个输入传递,然后对其进行切片,因此如果您使用两个掩码
input(shape=(104*2,)
然后切片
m1=masks[:105]
。我的意思是如果它们是不同的变量(大小、类型等)。在tensorflow中,您似乎可以使用self访问图形之外的变量。无论名称是什么(可能只是首先需要占位符),这对于keras模型构建是不可能的吗?
Input
层包装占位符,这正是它所做的。是的,您是对的,我把它与其他东西混淆了。