Keras特征提取器说明-输入经过哪些图层

31moq8wy  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(137)

当提取模型层输出时,如下面的Tensorflow序列模型文档示例所示,代码中的输入x在进入my_intermediate_layer层之前是否也经过my_first_layer?或者它是否直接进入my_intermediate_layer层而不经过my_first_layer层?
如果它直接进入my_intermediate_layermy_intermediate_layer的输入没有my_first_layer Conv2D所做的转换。但是,在我看来这是不正确的,因为输入应该经过前面所有的层。
请帮助理解x通过哪些层?
基于序列模型的特征提取

initial_model = keras.Sequential(
    [
        keras.Input(shape=(250, 250, 3)),
        layers.Conv2D(32, 5, strides=2, activation="relu", name="my_first_layer"),
        layers.Conv2D(32, 3, activation="relu", name="my_intermediate_layer"),
        layers.Conv2D(32, 3, activation="relu"),
    ]
)

# The model goes through the training.
...

# Feature extractor
feature_extractor = keras.Model(
    inputs=initial_model.inputs,
    outputs=initial_model.get_layer(name="my_intermediate_layer").output,
)
# Call feature extractor on test input.
x = tf.ones((1, 250, 250, 3))
features = feature_extractor(x)
vvppvyoh

vvppvyoh1#

Keras提供了更高级别的API,运行在TensorFlow机器学习平台之上。Keras提供了两种类型的类来定义神经网络模型,即“序列类”和“模型类”。

顺序类:

它将层的线性堆叠分组以形成模型,使得每个层具有一个输入Tensor和一个输出Tensor。可以将所需的层添加到定义的模型(模式-1),如下所示,以按名称顺序执行Keras Sequential Class

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(8, input_shape=(16,)))
model.add(tf.keras.layers.Dense(4))

用于定义时序模型Keras-Sequential Class Definition的模式如下所示(模式-2):

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

model = keras.Sequential(
    [
        layers.Dense(2, activation="relu", name="layer1"),
        layers.Dense(3, activation="relu", name="layer2"),
        layers.Dense(4, name="layer3"),
    ]
)
# Call model on a test input
x = tf.ones((3, 3))
y = model(x)

模型类

它允许用户构建一个定制模型沿着许多层,如下所示,

import tensorflow as tf

inputs = tf.keras.Input(shape=(3,))
x = tf.keras.layers.Dense(4, activation=tf.nn.relu)(inputs)
outputs = tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)

它允许创建具有附加层Keras - Model Class的新功能API模型,如下所示,

inputs = keras.Input(shape=(None, None, 3))
processed = keras.layers.RandomCrop(width=32, height=32)(inputs)
conv = keras.layers.Conv2D(filters=2, kernel_size=3)(processed)
pooling = keras.layers.GlobalAveragePooling2D()(conv)
feature = keras.layers.Dense(10)(pooling)

注:输入Tensor只支持指令、列表或元组,但不支持列表的列表或指令的指令。
我希望这能有所帮助。

相关问题