如何在Keras / Tf中实现两层张量积

时间:2019-07-24 16:28:40

标签: tensorflow keras linear-algebra

我正在尝试建立DNN进行分类,并且有一次我想将向量的张量积与自身相乘。我目前正在使用Keras功能API,但尚不清楚是否已经有一个层可以执行此操作。

我一直在尝试使用Lambda层和numpy来尝试此操作,但是它不起作用。 进行一些谷歌搜索发现 tf.linalg.LinearOperatorKronecker,这似乎也不起作用。

这是我尝试过的: 我有一个称为part_layer的层,其输出是单个向量(秩为1的张量)。

keras.layers.Lambda(lambda x_array: np.outer(x_array, x_array),) ( part_layer) )

理想情况下,我希望它采用[1,2]形式的向量并给我[[1,2],[2,4]]。 但是我收到的错误提示np.outer函数无法识别其参数:

AttributeError: 'numpy.ndarray' object has no attribute '_keras_history 

关于下一步尝试的任何想法,或者是否有简单的功能可供使用?

1 个答案:

答案 0 :(得分:1)

您可以使用两种操作:

如果要考虑批量大小,可以使用the Dot function

否则,您可以使用the dot function

在两种情况下,代码都应如下所示:

dot_lambda = lambda x_array: tf.keras.layers.dot(x_array, x_array)
# dot_lambda = lambda x_array: tf.keras.layers.Dot(x_array, x_array)
keras.layers.Lambda(dot_lamda)( part_layer)

希望获得帮助。