Lee*_*evo 7 python numpy tensorflow tensorflow2.0
我希望在TensorFlow 2.0 中编写一个函数,而不是在每次训练迭代之前对数据及其目标标签进行混洗。
假设我有两个 numpy 数据集 X 和 y,分别表示用于分类的数据和标签。我如何洗牌他们在同一时间?
使用sklearn
它非常简单:
from sklearn.utils import shuffle
X, y = shuffle(X, y)
Run Code Online (Sandbox Code Playgroud)
我如何在TensorFlow 2.0 中做同样的事情?我在文档中找到的唯一工具是tf.random.shuffle,但它一次只需要一个对象,我需要喂两个。
与打乱 x 和 y 不同,打乱它们的索引要容易得多,因此首先生成一个索引列表
indices = tf.range(start=0, limit=tf.shape(x_data)[0], dtype=tf.int32)
然后对这些索引进行洗牌
idx = tf.random.shuffle(indices)
并使用这些索引来打乱数据
x_data = tf.gather(x_data, idx)
y_data = tf.gather(y_data, idx)
Run Code Online (Sandbox Code Playgroud)
你会得到乱序的数据
如果您只想以相同的方式打乱两个数组,您可以这样做:
import tensorflow as tf
# Assuming X and y are initially NumPy arrays
X = tf.convert_to_tensor(X)
y = tf.convert_to_tensor(y)
# Make random permutation
perm = tf.random.shuffle(tf.range(tf.shape(X)[0]))
# Reorder according to permutation
X = tf.gather(X, perm, axis=0)
y = tf.gather(y, perm, axis=0)
Run Code Online (Sandbox Code Playgroud)
但是,您可以考虑使用 a tf.data.Dataset
,它已经提供了一个shuffle
方法。
import tensorflow as tf
# You may use a placeholder if in graph mode
# (see https://www.tensorflow.org/guide/datasets#consuming_numpy_arrays)
ds = tf.data.Dataset.from_tensor_slices((X, y))
# Shuffle with some buffer size (len(X) will use a buffer as big as X)
ds = ds.shuffle(buffer_size=len(X))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1743 次 |
最近记录: |