在 Numpy 中预处理 Tensorflow 张量

Preprocess a Tensorflow tensor in Numpy

我在 Tensorflow 中设置了一个 CNN,我在其中使用 TFRecordReader 读取我的数据。它运行良好,但我想做一些比 tf.image 函数提供的更多的预处理和数据扩充。我特别想做一些随机缩放。

是否可以在 Numpy 中处理 Tensorflow 张量?或者我是否需要删除 TFRecordReader 而在 Numpy 中进行所有预处理并使用 feed_dict 提供数据?我怀疑 feed_dict 方法在图像训练时很慢,但我可能错了?

如果您可以创建自定义 I/O 管道,使用一个或多个线程从 TensorFlow 取回中间结果,应用任意 Python 逻辑,然后将它们送入队列以进行后续处理。生成的程序会稍微复杂一些,但我建议您查看 threading and queues HOWTO 以获取有关如何开始的信息。


有一个实验性功能可以使这更容易,如果你install from source

如果您已经使用 TensorFlow ops 构建了预处理管道,添加一些自定义 Python 代码的最简单方法是使用 tf.py_func() 运算符,它获取 Tensor 对象,以及一个 Python 函数,将一个或多个 NumPy 数组映射到一个或多个 NumPy 数组。

例如,假设您有这样的管道:

reader = tf.TFRecordReader(...)
image_t = tf.image.decode_png(tf.parse_single_example(reader.read(), ...))

...您可以使用 tf.py_func() 应用一些自定义 NumPy 处理,如下所示:

from scipy import ndimage
def preprocess(array):
  # `array` is a NumPy array containing.
  return ndimage.rotate(array, 45)

image_t = tf.py_func(preprocess, [image_t], [tf.float32])