零维数组不能串联,但我的数组不是零维数组

时间:2019-07-08 08:12:07

标签: python numpy tensorflow

使用np.concatenate时遇到错误。我正在使用的代码是:

def get_angles(pos, i, d_model):
    angle_rates = 1 / np.power(10000, (2 * (i // 2)) / np.float32(d_model))
    return pos * angle_rates


def positional_encoding(position, d_model):
    angle_rads = get_angles(np.arange(position)[:, np.newaxis],
                            np.arange(d_model)[np.newaxis, :],
                            d_model)

    sines = tf.math.sin(angle_rads[:, 0::2])
    cosines = tf.math.cos(angle_rads[:, 1::2])

    pos_encoding = np.concatenate([sines, cosines], axis=-1)
    pos_encoding = pos_encoding[np.newaxis, ...]

    return tf.cast(pos_encoding, dtype=tf.float32)

引起问题的代码行是函数np.concatenate中的positional_encoding部分。当程序碰到该部分时,它就会吐出

ValueError: zero-dimensional arrays cannot be concatenated

但是当我检查sinescosines的尺寸时,它们的尺寸均为(50, 25)

执行这些操作时是否缺少某些东西?

谢谢。

修改

position = 50

d_model = 512

1 个答案:

答案 0 :(得分:1)

我不知道张量流很好,但是可能是因为sinescosinesTensor对象,尚未(尚未)评估,而np.concatenate是一个NumPy函数需要常规(即已评估)数组?