TensorFlow 模型语法

我对神经网络和TensorFlow是新手

通常,当我们在TensorFlow中构建神经网络模型时,我们会以以下方式定义它:

model = tf.keras.models.Sequential([    tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)),    tf.keras.layers.MaxPooling2D(2, 2),    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),

最近我用迁移学习写了一段代码,它以以下方式定义了模型:

x = layers.Flatten()(last_output)x = layers.Dense(1024, activation='relu')(x)x = layers.Dense(1,activation='sigmoid')(x) 

这里的 last_output 是迁移学习模型的输出。

谁能解释这与顺序方法有何不同?另外,为什么前一层的输出会在新层的末尾用括号给出?


回答:

你描述的两种方式都是正确的。让我们一步一步来看。

  1. 第一个模型使用的是 Sequential API。该API的声明如下。

    tf.keras.Sequential(layers=None, name=None)

该API接受 layers 参数作为一个列表,添加到模型中。

因此,你展示的例子如下。

model = tf.keras.models.Sequential([    tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150, 150, 3)),    tf.keras.layers.MaxPooling2D(2, 2),    tf.keras.layers.Conv2D(64, (3,3), activation='relu')])

在这里,顺序API将每一层堆叠在另一层之上并连接它们。该API自行管理前一层的输出作为下一层的输入。它为我们提供了便利性。

2.另一种方法是使用 Functional API 创建模型。你可以将其视为调用层作为函数。你需要额外做的一件事是将前一层作为下一层的输入。因为Functional API不使用类似于列表的东西,所以API知道输入来自哪个层面的唯一方法是实际提供前一层作为参数。

所以以你的例子为例。

x = layers.Flatten()(last_output)x = layers.Dense(1024, activation='relu')(x)x = layers.Dense(1,activation='sigmoid')(x) 

Functional API 会知道层 Flatten 需要连接到 last_output 层。然后,下一层密集层将连接到 Flatten 层,因为 x 作为参数传递给了它。我想你已经明白了这里的思路。

还有另一种创建模型的方法是通过子类化 Model 类。你可以在这里查看 Functional API 和子类化 Model这里

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中创建了一个多类分类项目。该项目可以对…

发表回复

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