我正在Keras建立一个模型。我有一个输入
X = Input(shape=(input_size, ), name='input_feature')
和一个固定的预先给定的numpy矩阵D
input_size
n
。
我想在将它们输入到下一层之前连接X和D.换句话说,我需要连接X和D的每个切片以生成一个新的inpt,其预期大小应为(none, input_size, n+1)
。那么我该怎么做才能将它们连接起来呢?根据我的理解,批量大小为none
,因为当我们将数据拟合到模型时,它将适应输入X的批量大小。
答案 0 :(得分:0)
假设D是张量(如果它是某个层的输出则是张量):
X = Reshape((input_size,1))(X)
concat = Concatenate()([D,X])
如果D不是张量:
import keras.backend as K
#create a tensor:
Dval = K.variable(numpyArrayForD)
#create an input for D:
D = Input(tensor=Dval)
#do as in the top of this answer.
如果你想避免额外的Input
(由于tensor
参数,它不会影响训练的方式),你可以使用lambda图层:
def concatenation(x):
D = K.variable(D_df)
return K.concatenate([x,D])
XD = Lambda(concatenation,output_shape=(input_size,n+1))(X)
在这种情况下,它可能会更好地复制D多次。您可以在创建K.variable
之前使用numpy函数在模型外部执行此操作(请参阅其他答案),如下所示:
D_df = D_df.reshape((1,input_size,n))
D_df = numpy.repeat(D_df,batch,axis=0)
但是这种方法要求您事先适应x的大小。 如果你想要的东西适应任何尺寸的X而不必改变D,那么它就更复杂了....