在keras文档中,它说模型是由图层组成的。但是in this section显示模型可以由模型组成。
from keras.layers import Conv2D, MaxPooling2D, Input, Dense, Flatten
from keras.models import Model
# First, define the vision modules
digit_input = Input(shape=(27, 27, 1))
x = Conv2D(64, (3, 3))(digit_input)
x = Conv2D(64, (3, 3))(x)
x = MaxPooling2D((2, 2))(x)
out = Flatten()(x)
vision_model = Model(digit_input, out)
# Then define the tell-digits-apart model
digit_a = Input(shape=(27, 27, 1))
digit_b = Input(shape=(27, 27, 1))
# The vision model will be shared, weights and all
out_a = vision_model(digit_a)
out_b = vision_model(digit_b)
concatenated = keras.layers.concatenate([out_a, out_b])
out = Dense(1, activation='sigmoid')(concatenated)
classification_model = Model([digit_a, digit_b], out)
那么,模型和图层之间的有效区别是什么?仅仅是为了代码可读性还是提供某些功能?
答案 0 :(得分:3)
在Keras中,网络是层的directed acyclic graph(DAG)。 模型是一个网络,其中添加了训练和评估例程。
该框架允许您从单个层和其他DAG中构建网络DAG。后者就是您在示例中看到的,并且似乎引起了混乱。
答案 1 :(得分:0)
区别在于可以训练模型(它们具有fit
方法),而图层则没有这种方法,并且需要成为Model
实例的一部分,因此您可以对其进行训练。一般来说,隔离层没有用。
Functional API在模型内部使用模型的想法是,您可以定义一个模型,并以共享权重的方式将其权重作为另一模型的一部分重用。单独使用图层是不可能的。