在 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])
我在 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])