Open SuperSaiyanSSS opened 6 years ago
看上去你是没有重新训练模型而直接跑了test?
明白了,原来只有到8000步之后才会保存模型。 请问步数多少是否和训练样本数有关?一千多个样本训练了100多步就停止了
@SuperSaiyanSSS (epoch*data_num)/big_num(also batch size) = steps
非常感谢!
@SuperSaiyanSSS 您的问答中“明白了,原来只有到8000步之后才会保存模型。 请问步数多少是否和训练样本数有关?一千多个样本训练了100多步就停止了”,8000步、步数都是什么意思啊?我也是在作者的十二个关系后面添加了一个,也把原来的num_classes = 12中的12改成了13,我的也是报出和你一样的错误,应该怎么做才正确啊?
我的这个工程也是这种错误,在原有的12种关系后面直接添加了一种关系,现在也是一样的报错,应该怎么解决啊,急,谢谢各位大佬
@dbj0606 1,步数是指循环训练迭代的次数。
2,因为作者发的这个项目的文本原料太少(为了验证方便起见),迭代训练了100多次(由楼上的公式(epoch*data_num)/big_num(also batch size) = steps
可得)就停止了。而作者代码则设定了只有在8000次以上才保存模型。
3,因此,你加了一个关系后,100多步训练得到的模型并没有保存,用的模型仍然是作者项目预先训练好的12个关系/8000多步训练的模型。(即model文件夹中原有的模型)。所以,用的模型无法支持13个关系。
4,其实你就算不加第13个关系,按原代码运行,训练的模型也没有保存,用的模型仍然是作者项目预先训练好的12个关系/8000多步训练的模型
5,综上,你加了第13个关系后,要么加语料,让其足够训练到8000步以上,要么把代码里大于8000步保存改成大于100步保存。代码在train_GRU.py的第125行。
@SuperSaiyanSSS 好的,明白了,非常感谢您。
@SuperSaiyanSSS 老铁有没有想出什么好方法提升准确率和鲁棒性的呢? 我现在想到的有 1 dropout 参数 2 one-hot形式的位置编码(还没太想通为啥随即初始化的向量也可以那么work 3 往数据里面加入噪声 4 人为的定义一些规则?
@SuperSaiyanSSS @crownpku 我也是按照1楼的方法增加了一个类,加了训练数据。我已经在train_GRU.py里面把save model的条件改为了
if current_step > 100 and current_step % 10 == 0:
print('saving model')
为什么test的时候还是报错啊? InvalidArgumentError (see above for traceback): Assign requires shapes of both tensors to match. lhs shape= [13] rhs shape= [12] [[Node: save/Assign_10 = Assign[T=DT_FLOAT, _class=["loc:@model/bias_d"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/device:GPU:0"](model/bias_d, save/RestoreV2_10/_17)]] [[Node: save/RestoreV2_14/_18 = _SendT=DT_FLOAT, client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device_incarnation=1, tensor_name="edge_54_save/RestoreV2_14", _device="/job:localhost/replica:0/task:0/device:CPU:0"]]
@leolle 因为你没有进行训练,直接进行测试了,需要先进行训练模型的
@AmberCa 我训练了啊
@leolle 你的test_GRU.py的main函数中的第一行有没有这么一句话pathname = "./model/ATT_GRU_model-9000",ATT_GRU_model-9000这个是作者原来的训练的模型,你需要改成自己的训练的模型的名字
@AmberCa 谢谢。 该在test_GRU.py里面改:
def main(_):
pathname = "./model/ATT_GRU_model-190"
wordembedding = np.load('./data/vec.npy')
只加了7行数据,测试结果看起来还行: 请输入中文句子,格式为 "name1 name2 sentence":中国人寿保险(集团)公司 中国人寿保险股份有限公司 中国人寿保险(集团)公司发起设立中国人寿保险股份有限公司 实体1: 中国人寿保险(集团)公司 实体2: 中国人寿保险股份有限公司 中国人寿保险(集团)公司发起设立中国人寿保险股份有限公司 关系是: No.1: 设立, Probability is 0.45160645 No.2: 合作, Probability is 0.18407393 No.3: 好友, Probability is 0.08524712
前提:用示例数据可以运行成功 在示例数据的12个关系后新增一个关系 我在network.py中将Settings类的num_classes由12改为13 在test_GRU,py中将main_for_evaluation()中的test_settings.num_classes和main(_)中的test_settings.num_classes更改为13 同时original_data中的train.txt/test.txt/relation2id.txt也作了相应更新,增加了新数据和关系 确保是第一次运行initial.py(即之前没有data中之前的npy) 但运行仍然报错如下
暂时不知道还有哪些需要更改的地方,希望指点一二