在Numpy中预处理Tensorflow张量

时间:2016-01-22 09:05:07

标签: python numpy tensorflow

我在Tensorflow中设置了CNN,用TFRecordReader读取数据。它工作得很好,但我想做一些比tf.image函数提供的更多的预处理和数据扩充。我特意想做一些随机缩放。

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

1 个答案:

答案 0 :(得分:12)

如果您可以创建一个自定义I / O管道,使用一个或多个线程从TensorFlow获取中间结果,则应用任意Python逻辑,然后将它们提供到队列中以供后续处理。由此产生的程序会更复杂,但我建议您查看threading and queues HOWTO以获取有关如何入门的信息。

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

如果您已经使用TensorFlow操作构建了预处理管道,添加一些自定义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])