gpt4 book ai didi

python - 从 tensorflow 中的两个现有张量构造一个新张量

转载 作者:行者123 更新时间:2023-12-01 01:47:08 25 4
gpt4 key购买 nike

我想构造一个新的张量 y有形状(b,n,c)来自现有张量 x有形状(b,m,c)m<n和索引张量 idx有形状(b,m)它告诉我 x 中的每一行(长度 c )将其放在 y 的哪里.

numpy 示例:

import numpy as np
b=2
n=100
m=4
c=3
idx=np.array([[0,31,5,66],[1,73,34,80]]) # shape b x m
x=np.random.random((b,m,c))
y=np.zeros((b,n,c))
for i,cur_idx in enumerate(idx):
y[i,cur_idx]=x[i]

这会产生一个数组 y除了 idx 给出的位置之外,它到处都是零其中值来自 x已插入。

我需要帮助将此代码片段“翻译”为 tensorflow 。

编辑:我不想创建变量而是创建常量张量,因此无法使用 tf.scatter_update。

最佳答案

您需要tf.scatter_nd :

import tensorflow as tf
import numpy as np

b = 2
n = 100
m = 4
c = 3

# Synthetic data
x = tf.reshape(tf.range(b * m * c), (b, m, c))
# Arbitrary indices: [0, 25, 50, 75], [1, 26, 51, 76]
idx = tf.convert_to_tensor(
np.stack([np.arange(0, n, n // m) + i for i in range(b)], axis=0))

# Add index for the first dimension
idx = tf.concat([
tf.tile(tf.range(b, dtype=idx.dtype)[:, tf.newaxis, tf.newaxis], (1, m, 1)),
idx[:, :, tf.newaxis]], axis=2)

# Scatter operation
y = tf.scatter_nd(idx, x, (b, n, c))
with tf.Session() as sess:
y_val = sess.run(y)
print(y_val[:, 20:30, :])

输出:

[[[ 0  0  0]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
[ 3 4 5]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]]

[[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
[15 16 17]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]]]

关于python - 从 tensorflow 中的两个现有张量构造一个新张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51187571/

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