pytorch-relation-extraction
pytorch-relation-extraction copied to clipboard
问题求助
请问下 max_ins_id = torch.max(out[:, label], 0)[1] 这句是什么意思啊 我这里运行一直报错呢 max_ins_id = max_ins_id.data.numpy()[0] IndexError: too many indices for array
是不是label那有问题?
max_ins_id = torch.max(out[:, label], 0)[1]
out是一个二维的tensor, 维度假设是B*53, 表示一个bag内所有句子的预测概率. out[:, label]取出label那一列,然后再取最大值。 报错建议可以输出下out.size() 以及 max_ins_id.size() 及其内容。
max_ins_id = torch.max(out[:, label], 0)[1] print('max_ins_id.data:', max_ins_id.data)这个就只输出max_ins_id.data: tensor(2)这个了啊 后面再进行.numpy()[0]操作应该肯定会报错哇 我查了size这些是对的呢
另外再问下max_ins_id 这个是不是就是求得预测概率最大的那个句子index?
这个代码还没有兼容Pytorch 0.4及以上的版本,需要做相应的修改,后续会更新Python3.X+Pytorch0.4+. max-ins-id 是一个bag内概率最大的 句子的index
恩 我的版本就是Python3.X+Pytorch0.4的 有些地方不兼容 max_ins_id = max_ins_id.data.numpy()[1]这句 我把后面的[1]去掉了 因为看到只有1个元素 现在可以跑通 但是out在几轮训练后出现了很多nan。。。
需要修改的地方不少,不能仅仅修改一个[1]。 0.4里面先没有了Variable类型,以及使用.item代替.data等等,建议暂时换成0.3x 以及python2.7
好,我先换成0.3x 以及python2.7试试,后面再看看能否改成新版本
楼主,我换了0.3x 以及python2.7 但是貌似还是训练有问题,误差越训练越大,能帮忙看下数据这些有问题吗,多谢!
bag_feature中的数据格式这种有问题不 ('bag_npy:', array([[list([0, 0]), 1, list([[0, 2, 4, 525, 6, 112, 15099, 2138, 6, 4149, 2, 0, 2, 8, 5338, 2138, 6, 335, 2, 20, 904, 73, 908, 9, 1083, 3997, 7409, 2, 4, 400, 6, 0, 0, 6, 29209, 2, 0, 2, 8, 4, 282, 13060, 7409, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]), list([[[85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]]), list([[0, 34]]), list([[1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3
看起来数据应该没问题,这是用的大数据集?53类关系的?
嗯 是用的大数据集NYT. PCNN_ONE这个模型能用FilterNYT这个数据吗
data = select_instance(model, data, label) 这句的作用是什么啊?问题应该出在这个函数里
问题已解决
self.mask_embedding = nn.Embedding(4, 3) self.mask_embedding.weight.data.copy_(self.masks)这个mask的权重在训练时会莫名奇妙一直增大,导致out很大,我理解这个权重应该是个常量才对[[0,0,0],[1,0,0],[0,1,0],[0,0,1]],不知道理解的是否正确
@jrcxb 对的,需要一直是常数。 这里我忘记修改了,已经改正
为什么我用pcnn比不用pcnn的效果要差呢 precision+recall不到0.5 不用pcnn precision+recall可以达到0.8~0.9 楼主那边的实验结果是怎样的啊?
都是用的pcnn one的模型 当设置use_pcnn为True和Flase的区别
我这边这俩个差别不大, PCNN其实也就是用mask那里实现的, 是不是有可能你那里的mask修改出问题了
后面我又把你的最新代码down下来跑的 epoch=16 跑的结果precision+recall最多0.5.。。。。系统是ubuntu 16.04这个应该没影响的把
@jrcxb 我再测试一下。
嗯,我现在用老版的那个piecewise函数再训练,开始运行时也报错,看了下应该是在pool[0]=0时会报错,后面改成了
seg_1 = ins[:, :pool[0] + 1].max(1)[0].unsqueeze(1) # all_filter_num * 1
seg_2 = ins[:, pool[0] + 1: pool[1] + 1].max(1)[0].unsqueeze(1) # all_filter_num * 1
seg_3 = ins[:, pool[1] + 1:].max(1)[0].unsqueeze(1)
试跑了下loss还比较下,现在跑几个epoch看看 ,楼主本地测试完了说下结果哈,现在主要时用fast piecewise那个方法训练precision+recall毕竟差
请问楼主又测试了吗?我用老版本的piecewise 性能还可以,但是感觉训练时间比较长
font{
line-height: 1.6;
}
ul,ol{
padding-left: 20px;
list-style-position: inside;
}
最近在外出差, 暂时没有时间去修改测试。 老版本的的确要慢一些。 还有一个建议,直接可以暂时使用 use_pcnn=False. 性能上差不太多。
shomyliu
[email protected]
签名由
网易邮箱大师
定制
在2018年11月3日 13:15,jrcxb<[email protected]> 写道:
请问楼主又测试了吗?我用老版本的piecewise 性能还可以,但是感觉训练时间比较长
—You are receiving this because you commented.Reply to this email directly, view it on GitHub, or mute the thread.