【问题标题】:Embedding Layer with Changing input_dim使用更改 input_dim 嵌入层
【发布时间】:2021-03-08 18:19:21
【问题描述】:

根据文档,Tensorflow Embedding 层有固定的input_dim,即词汇量大小。

当我们以流式方式(在线学习)训练 DNN 模型时,事先不知道独特特征的数量,即 input_dim。随着新数据的进入,它可能会随着时间的推移而增加。因此,我们不能用固定的input_dim 声明Embedding 层。在这种情况下我们应该如何处理嵌入?

提前致谢!

【问题讨论】:

    标签: tensorflow machine-learning deep-learning tensorflow2.0


    【解决方案1】:

    动态嵌入大小

    你是对的,当你像这样声明和嵌入层时

    tf.keras.layers.Embedding(input_dim, output_dim)
    

    您当然必须为输入和输出暗淡传递一个静态值。在幕后实现嵌入的方式是一个大小为 input_dim x output_dim 的大矩阵,然后它使用tf.keras.backend.gather 为您传递的输入索引拉出行。

    这并不能解决您的问题,但可以作为了解我们如何解决问题的开始。

    修复 1 - 分配足够一段时间

    就这么简单。分配的 output_dim 比您现在需要的多 20%、50% 或 200%。在您想要部署另一个模型之前,先估算一下您需要多少。如果那是下个月,那么分配足够的空间让你到达那里(并多一点作为缓冲区)

    修复 2 - 重复使用您的权重

    Fix 1 最终会用完。创建一个新模型,重用您先前训练的模型中的所有先前权重,而不是嵌入层中的权重。创建一个您接下来想要的大小的新嵌入层(并为其添加一些缓冲区)。记住行是输入,列是输出,我们简单地将之前的嵌入矩阵复制到新嵌入矩阵的顶部。

    如果我们的旧矩阵是 input_dim=300,output_dim=20,那就是 300x20 矩阵。如果我们的新矩阵是 input_dim=500,output_dim=20,那就是一个 500x20 的矩阵。将前一个矩阵的前 300 行复制到初始化的 500x20 矩阵中。

    【讨论】:

      猜你喜欢
      • 2021-09-02
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 2020-10-27
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      相关资源
      最近更新 更多