Keras Lambda层输出大小错误

时间:2018-09-27 06:43:05

标签: python tensorflow keras

我在lambda层中有2个输入,一个大小为(2,3,),另一个大小(3,)。 lambda层应返回大小为2的输出,但是执行乘法层时会发生以下错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError:尺寸必须相等,但对于输入形状为[[,2],[?, 3]的'multiply_1 / mul'(op:'Mul'),尺寸应为2和3 ]。

下面是相关代码,感谢您的帮助:

import numpy as np
from keras.models import Model
from keras import backend as K
from keras.engine.topology import Layer
from keras.layers import Dense,Input,concatenate,Lambda,multiply,add
import tensorflow as tf
import time
def weights_Fx(x):
    j = x[0][:,0]
    k = x[1][0]
    y = j - k
    return y
def sum_layer(x):
    x = tf.reduce_sum(x)
    return x
type1_2 = Dense(units=1, activation = 'relu',name = "one")
type1_3 = Dense(units=1,activation = 'relu',name = "two")
in1 = Input(shape=(1,))
in2 = Input(shape=(1,))
n1 = type1_2(in1)
n2 = type1_3(in2)
model = concatenate([n1,n2],axis=-1,name='merge_predicitions')
coords_in = Input(shape=(2,3,))
coords_target = Input(shape=(3,))
model2 = Lambda(weights_Fx,output_shape=(2,),name='weightsFx')([coords_in,coords_target])
model = multiply([model,model2])
model = Lambda(sum_layer)(model)
model = Model(inputs=[in1,in2,coords_in,coords_target],outputs=[model])

2 个答案:

答案 0 :(得分:1)

问题在于我如何索引数组。重要的是要记住,尽管数据的形状为(2,3),但是keras会创建形状为(None,2,3)的张量,因此要执行所需的操作,需要以下内容:

y = x[0][:,:,0]-x[1][:,0]

此外,为了防止张量的等级(维数)减少1,在“求和层”中需要执行以下操作:

y = K.sum(x,axis=1,keepdims=True)

答案 1 :(得分:0)

您的Lambda层不返回形状为2的输出,而是返回形状为3的输出。 Model2的形状是(,3)而不是(,2),这会给modelmodel2

的乘积带来误差

看看您的coords_incoords_target的形状。