大量关于此错误的线程,但是我似乎无法将它们应用于我的情况。这是我要做的事情的简化版本:
import numpy as np
from keras.models import Model
from keras.layers import Input, multiply, Dense, Lambda, Multiply
import keras.backend as K
一些虚拟数据:
xx = np.array([1,2,3]).reshape(3,1)
maskvec = np.array([1,2,3]).reshape(3,1)
此功能可将掩码与掩码中的值进行比较:
def compfun(x):
comp = K.equal(x[0], x[1])
return K.cast(comp, dtype = "float32")
inp = Input(shape = (1,))
lay = Dense(1)(inp)
mask = Input(shape = (1,))
m2 = Lambda(compfun)([mask, K.variable(2)]) #2 is a magic number. In my use-case it'll be in a for-loop
masked = multiply([lay, m2])
model = Model(inputs = [inp, mask], outputs = [masked])
和恐惧
AttributeError: 'NoneType' object has no attribute '_inbound_nodes'
非常感谢您对这里发生的事情有所了解!真的把我的头撞在墙上。
我尝试将compfun
的第二个参数放入数组而不是常量,但是我遇到了相同的错误(我不知道K.equal
是否可以在另一个参数时采用标量。是向量)
答案 0 :(得分:1)
您可以这样更改它:
servicea.myproject:4000
答案 1 :(得分:0)
事实证明,问题在于`Lambdas在给他们一个作为列表的参数时会窒息,因为他们不知道该函数的非层部分如何处理。我这样处理了这个问题:
for i in np.unique(loc_idx):
mask = Lambda(lambda x: K.cast(K.equal(x, i), dtype = "float32"))(loc_inp)