InvalidArgumentError (see above for traceback): Assign requires shapes of both tensors to match

在服务器上训练完的模型,copy到本地电脑进行测试模型,但是此时的测试语料是新的语料,存在“测试语料中的字不在之前的训练时生成的字典中”(本人做的是基于LSTM的命名实体识别的任务)的问题,在测试的过程中,运动下面的问题:

InvalidArgumentError (see above for traceback): Assign requires shapes of both tensors to match. lhs shape= [2457,100] rhs shape= [2354,100]
     [[Node: saveModel/save/Assign_4 = Assign[T=DT_FLOAT, _class=["loc:@embeddings"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](embeddings/Adam, saveModel/save/RestoreV2_4)]]

上面的问题是说数据的shape匹配不上

仔细分析了各个数据的含义:

100:字的向量维度

2457:来一个测试语料,本人错误的将未在训练时生成的字典中时,则增大字典,即表示增大之后字典的大小

2354:训练时生成的字典大小
 

修改方法:

将未出现在字典中的字归为未登录词上面即可,即代码中扩充字典的地方,将未登录词所对应的Id统一映射到0(也可以使其他数字,因为我的代码中是将未登录词的id表示为0)上面

原因:

模型保存时会将训练好的参数进行保存,比如权重W,此时有的参数是有shape的,无形当中也会将字典的长度保存进去(仅本人的理解)

猜你喜欢

转载自blog.csdn.net/yangfengling1023/article/details/81315612
今日推荐