【问题标题】:Explain keras code snippet解释keras代码片段
【发布时间】:2018-06-11 21:30:39
【问题描述】:

我有这段代码:

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

a = Input(shape=(32,))
b = Dense(32)(a)

在Dense(32)(a) 我知道我们正在创建keras.layers.Dense 对象,但是(a) 对我们创建的Dense(32) 对象有什么影响?

还有python内部是怎么理解的?

【问题讨论】:

    标签: keras keras-layer


    【解决方案1】:

    b = Dense(32)(a) 部分创建一个Dense 层,该层接收张量a 作为输入。这样做是为了允许使用具有不同输入的相同密集层(即允许共享权重)。

    例如,考虑以下 sn-p:

    from keras.models import Model
    from keras.layers import Input, Dense
    
    a = Input(shape=(32,))
    b = Input(shape=(32,))
    dense = Dense(32)
    c = dense(a)
    d = dense(b)
    

    这里,dense = Dense(32) 实例化了一个可调用的Dense 层。你可以把它想象成你正在创建一个可以在不同输入上调用的函数(即c = dense(a) 和d = dense(b))。这提供了一种非常方便的权重共享方式。

    【讨论】:

    • 在 keras 源代码的 keras/layers/ 目录中,我没有找到从from keras.layers import Input 看到的输入定义。在哪里可以找到 Input 的定义?
    • 在c = dense(a)sn-p 会调用什么函数?我们是在创建一个密集实例吗?
    • 对,我们正在使用dense = Dense(32) 创建一个密集实例。它不完全是一个函数,而是一个可调用的。在 python 中,可调用对象是您可以调用的任何内容。如果一个类的实例实现了__call__ 方法,则称它是可调用的。那么,当你写c = dense(a)时,被调用的函数就是这个:github.com/keras-team/keras/blob/master/keras/layers/…
    • 准确地说:在dense=Dense(32) 中,您正在创建一个密集实例。在以下两行中,您将“将输入张量传递给现有的密集层以获取输出张量”。
    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2013-04-06
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多