如何解决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,activation='relu'),
我最近想出了一个使用转移学习的代码,它通过以下方式定义了模型:
x = layers.Flatten()(last_output)
x = layers.Dense(1024,activation='relu')(x)
x = layers.Dense(1,activation='sigmoid')(x)
last_output
是转移学习模型的输出。
谁能解释这与顺序方法有何不同?另外,为什么在新层的末尾用括号给出上一层的输出?
解决方法
您所描述的两种方法都是正确的。让我们逐步了解它。
-
第一个模型正在使用
Sequential
API。此API的声明如下。tf.keras.Sequential( 图层=无,名称=无 )
API将layers
参数作为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,activation='relu')])
在这里,顺序API将每一层堆叠在另一层之上并进行连接。该API自己管理上一层的输出,即下一层的输入。它为我们提供了便利。
2。方法是使用Functional
API创建模型。您可以将其视为将图层作为函数调用。您唯一需要做的事情就是提供上一层作为下一层的输入。由于Functional API不使用与List类似的东西,因此API知道输入来自哪一层的唯一方法是实际提供前一层作为参数。
以你为例。
x = layers.Flatten()(last_output)
x = layers.Dense(1024,activation='relu')(x)
x = layers.Dense(1,activation='sigmoid')(x)
功能性API将知道Flatten
层需要连接到last_output
层。然后,将下一个密集层连接到Flatten
层,因为将x
作为参数传递给它。我想你在这里有了主意。
还有另一种创建模型的方法是将Model
类子类化。
您可以查看Functional
API和子类Model
类here。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。