首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TensorFlow模型语法

TensorFlow模型语法
EN

Stack Overflow用户
提问于 2020-08-16 09:45:53
回答 1查看 140关注 0票数 0

我是神经网络和Tensorflow的新手

通常,当我们在TensorFlow中建立一个神经网络模型时,我们定义它的方式如下:

代码语言:javascript
复制
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'),

我最近提出了一个使用转移学习的代码,它以以下方式定义了模型:

代码语言:javascript
复制
x = layers.Flatten()(last_output)
x = layers.Dense(1024, activation='relu')(x)
x = layers.Dense(1,activation='sigmoid')(x) 

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

有人能解释一下这与顺序法有何不同吗?另外,为什么在新层末尾的括号中给出了前一层的输出?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-16 18:45:42

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

  1. 第一个模型是使用这个API的Sequential API.The声明,如下所示。 tf.keras.Sequential( layers=None,name=None )

API将layers参数作为要添加到模型中的layers的列表。

因此,你展示的例子。

代码语言:javascript
复制
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知道输入来自哪个层的唯一方法是实际上提供前一个层作为参数。

所以以你为例。

代码语言:javascript
复制
x = layers.Flatten()(last_output)
x = layers.Dense(1024, activation='relu')(x)
x = layers.Dense(1,activation='sigmoid')(x) 

functional将知道层Flatten需要连接到last_output层。然后,下一个密集层将连接到Flatten层,因为x作为参数传递给它。我想你知道这个主意了。

还有一种创建模型的方法是对Model类进行子类化。您可以查看Functional API和子类Model这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63435397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档