Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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中的特征矩阵?_Python_Keras - Fatal编程技术网

Python 如何将一行和一列特征成对组合成keras中的特征矩阵?

Python 如何将一行和一列特征成对组合成keras中的特征矩阵?,python,keras,Python,Keras,在keras中,使用函数API,我有两个独立的层(张量)。第一个是特征列表的行向量,另一个是特征列表的列向量。为简单起见,假设它们是这样创建的: rows = 5 cols = 10 features = 2 row = Input((1, cols, features)) col = Input((rows, 1, features)) 现在我想以一种方式“合并”这两个层,结果是一个5行10列的矩阵(基本上是通过1x10矩阵乘法进行5x1),其中矩阵的每个条目都是行和列向量的每个可能组合的

在keras中,使用函数API,我有两个独立的层(张量)。第一个是特征列表的行向量,另一个是特征列表的列向量。为简单起见,假设它们是这样创建的:

rows = 5
cols = 10
features = 2

row = Input((1, cols, features))
col = Input((rows, 1, features))
现在我想以一种方式“合并”这两个层,结果是一个5行10列的矩阵(基本上是通过
1x10
矩阵乘法进行
5x1
),其中矩阵的每个条目都是行和列向量的每个可能组合的串联特征列表。 换句话说,我正在寻找一些
合并层
,它们将我的
层合并到一个
矩阵
形状层
(行、列、2*特征)

cols=rows=2的示例:

row = [[[1,2]], [[3,4]]]
col = [[[5,6],
        [7,8]]]

matrix = [[[1,2,5,6], [3,4,5,6]],
          [[1,2,7,8], [3,4,7,8]]]

我假设这个解决方案(如果可能的话)会以某种方式利用
层和一些
重塑
和/或
置换
,但我无法理解。

可以重复元素,然后连接

from keras.layers import Input, Lambda, Concatenate
from keras.models import Model
import keras.backend as K

rows = 2
cols = 2
features = 2

row = Input((1, cols, features))
col = Input((rows, 1, features))

row_repeated = Lambda(lambda x: K.repeat_elements(x, rows, axis=1))(row)
col_repeated = Lambda(lambda x: K.repeat_elements(x, cols, axis=2))(col)
out = Concatenate()([row_repeated, col_repeated])

model = Model(inputs=[row,col], outputs=out)
model.summary()
实验:

import numpy as np

x = np.array([1,2,3,4]).reshape((1, 1, 2, 2))
y = np.array([5,6,7,8]).reshape((1, 2, 1, 2))
model.predict([x, y])

#array([[[[1., 2., 5., 6.],
#         [3., 4., 5., 6.]],
#
#        [[1., 2., 7., 8.],
#         [3., 4., 7., 8.]]]], dtype=float32)
import numpy as np

x = np.array([1,2,3,4]).reshape((1, 1, 2, 2))
y = np.array([5,6,7,8]).reshape((1, 2, 1, 2))
model.predict([x, y])

#array([[[[1., 2., 5., 6.],
#         [3., 4., 5., 6.]],
#
#        [[1., 2., 7., 8.],
#         [3., 4., 7., 8.]]]], dtype=float32)