【问题标题】:How can I compare if column equals in a matrix multiplication mannar?如何比较矩阵乘法中的列是否等于?
【发布时间】:2017-04-24 14:55:43
【问题描述】:

我正在使用 Keras(tensorflow 作为后端)。我想要做的是编写一个 lambda 层,它获取 2 个张量输入并使用 Indicator 函数比较它们中 2 列的每个组合,并生成一个具有 0-1 值的新张量。这是一个例子。

输入: x = K.variable(np.array([[1,2,3],[2,3,4]])), y = K.variable(np.array([[1,2,3],[2,3,4]]))

输出 z=K.variable(np.array[[1,0],[0,1]])

据我所知,tensorflow 提供tf.equal() 以逐元素方式比较张量。但是如果我在这里应用它,我会得到

>>> z=tf.equal(x,y)
>>> K.eval(z)
array([[True,  True, True],
       [True,  True, True]], dtype=bool)

它只比较相同位置的张量。

所以我的问题是:

1. 是否有 tensorflow API 来获得我想要的输出,或者我是否需要编写自己的函数来完成它?

2. 如果是后者,那就是另一个问题了。我注意到在 keras 中输入是小批量的,所以输入格式看起来像:(None, m, n)。在编写自己的方法时,如何处理第一个维度,即None

任何回复将不胜感激!

【问题讨论】:

    标签: tensorflow keras matrix-multiplication


    【解决方案1】:

    你可以使用broadcasting

    import numpy as np
    import tensorflow as tf
    
    x = tf.constant(np.array([[1,2,3],[2,3,4]]))
    y = tf.constant(np.array([[1,2,3],[2,3,4]]))
    
    x_ = tf.expand_dims(x, 0)
    y_ = tf.expand_dims(y, 1)
    res = tf.reduce_all(tf.equal(x_, y_), axis=-1)
    
    sess = tf.Session()
    sess.run(res)
    

    【讨论】:

    • 感谢您的回答!有用!但是我仍然想知道为什么xy的尺寸不一样时tf.equal()在这里起作用。你能解释一下吗?
    • 那里有广播的解释:tensorflow.org/performance/xla/broadcasting。 (编辑我的帖子以在此处添加链接)。
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 2014-07-14
    • 2016-07-31
    • 2019-10-08
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 2019-09-22
    相关资源
    最近更新 更多