首页 > 解决方案 > TensorFlow flatten vs numpy flatten 函数对机器学习训练的影响

问题描述

我开始使用 keras 和 tensorflow 进行深度学习。在第一阶段,我有一个疑问。当我使用tf.contrib.layers.flatten(Api 1.8)来展平图像时(也可以是多通道)。

这与使用 numpy 中的 flatten 函数有何不同?这对训练有什么影响。我可以看到tf.contrib.layers.flatten比 numpy flatten 花费的时间更长。它在做更多的事情吗?

这是一个非常接近的问题,但这里接受的答案包括 Theano,并不能完全解决我的疑问。

示例:假设我有一个(10000,2,96,96)形状的训练数据。现在我需要输出(10000,18432)形状。我可以使用 tensorflow flatten 或使用 numpy flatten 来做到这一点

X_reshaped = X_train.reshape(*X_train.shape[:1], -2)

它对培训有什么影响?最佳实践是什么?

标签: pythonnumpytensorflowmachine-learningkeras

解决方案


np.flattentf.layers.flatten(或)之间的最大区别在于tf.contrib.layers.flatten,numpy 操作仅适用于静态 nd 数组,而 tensorflow 操作可以与动态张量一起使用。在这种情况下,动态意味着只有在运行时(训练或测试)才能知道确切的形状。

所以我的建议很简单:

  • 如果输入数据是静态 numpy 数组,例如在预处理中,使用np.flatten. 这避免了不必要的开销并返回 numpy 数组。
  • 如果数据已经是张量,请使用flattentensorflow 提供的任何操作。在这两者之间,tf.layers.flatten是更好的选择,因为tf.layersAPI 比tf.contrib.*.

推荐阅读