Tensorflow flatten vs numpy flatten功能对机器学习训练的影响

Har*_*moz 5 python numpy machine-learning keras tensorflow

我开始使用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)
Run Code Online (Sandbox Code Playgroud)

它在培训方面有何不同,哪种方法最佳?

Max*_*xim 6

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

所以我的建议很简单:

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


Dan*_*ler 5

  • 直接在您的数据上使用 numpy,无需神经网络参与。这仅用于预处理和后处理
  • 如果模型中由于某种原因需要此操作,请在模型内使用 TF 或 Keras 层。这将确保模型连接性和正确的反向传播

模型是用于创建可以训练的神经网络的符号图。当您将图形从输入连接到输出时,将会有一个正确的连接并且反向传播将正常工作。

如果您不打算创建网络,请不要使用 TF 层。如果您的目标只是展平数组,则不需要神经网络。

现在,如果在模型内部,您需要在不丢失连接和反向传播的情况下更改数据格式,请使用扁平层。