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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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