我在Tensorflow中设置了CNN,用TFRecordReader读取数据。它工作得很好,但我想做一些比tf.image
函数提供的更多的预处理和数据扩充。我特意想做一些随机缩放。
是否可以在Numpy中处理Tensorflow张量?或者我是否需要删除TFRecordReader而是使用feed_dict在Numpy中进行所有预处理并提供数据?我怀疑在训练图像时feed_dict方法很慢,但我可能错了?
答案 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])