Tensorflow1 concat 二维张量与所有按行排列

假设我们有两个形状为 ( n, k) 和 ( n, k) 的二维张量。我们想要将两个张量与所有行方向排列连接起来,使得所得张量的形状为 ( n, n, 2*k)。

例子,

A = [[a, b], [c, d]]; B = [[e, f], [g, h]]

得到的张量应该是:

[[[a, b, e, f], [a, b, g, h]], [[c, d, e, f], [c, d, g, h]]]

假设输入张量 A 和 B 具有非静态形状,因此我们不能使用 for 循环索引tf.shape()值。

任何帮助表示赞赏。非常感谢。


哔哔one
浏览 127回答 2
2回答

12345678_0001

tf.concat与tf.repeat和一起使用tf.tileimport tensorflow as tfimport numpy as np# InputA = tf.convert_to_tensor(np.array([['a', 'b'], ['c', 'd']]))B = tf.convert_to_tensor(np.array([['e', 'f'], ['g', 'h']]))# Repeat, tile and concatC = tf.concat([tf.repeat(A, repeats=tf.shape(A)[-1], axis=0),                tf.tile(B, multiples=[tf.shape(A)[0], 1])],               axis=-1)# Reshape to requested shapeC = tf.reshape(C, [tf.shape(A)[0], tf.shape(A)[0], -1])print(C)>>> <tf.Tensor: shape=(2, 2, 4), dtype=string, numpy=>>> array([[[b'a', b'b', b'e', b'f'],>>>         [b'a', b'b', b'g', b'h']],>>>        [[b'c', b'd', b'e', b'f'],>>>         [b'c', b'd', b'g', b'h']]], dtype=object)>

拉丁的传说

试试这样:A = np.array([['a', 'b'], ['c', 'd']])B = np.array([['e', 'f'], ['g', 'h']])C = np.array([np.concatenate((a, b), axis=0) for a in A for b in B])您可以像这样轻松地将其转换为张量流data =tf.convert_to_tensor(C, dtype=tf.string)输出:<tf.Tensor: shape=(4, 4), dtype=string, numpy=array([[b'a', b'b', b'e', b'f'],&nbsp; &nbsp; &nbsp; &nbsp;[b'a', b'b', b'g', b'h'],&nbsp; &nbsp; &nbsp; &nbsp;[b'c', b'd', b'e', b'f'],&nbsp; &nbsp; &nbsp; &nbsp;[b'c', b'd', b'g', b'h']], dtype=object)>不确定列表理解部分是否对大数据最有效
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python