繁体   English   中英

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

[英]Multiply a layer by a boolean mask in Keras, getting error 'NoneType' object has no attribute '_inbound_nodes'

关于此错误的线程很多,但我似乎无法将它们应用于我的情况。 这是我正在尝试做的简化版本:

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可以标量)

您可以这样更改:

def compfun(x):
    comp = K.equal(x, K.variable(2))
    return K.cast(comp, dtype = "float32")


m2 = Lambda(compfun)(mask)

事实证明,问题在于`Lambdas在给他们一个作为列表的参数时会窒息,因为他们不知道该函数的非层部分如何处理。 我这样处理问题:

for i in np.unique(loc_idx): 
    mask = Lambda(lambda x: K.cast(K.equal(x, i), dtype = "float32"))(loc_inp)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM