我在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])
答案 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)
,这会给model
和model2
看看您的coords_in
和coords_target
的形状。