gpt4 book ai didi

python - 如何在Tensorflow中将向量转换为单位向量

转载 作者:行者123 更新时间:2023-12-04 19:00:58 24 4
gpt4 key购买 nike

这是一个非常简单的问题,我似乎无法弄清楚。我正在使用形状为 [100, 250] 的输出张量。我希望能够在百位中的任何位置访问 250 维数组并单独修改它们。我发现的 tensorflow 数学工具要么对整个张量进行逐元素修改,要么进行标量修改。但是,我正在尝试对张量的子集进行标量修改。

编辑:

这是我想用 tensorflow 方法重新创建的 numpy 代码:

update = sess.run(y, feed_dict={x: batch_xs})
for i in range(len(update)):
update[i] = update[i]/np.sqrt(np.sum(np.square(update[i])))
update[i] = update[i] * magnitude

这个for循环在250-D而不是3-D中遵循这个公式
Unit vector formula, which is the first line of the for-loop
.然后,我将每个单位向量乘以大小,以将其重新整形为我想要的长度。

所以这里更新的是 numpy [100, 250] 维度的输出。我想将每个 250 维向量转换为其单位向量。这样我就可以将它的长度更改为我选择的大小。使用这个 numpy 代码,如果我运行我的 train_step 并将更新传递给我的占位符之一
sess.run(train_step, feed_dict={x: batch_xs, prediction: output}) 

它返回错误:
No gradients provided for any variable

这是因为我已经在 numpy 中完成了数学运算并将其移植回 tensorflow。 Here是一个相关的 stackoverflow 问题,没有得到回答。

tf.nn.l2_normalize非常接近我正在寻找的,但它除以最大平方和的平方根。而我试图将每个向量除以其自己的平方和。

谢谢!

最佳答案

这里没有真正的技巧,你可以像在 numpy.
唯一需要确定的是 norm形状为 [100, 1]使其在x / norm 分区中播放良好.

x = tf.ones([100, 250])

norm = tf.sqrt(tf.reduce_sum(tf.square(x), axis=1, keepdims=True))
assert norm.shape == [100, 1]

res = x / norm

关于python - 如何在Tensorflow中将向量转换为单位向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38061080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com