当前位置: 首页 > 知识库问答 >
问题:

如何使用可变大小的输入进行培训?

曹浩淼
2023-03-14

这个问题相当抽象,不一定与tensorflow或keras有关。假设您想要训练一个语言模型,并且您想要为您的LSTM使用不同大小的输入。我特别关注这篇论文:https://www.researchgate.net/publication/317379370_A_Neural_Language_Model_for_Query_Auto-Completion.

除其他外,作者使用单词嵌入和一种热字符编码。最有可能的是,每个输入的维度都不同。现在,为了将其纳入网络,我看到了一些替代方案,但我确信我遗漏了一些东西,我想知道应该如何做到。

  • 创建形状的三维张量(实例,2,max(嵌入,字符))。也就是说,用0填充较小的输入
  • 创建形状的三维张量(实例、嵌入字符、1))。即串联输入

在我看来,这两种选择都不利于有效地训练模型。那么,最好的方法是什么?我看到作者为此使用了嵌入层,但从技术上讲,这意味着什么?

编辑

这里有更多的细节。让我们将这些输入称为X(字符级输入)和E(单词级输入)。在序列(文本)的每个字符上,我计算x、e和y,即标签。

  • x:字符1热编码。我的角色索引的大小是38,所以这是一个填充了37个零和1个1的向量
  • e:200维预计算单词嵌入。如果字符是空格,则提取序列中前一个单词的单词嵌入,否则,为不完整单词指定向量(INC,大小也为200)。序列“red car”的实例:

共有1个答案

慕永年
2023-03-14

根据keras的文档,填充的想法似乎就是其中之一。嵌入层中有“掩蔽”(masking)参数,它将使keras跳过这些值,而不是处理它们。从理论上讲,您不会损失那么多性能。如果库构建良好,那么跳过实际上就是跳过额外的处理。

您只需要注意不要将值零归因于任何其他字符,甚至不是空格或未知单词。

嵌入层不仅仅用于掩蔽(掩蔽只是嵌入层中的一个选项)。

嵌入层将单词/字符字典中的整数值转换为特定形状的实际向量。

假设你有这本字典:

1: hey
2: ,
3: I'm
4: here
5: not

你可以这样造句

[1,2,3,4,0] -> this is "hey, I'm here"
[1,2,3,5,4] -> this is "hey, I'm not here"
[1,2,1,2,1] -> this is "hey, hey, hey"

嵌入层将把这些整数中的每一个转换成一定大小的向量。这同时做了两件好事:

>

创建一个向量,该向量将是每个单词的“有意义”的特征集。

经过训练,它们成为“有意义的”载体。每个元素开始代表单词的某个特征,尽管这个特征对人类来说很模糊。嵌入可能能够检测动词、名词、阴性、阳性等词,以及以数字值组合(存在/消失/特征强度)编码的一切。

您也可以尝试这个问题中的方法,它不是使用掩蔽,而是需要按长度分隔批次,这样每个批次都可以一次进行训练,而无需填充它们:Keras误解了训练数据的形状

 类似资料:
  • 我有一个很像tensorflow语音命令演示的模型,只是它需要一个大小可变的1D数组作为输入。现在,我发现很难使用tflite\u convert将此模型转换为tflite,因为tflite\u convert需要输入形状。 据说tf lite需要固定大小的输入以提高效率,您可以在推理过程中调整输入大小,作为模型的一部分。然而,我认为这将涉及截断我不想要的输入。有什么方法可以让TF lite发挥作

  • 问题内容: 我有一个具有文件上传功能的表单,如果用户尝试上传的文件太大,我希望能够有一些不错的客户端错误报告,是否有一种方法可以使用jQuery检查文件大小,或者纯粹是在客户端上还是以某种方式将文件发布回服务器以进行检查? 问题答案: 您实际上没有访问文件系统的权限(例如,读取和写入本地文件),但是,由于HTML5FileApi规范,您确实可以访问某些文件属性,并且文件大小是其中之一。 对于下面的

  • 我将python 3用于anaconda,将keras用于over tensorflow,我的目标是创建一个具有可变输入大小的Conv层的网络 我在这里找到了使用此代码的 我已经用它用这段代码创建了我自己的模型(我需要一个扁平层) 我一直在犯这个错误 ValueError:“展平”输入的形状没有完全定义(get(None,None,1)。确保将完整的“input\u shape”或“batch\u

  • 当从服务层调用我的的方法时,使用一个长的时,Hibernate的跟踪日志记录会显示每个实体发出的单个SQL语句。 我是否可以强制它进行大容量插入(即多行),而不需要手动摆弄、事务等,甚至不需要原始SQL语句字符串? 致: 而是改为: 在PROD中,我使用的是CockroachDB,性能上的差异是显著的。 日志输出:

  • 问题内容: 我在Windows 10上,安装了anaconda,但我想使用python 3.5在新的,干净的最小环境中独立创建可执行文件。所以我做了一些测试: TEST1:我在文件夹testenv中仅创建了一个python脚本test1.py: 然后创建环境,安装pyinstaller并创建可执行文件 它创建了大约6 Mb的我的test1.exe 测试2:我将test1.py修改如下: 我在环境中