我有一个模型,其中有“分类”和“回归”之类的部分。我使用乘法层合并它们。在执行乘法之前,我想根据阈值将分类部分的输出设置为 0 或 1。我尝试将 Lambda 层与自定义函数一起使用,如下所示,但是我遇到了各种错误,并且我对这些错误一无所知。在我进行过程中一一解决它们并不能增加我的理解。谁能解释如何定义修改值的自定义 Lambda 层函数?
我当前的 Lambda 层函数:(由于无法工作FailedPreconditionError: Attempting to use uninitialized value lstm_32/bias
)
def func(x):
a = x.eval(session=tf.Session())
a[x < 0.5] = 0
a[x >= 0.5] = 1
return K.variable(a)
回归部分:
input1 = Input(shape=(1, ))
model = Sequential()
model.add(Embedding(vocab_size + 1, embedding, input_length=1))
model.add(LSTM(hidden, recurrent_dropout=0.1, return_sequences=True))
model.add(LSTM(6))
model.add(Reshape((3,2)))
model.add(Activation('linear'))
分类部分:
input2 = Input(shape=(1, ))
model2 = Sequential()
model2.add(Embedding(vocab_size + 1, embedding, input_length=1))
model2.add(LSTM(hidden, recurrent_dropout=0.1, return_sequences=True))
model2.add(LSTM(1))
model2.add(Activation('sigmoid'))
model2.add(???) # need to add 0-1 thresholding here
合并两部分:
reg_head = model(input1)
clf_head = model2(input2)
merge_head = multiply(inputs=[clf_head, reg_head])
m2 = Model(inputs=[input1, input2], outputs=merge_head)