将层乘以Keras中的布尔掩码,得到错误“ NoneType”对象没有属性“ _inbound_nodes”

时间:2019-03-27 21:32:59

标签: python tensorflow keras

大量关于此错误的线程,但是我似乎无法将它们应用于我的情况。这是我要做的事情的简化版本:

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是否可以在另一个参数时采用标量。是向量)

2 个答案:

答案 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)