在Keras中,如何成对连接两个不同输入大小的输入?
作为一个激励性的例子,假设我们在一个由异质节点(例如图像和文本)组成的网络中存在一个边缘权重预测问题,并且希望将每一对可能的输入串联起来。以下是一个简单的数据示例:在Keras中,如何成对连接两个不同输入大小的输入?,keras,deep-learning,Keras,Deep Learning,作为一个激励性的例子,假设我们在一个由异质节点(例如图像和文本)组成的网络中存在一个边缘权重预测问题,并且希望将每一对可能的输入串联起来。以下是一个简单的数据示例: # two inputs of different shape x = np.array([[1, 1], [2, 2], [3, 3]]) y = np.array([[4, 4, 4], [5, 5, 5]]) # a predicted fe
# two inputs of different shape
x = np.array([[1, 1],
[2, 2],
[3, 3]])
y = np.array([[4, 4, 4],
[5, 5, 5]])
# a predicted feature we'd like to model
z= np.array([0, 1, 1, 0, 0, 0])
joined = np.array([[1, 1, 4, 4, 4],
[1, 1, 5, 5, 5],
[2, 2, 4, 4, 4],
[2, 2, 5, 5, 5],
[3, 3, 4, 4, 4],
[3, 3, 5, 5, 5]])
some_model.fit(inputs=[x,y], outputs=z)
以及一个示例模型(以密集层显示,但在精神上,这可能是任何层或层序列):
连接是根据另一个答案和输入进行的,但我不确定是否以及如何创建这种模型
在Keras中,有没有一种简单的方法可以实现这一点?使用tf.tile()
,tf.reforme()
和tf.concat()
:
将tensorflow导入为tf
将numpy作为np导入
x_data=np.array([[1,1],
[2, 2],
[3,3]],dtype=np.float32)
y_data=np.array([[4,4,4],
[5,5,5]],dtype=np.float32)
x=tf.placeholder(tf.float32,shape=(无,2))
y=tf.placeholder(tf.float32,shape=(无,3))
xshape=tf.shape(x)
y形状=tf形状(y)
newshape=(xshape[0]*yshape[0],xshape[1]+yshape[1])
xres=tf.tile(x,倍数=[1,yshape[0]])
xres=tf.reforme(xres[newshape[0],xshape[1]]
#`x`现在是:[[1.1]
# [1. 1.]
# [2. 2.]
# [2. 2.]
# [3. 3.]
# [3. 3.]]
yres=tf.tile(y,倍数=[xshape[0],1])
#'y'现在是:[[4.4.4]
# [5. 5. 5.]
# [4. 4. 4.]
# [5. 5. 5.]
# [4. 4. 4.]
# [5. 5. 5.]]
res=tf.concat([xres,yres],axis=1)#
z是做什么的?哎呀,省去了:)一个我们想作为输出建模的预测功能,编辑以反映。谢谢!你的回答让我意识到我的问题并不是为了解决我真正的问题而写的,这有助于我把注意力集中在我真正想做的事情上。干杯好的,我来看看。