Tensorflow flatten与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)

这对训练有什么不同,哪种做法是最佳实践?


回答:

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

因此,我的建议非常简单:

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注