【问题标题】:How to extract n 1-D tensors from a given 2-D tensor?如何从给定的二维张量中提取 n 个一维张量?
【发布时间】:2016-04-15 06:55:11
【问题描述】:

我有一个二维张量:

a = [[6, 5, 4], [3, 2, 1], [1, 2, 3], [4, 5, 6], [7, 8, 1], [5, 2 , 6]]

我想随机不重复提取K个一维张量。接下来,将它们组合成另一个二维张量 b:

b = [5, 2, 6], [3, 2, 1], [6, 5, 4]

我没有找到任何这样做的功能,所以我将其实现如下:

rand_var_1 = tf.random_crop(a, size=[1, 3], seed=1)
rand_var_2 = tf.random_crop(a, size=[1, 3], seed=2)
rand_var_3 = tf.random_crop(a, size=[1, 3], seed=3)
rand_var_4 = tf.random_crop(a, size=[1, 3], seed=4)
b = tf.concat(0, [rand_var_1, rand_var_2, rand_var_3, rand_var_4])

b_rs = sess.run(b)
print "b_rs:\n",b_rs

但结果具有重复的一维张量,例如:

bb=[[5, 2, 6], [3, 2, 1], [5, 2, 6]]

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 不确定这是否适用于 tensorflow,但对于 NumPy 数组,它可以通过以下方式实现:a[np.random.choice(a.shape[0],3, replace=False)]
  • 这在 tensorflow 中不起作用,但我决定尝试一下:a_shuffled = tf.random_shuffle(a, seed=12), b = tf.slice(a_shuffled, [0, 0], [K,len(a[0])]),我认为他们在某种程度上正在做同样的事情。无论如何,谢谢你的帮助:)。

标签: python numpy tensorflow


【解决方案1】:

以下应该可以工作,基本上生成一个数组长度为数组a的数字数组,将它们打乱并使用第一个K索引并获取行,

import numpy as np

#Number of samples
K = 3

#Array
a =[[6, 5, 4], [3, 2, 1], [1, 2, 3], [4, 5, 6], [7, 8, 1], [5, 2, 6]]
N = len(a)

#Get an array on size of a, shuffle and take first K to use
#permutation used as suggested by @EelcoHoogendoorn
indices = np.random.permutation(N)

#Take the first k samples
samples = indices[:K]
b = [a[i] for i in samples]

#Print
print('a = ', a)
print('b = ', b)

【讨论】:

  • numpy.random.permutation 做同样的事情,但更紧凑
  • 如果您使用 numpy 数组而不是 lits 列表 (b = a[samples]),语法会更好一些,但是是的,这似乎是显而易见的方法,+1。
  • 好点@EelcoHoogendoorn,我已按照建议更改为排列。谢谢@Jaime,我同意并最初将numpy 数组用于a/b,但由于OP 使用列表,因此保持相同的格式似乎是明智的......
  • 很遗憾,这在 tensorflow 中不起作用,我决定尝试另一种方法,如果您有兴趣,请参阅我对 @Divakar 的回复。谢谢你的帮助:)。
猜你喜欢
  • 2017-10-12
  • 2022-09-29
  • 2020-09-26
  • 2022-07-20
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 2019-02-19
  • 2019-09-15
相关资源
最近更新 更多