【问题标题】:How to embed 3d input in keras?如何在 keras 中嵌入 3d 输入?
【发布时间】:2020-04-17 02:14:12
【问题描述】:

我正在尝试在 Keras 中创建一个Embedding 层。

我的输入大小是 3d:(batch, 8, 6),我想嵌入最后一个维度。
所以嵌入应该作为(batch*8, 6) -> embedding output

但我不想在所有学习步骤中保留此 batchsize,仅用于嵌入层。

我认为解决方案之一是分离 8 个输入并将嵌入应用到每个输入。
但是这个嵌入层和一个大的嵌入层是不一样的。

有没有可能的解决方案?谢谢!

【问题讨论】:

    标签: keras 3d reshape embedding batchsize


    【解决方案1】:

    解决方法很简单:

    input_shape = (8,6)
    

    并通过嵌入。你会得到你想要的。


    一个完整的工作示例:

    from keras.layers import *
    from keras.models import *
    
    ins = Input((8,6))
    out = Embedding(10, 15)(ins)
    model = Model(ins, out)
    model.summary()
    

    其中 10 是字典大小(单词或类似词的数量),15 是嵌入大小(结果维度)。

    结果摘要:

    Model: "model_1"
    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    input_1 (InputLayer)         (None, 8, 6)              0         
    _________________________________________________________________
    embedding_1 (Embedding)      (None, 8, 6, 15)          150       
    =================================================================
    Total params: 150
    Trainable params: 150
    Non-trainable params: 0
    _________________________________________________________________
    

    【讨论】:

    • 谢谢!但我想嵌入最后一个维度(只有 6 个),这个解决方案是否嵌入了 (8,6) 个维度?
    • 是的,这就是解决方案。它将变为(batch, 8, 6, embedding_size)
    • 我尝试了,但溶胶不起作用。我想用 input_length 为 6。这不可能吗?
    • 你不需要input_length,这个论点在我看来有点没用。只是不要使用它。请参阅更新的答案以获取工作示例。
    • 也许你认为 8 和 6 是不同的东西?不,它们只是值的“分布”方式,但是如果不从 8 中获取值,则无法从 6 中获取值,这不存在。 (在特定轴上工作的操作是“减少”操作,对维度求和,或取平均值或最大参数等的操作。但嵌入不是那样的,它只接受所有值,并为每个值返回一个向量。没有任何缩减或维度特定的操作,因此,在嵌入中没有轴区分,它只是保持相同的原始分布)。
    猜你喜欢
    • 2019-04-23
    • 2016-11-29
    • 2019-10-08
    • 2020-11-30
    • 2021-07-20
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多