仅通过网络的输入和输出时,keras功能性API模型如何了解层

时间:2020-08-29 20:23:18

标签: python tensorflow keras

我是Keras的新手,对功能api模型的结构也很了解。

1- 如here in docs所述。 keras.Model仅接受输入和输出参数,并且层在模型之前列出。当我们只传递输入和输出数组时,有人可以告诉我keras.Model如何知道层结构以及输入和输出之间的多层。

2- 另外,layers.output或layers.input的输出是什么。输出不是简单的张量吗?当我使用this example中的语法为其他图层打印layers.output时,看到下面的输出。看起来就像layers.output,layers.input也包含了图层信息,例如“ dense_5 / Relu:0”。有人可以说明下面的输出代表什么吗?

打印[model.layers中图层的layer.output]#下面的输出

 [<tf.Tensor 'input_6:0' shape=(None, 3) dtype=float32>,
  <tf.Tensor 'dense_5/Relu:0' shape=(None, 4) dtype=float32>,
  <tf.Tensor 'dense_6/Softmax:0' shape=(None, 5) dtype=float32>]

2 个答案:

答案 0 :(得分:1)

  1. 在编译/拟合/评估之前,您应该首先描述模型。您进行一个序列:输入第一层,然后输入一堆中间层,然后输出层。

就像您的示例:

inputs = keras.Input(shape=(784,))          # input layer
dense = layers.Dense(64, activation="relu") # describe a dense layer
x = dense(inputs)                           # set x as a result of dense layer with inputs
x = layers.Dense(64, activation="relu")(x)  # "update" x with next layer which has previous dense layer as input
outputs = layers.Dense(10)(x)               # set your output
model = keras.Model(inputs=inputs, outputs=outputs, name="mnist_model") # incorporate all layers in a model

因此,基本上Keras已经知道模型中的内容。

  1. 您正在寻找获取中间层的输出。这是迁移学习(当您使用预训练模型作为特征提取器时)或某些体系结构作为跳过连接时的常见原理。在这种情况下,您将获得多个输出。网络也可以在模型末尾具有多个输出,具体取决于模型目的。在您的示例中,它们仅用于演示目的,没有任何意义。看看更有意义的feature extraction

答案 1 :(得分:0)

要回答关于模型如何知道在中间张量上调用的层的第一个问题,我认为看一下 help(keras.Input) 会很有帮助:

<块引用>

Input() 用于实例化 Keras 张量。

Keras 张量是一个象征性的类张量对象,我们用它来增强 某些属性允许我们仅通过以下方式构建 Keras 模型 知道模型的输入和输出。

所以基本上,Keras 正在使用 Python 在幕后做一些魔术。

每次在 Keras 张量上调用 Keras 层时,它都会根据层的功能输出转换后的 Keras 张量,但也会将有关该层的一些信息添加到此 Keras 张量(作为对象的属性)。