Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras'中的错误;与常数非张量数相加或相乘时的lambda层_Python_Tensorflow_Lambda_Keras_Layer - Fatal编程技术网

Python Keras'中的错误;与常数非张量数相加或相乘时的lambda层

Python Keras'中的错误;与常数非张量数相加或相乘时的lambda层,python,tensorflow,lambda,keras,layer,Python,Tensorflow,Lambda,Keras,Layer,我尝试自定义设计一个网络体系结构,我可以有一个层,如下所示: x = k.Input(shape=(1,)) y = k.layers.Dense(1)(x + 1) #k.backend.constant(1) -- no difference Fx = k.models.Model(x, y) 虽然“x+1”是正确的Tensorflow操作,但我得到了非类型错误: AttributeError:“非类型”对象没有属性“\u入站节点” 当我试图使用Lambda层来避免这种情况时,我得到了相

我尝试自定义设计一个网络体系结构,我可以有一个层,如下所示:

x = k.Input(shape=(1,))
y = k.layers.Dense(1)(x + 1)  #k.backend.constant(1) -- no difference
Fx = k.models.Model(x, y)
虽然“x+1”是正确的Tensorflow操作,但我得到了非类型错误:

AttributeError:“非类型”对象没有属性“\u入站节点”

当我试图使用Lambda层来避免这种情况时,我得到了相同的错误:

x = k.Input(shape=(1,))
xx = k.layers.Lambda(lambda x: x[0] + x[1])(
    [x, k.backend.constant(1, shape=(1,1))]
)
y = k.layers.Dense(1)(xx)
Fx = k.models.Model(x, y)
但是,我可以通过以下方式解决此问题:

x = k.Input(shape=(1,))
xx = k.layers.Lambda(lambda x: x[0]+1)([x, x])
y = k.layers.Dense(1)(xx)
Fx = k.models.Model(x, y)
因为Tensor+(int或float)是合法的Tensorflow操作


我是在定义Lambda层时犯了错误还是这是Keras端的一个bug

我不知道你为什么从

x+1

x[0]+1
如果您只想在通过密集层之前向
x
中的元素添加1,则可以像下面这样应用lambda层:

x=k.Input(shape=(1,))
xx=k.layers.Lambda(Lambda x:x+1)(x)
y=k.层密(1)(xx)
Fx=k.models.Model(x,y)

y=k.layers.densed(1)(x+1)
不正确的原因是+1是有效的张量运算。根据Keras层定义的Keras模型;不是张量。因此您需要使用
x\u p=Lambda(Lambda x:x+1)(x)
。 后者是指定所需操作的正确方法


i、 lambda x:x+1是对张量的操作,而lambda()实例化一个层。层是Keras跟踪层/图形构造之间的依赖关系等的方式。例如,当Keras构建图形,然后计算输出形状时,lambda层将知道其输入形状的格式。在您的情况下,形状是相似的,但例如,您可以使用执行张量切片操作的lambda函数并更改输出形状。

您是对的!最初我是用keras.layers.Add进行测试的,它需要一个至少包含两个项目的列表作为输入。感谢您的评论,非常有用!