keras文档学习02.函数式模型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fantacy10000/article/details/83119106

关键词:
原文地址:文档对应位置

一句话,只要你的模型不是类似VGG一样一条路走到黑的模型,或者你的模型需要多于一个的输出,那么你总应该选择函数式模型。函数式模型是最广泛的一类模型,序贯模型(Sequential)只是它的一种特殊情况

部分点要注意的:
层对象接受张量为参数,返回一个张量。输入是张量,输出也是张量的一个框架就是一个模型,通过Model定义。这样的模型可以被像Keras的Sequential一样被训练。

from keras.layers import Input, Dense
from keras.models import Model

# This returns a tensor
inputs = Input(shape=(784,))

# a layer instance is callable on a tensor, and returns a tensor
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x)

# This creates a model that includes
# the Input layer and three Dense layers
model = Model(inputs=inputs, outputs=predictions)
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
model.fit(data, labels)  # starts trainin

1.函数式模型的典型应用场景:
[1]搭建多输入多输出的模型;
[2]使用共享层的时候;

层节点的概念:
无论何时,当你在某个输入上调用层时,你就创建了一个新的张量(即该层的输出),同时你也在为这个层增加一个“(计算)节点”。这个节点将输入张量映射为输出张量。当你多次调用该层时,这个层就有了多个节点,其下标分别为0,1,2…

[1]如果层只与一个输入相连,那没有任何困惑的地方。.output将会返回该层唯一的输出;

a = Input(shape=(140, 256))
lstm = LSTM(32)
encoded_a = lstm(a)
assert lstm.output == encoded_a

[2]但当层与多个输入相连时,会出现问题,通过下面这种调用方式即可解决:

assert lstm.get_output_at(0) == encoded_a
assert lstm.get_output_at(1) == encoded_b

具体:对于input_shape和output_shape也是一样,如果一个层只有一个节点,或所有的节点都有相同的输入或输出shape,那么input_shape和output_shape都是没有歧义的,并也只返回一个值。但是,例如你把一个相同的Conv2D应用于一个大小为(32,32,3)的数据,然后又将其应用于一个(64,64,3)的数据,那么此时该层就具有了多个输入和输出的shape,你就需要显式的指定节点的下标,来表明你想取的是哪个了:

a = Input(shape=(32, 32, 3))
b = Input(shape=(64, 64, 3))

conv = Conv2D(16, (3, 3), padding='same')
conved_a = conv(a)

# Only one input so far, the following will work:
assert conv.input_shape == (None, 32, 32, 3)

conved_b = conv(b)
# now the `.input_shape` property wouldn't work, but this does:
assert conv.get_input_shape_at(0) == (None, 32, 32, 3)
assert conv.get_input_shape_at(1) == (None, 64, 64, 3)

猜你喜欢

转载自blog.csdn.net/fantacy10000/article/details/83119106