python - 为什么在构建 Keras 模型时同时使用 Sequential API 和 Functional API?
问题描述
我正在尝试理解使用 Keras 制作的 DCGAN 的代码,该代码使用顺序 api 创建模型,然后将其包装在功能性 api 模型中。为什么包括功能模型而不是仅使用顺序模型?
我有点初学者,我正在尝试了解这个 Keras GAN 的设计:
https://github.com/eriklindernoren/Keras-GAN/blob/master/dcgan/dcgan.py
例如,在构建生成器时,使用顺序 API 定义模型,然后使用功能 API 和顺序模型创建新模型。
def build_generator(self):
model = Sequential()
model.add(Dense(128 * 7 * 7, activation="relu", input_dim=self.latent_dim))
model.add(Reshape((7, 7, 128)))
model.add(UpSampling2D())
model.add(Conv2D(128, kernel_size=3, padding="same"))
model.add(BatchNormalization(momentum=0.8))
model.add(Activation("relu"))
model.add(UpSampling2D())
model.add(Conv2D(64, kernel_size=3, padding="same"))
model.add(BatchNormalization(momentum=0.8))
model.add(Activation("relu"))
model.add(Conv2D(self.channels, kernel_size=3, padding="same"))
model.add(Activation("tanh"))
model.summary()
noise = Input(shape=(self.latent_dim,))
img = model(noise)
return Model(noise, img)
这与仅使用顺序模型有何不同?(对不起,如果这是一个愚蠢的问题)
解决方案
顺序模型和函数模型在实践中是相同的。除了功能模型,您可以创建更复杂的架构,因为每个层都存储有变量。当您没有独特的“线性”模型并且 GAN 就在其中时,它会很方便。
使用功能 API构建的模型示例:
inputs = Input(shape=(784,))
# a layer instance is callable on a tensor, and returns a tensor
layer1 = Dense(64, activation='relu')(inputs)
layer2 = Dense(64, activation='relu')(layer1)
predictions = Dense(10, activation='softmax')(layer2)
# This creates a model that includes
# the Input layer and three Dense layers
model = Model(inputs=inputs, outputs=predictions)
您清楚地看到每一层都可以轻松访问。而使用Sequential API 也是如此:
model = Sequential()
model.add(Input(shape=(784,))
model.add(Dense(64, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(10, activation='softmax'))
当然,对于这样一个简单的模型,顺序模型更清晰。但是现在如果要添加第二个模型(例如生成器),函数式 API 更简洁,因为您可以为每一层声明一个变量并将该层添加到模型** 在同一行** 而使用顺序 API不能。
推荐阅读
- javascript - 从嵌套对象 JavaScript 中获取过滤值
- reactjs - GLView 不会出现在 React Native 中?但是没有错误?
- kdtree - 空间中有障碍物的 KD 树
- python - 如何使用pyspark查找一列是否在其字符串句子中包含一个或多个单词
- autofac - 具有命名参数的 Autofac 工厂
- javascript - 数组对象未在 JavaScript 中读取
- reactjs - 我无法使用来自 Nginx Ubuntu(AWS EC2)服务器的 Axios API 调用得到响应
- laravel - Laravel 社交名流推特
- css - 拥有位于 React 中的英雄部分的透明导航栏的最佳方法?
- gitlab - Git Lab - 每月安排 MR