为了账号安全,请及时绑定邮箱和手机立即绑定

给定列的*列表*,如何用零列填充 TF 张量

给定列的*列表*,如何用零列填充 TF 张量

倚天杖 2021-10-26 18:48:13
在 tensorflow 中,给定特定的列列表,我试图用零列填充张量。如何在 tensorflow 中实现它?我尝试使用tf.assignor tf.scatter_nd,但遇到了一些错误。这是一个简单的numpy实现a_np = np.array([[1, 2],                 [3, 4],                  [5, 6]])columns = [1, 5]a_padded = np.zeros((3, 7))a_padded[:, columns] = a_npprint(a_padded)## output ##[[0. 1. 0. 0. 0. 2. 0.] [0. 3. 0. 0. 0. 4. 0.] [0. 5. 0. 0. 0. 6. 0.]]我试图在 tensorflow 中做同样的事情:a = tf.constant([[1, 2],                 [3, 4],                  [5, 6]])columns = [1, 5]a_padded = tf.Variable(tf.zeros((3, 7)))a_padded[:, columns].assign(a)但这会产生以下错误:类型错误:只能将列表(不是“int”)连接到列表我也尝试使用tf.scatter_nd:a = tf.constant([[1, 2],                 [3, 4],                  [5, 6]])columns = [1, 5]shape = tf.constant((3, 7))tf.scatter_nd(columns, a, shape)但这会产生以下错误:InvalidArgumentError:输出形状的内部尺寸必须与更新形状的内部尺寸匹配。输出:[3,7] 更新:[3,2] [Op:ScatterNd]
查看完整描述

2 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

这是一个解决方案:


tf.reset_default_graph()

a = tf.constant([[1, 2], [3, 4], [5, 6]], dtype=tf.int32)

columns = tf.constant([1, 5], dtype=tf.int32)

a_padded = tf.Variable(tf.zeros((3, 7), dtype=tf.int32))

indices = tf.stack(tf.meshgrid(tf.range(tf.shape(a_padded)[0]), columns, indexing='ij'), axis=-1)

update_cols = tf.scatter_nd_update(a_padded, indices, a)

sess = tf.Session()

sess.run(tf.global_variables_initializer())

print(sess.run(update_cols))


查看完整回答
反对 回复 2021-10-26
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

(OP 在这里)我设法使用tf.scatter_nd. 诀窍是对齐 a、列和输出形状的尺寸。


a_np = np.array([[1, 2],

                 [3, 4], 

                 [5, 6]])


# Note the Transpose on every line below

a = tf.constant(a_np.T) 

columns = tf.constant(np.array([[1, 5]]).T.astype('int32'))

shape = tf.constant((7, 3))

a_padded = tf.transpose(tf.scatter_nd(columns, a, shape))


查看完整回答
反对 回复 2021-10-26
  • 2 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信