python - Tensorflow flatten vs numpy flatten 函数对机器学习训练的影响

标签 python numpy tensorflow machine-learning keras

我开始使用 keras 和 tensorflow 进行深度学习。在最初阶段,我有一个疑问。当我使用 tf.contrib.layers.flatten (Api 1.8) 用于拼合图像(也可以是多 channel 的)。

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

这是一个 very close question但这里接受的答案包括 Theano,并没有完全解决我的疑虑。

例子: 假设我有一个 (10000,2,96,96) 形状的训练数据。现在我需要输出为 (10000,18432) 形状。我可以使用 tensorflow flatten 或使用像

这样的 numpy flatten 来做到这一点
X_reshaped = X_train.reshape(*X_train.shape[:1], -2)

它在训练中有什么不同,哪种是最佳实践?

最佳答案

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

所以我的建议很简单:

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

关于python - Tensorflow flatten vs numpy flatten 函数对机器学习训练的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50259290/

相关文章:

python - 如何在多层 python 字典中找到最小值,以及它的 "path"(即叶值的键列表)

python - 如何在 Pandas 中有效地为每个 groupby 组分配一个值

python - 通过指定行和列从另一个数组创建 NumPy 数组

python - 条件互信息

python - 无法在android studio中的解释器上运行tflite模型

Python:在解析 JSON 字符串时处理损坏的 unicode 字节

python - 如何将文件路径变量放入 pandas.read_csv?

python - Python 中的矩阵求幂

python - Tensorflow Keras 指标未显示

tensorflow - 带有验证数据的 keras model.fit - 哪个 batch_size 用于评估验证数据?