issue
在做文本分类功能,用到 embedding layer 的时候可能会遇到这个问题,
tensorflow.python.framework.errors_impl.InvalidArgumentError indices = is not in
具体具体数值不是固定的,可能是这样
tensorflow.python.framework.errors_impl.InvalidArgumentError: indices[0,5,0] = 10 is not in [0, 7)
问题原因
NLP处理中都会用到 embedding 层,用来做 word2vector 的抓换,
通常会对输入字符进行编码,如
a -> 0,
b -> 1,
c -> 2
embedding 层会把 0 ~ 2 映射到向量空间,此时需要指定embedding layer的两个参数
param: intput_dim, output_dim
layers.Embedding(input_dim, output_dim, dropout=0.2, name='embedding')
比如上面的例子,如果输入只有abc三个字符,那么input_dim就是3, 表示有三个编码,
output_dim 可以是任意数,假设是2,那么意味着每个字符在经过embedding后会变成[2]向量。
此时如果输入的数据中出现了大于3的编码,就会引起这个错误
tensorflow.python.framework.errors_impl.InvalidArgumentError indices = is not in
解决办法
· 首先看 input_dim 参数,是否小于输入的编码长度
· 再确认输入的字符是不是出现了大于 intpu_dim 的编码
比如下面这个错误example
tensorflow.python.framework.errors_impl.InvalidArgumentError: indices[0,5,0] = 10 is not in [0, 7)
indices[0,5,0] = 10,表示编码中出现了10,
[0, 7) 表示编码最大值7,
出现了超过 input_dim 的值,因此可以分析定位是10不该出现,还是input_dim小了。