【问题标题】:Keras: how to append a vector to a tensorKeras:如何将向量附加到张量
【发布时间】:2018-04-12 13:56:34
【问题描述】:

我有一个带有 keras / tf 的网络,其中构建了两个分支: - 一个短的单词序列被转换为 300 维嵌入 - 另一个将相同的单词序列转换为 ngrams

然后我得到两个数据结构:

termwords.shape = (?, 42, 300)
termngrams.shape = (?, 42)

(我确保两个分支的“长度”相同,均为 42,即最多 42 个单词和最多 42 个 ngram,在需要的地方进行填充/剪切)。然后我需要将它们合并到一个分支中以到达预测层。

但是

merged = merge([termwords, termngrams], mode='concat')

告诉我排名不匹配。我希望 concat 允许我将 'termngrams' 附加到 'termwords' 中,这样我最终会得到一个形状为 (?,42,301) 的数据结构。但我找不到合适的方式来表达这一点。

【问题讨论】:

    标签: tensorflow keras dimensions


    【解决方案1】:

    “等级”错误告诉您张量的维数不同。一个是 2D,另一个是 3D。

    使用Lambda 层和expand_dims 为二维层添加额外的维度。

    import keras.backend as K
    from keras.layers import Lambda
    
    termngrams = Lambda(lambda x: K.expand_dims(x))(termngrams) #outputs (?,42,1)
    

    然后使用Contatenate() 层(默认情况下,它使用最后一个轴,如您所愿)。

    merged = Concatenate()([termwords,termngrams])
    

    (假设您使用的是函数式 API Model 而不是顺序模型,顺序模型不适合分支)

    【讨论】:

    • 做到了,非常感谢!我花了很长时间搜索,假设必须有一种简单的方法来解决这个问题,但我没有遇到 expand_dims。网络无法编译和运行...需要继续查看如何调整结果。再次:谢谢!
    • 太棒了 :) --- 如果您认为这回答了您的问题,请将其标记为已回答 :)
    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 2019-01-03
    • 1970-01-01
    • 2018-08-02
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    相关资源
    最近更新 更多