Keras如何在模型中与变化的变量相乘
我目前正在尝试为Keras中的logit层创建一个遮罩。这个掩码不是静态的,当我调用model.predict时,它总是在变化。有什么方法可以实现这一点吗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
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
层包装占位符,这正是它所做的。是的,您是对的,我把它与其他东西混淆了。