-
Notifications
You must be signed in to change notification settings - Fork 5.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
C预测程序中,如何跳过部分底层网络,将中间层作为输入? #3915
Comments
从 |
@luotao1 删掉部分模型参数文件有用么?我删了right的参数,还是一样的错误 |
参数的header,你也得对应进行变化。 |
header如何改呢,在哪个文件 |
每个参数都有自己的header,不知道你说的right参数是哪一个文件。从出错信息上看,
|
right是name为right的部分网络
我这个模型的结构应该是这样的:
现在我把right去掉了,所以___fc_layer_1__.w0不匹配,这个怎么改呢 |
DSSM 的网络中 right 和 left 网络完全对称,共享参数。如果去掉 right 不会出现 |
target = paddle.layer.data(
name='target_input',
type=paddle.data_type.dense_vector_sequence(self.vocab_sizes[1])) 输入由 for id, input in enumerate([source]):
x = self.create_embedding(input, prefix=embed_prefixs[id])
word_vecs.append(x) 去掉了原target的输入 semantics = []
for id, input in enumerate(word_vecs):
x = self.model_arch_creater(input, prefix=prefixs[id])
semantics.append(x)
semantics.append(target) target直接输入到semantics层
模型文件解压缩后,删掉了right开头的所有文件,包括right_emb.w、right_fc_0_128.b等
left的输入不变:{330070,1515788,1606717,163247,1622216,251207,304166,729241,1177768}; right的输入变为(离线导出): float intent_semantic[] = {-0.434024,-0.999805,0.999574,0.999854,0.99991,-0.999943,-1.0,0.906624,-0.999991,0.999976,-0.999891,0.999057,0.999854,0.999814,-0.999994,-0.999516,0.818375,0.263941,-0.99892,-0.95015,-0.999959,0.80347,0.99926,0.999913,-0.0611929,-0.999988,0.999909,0.999227,-0.999974,0.0621019,-0.997075,0.665512};
paddle_matrix mat = paddle_matrix_create(/* sample_num */ 1, 32, false);
paddle_real* intent_array;
CHECK(paddle_matrix_get_row(mat, 0, &intent_array));
for (int i = 0; i < 32; ++i) {
intent_array[i] = intent_semantic[i];
}
CHECK(paddle_arguments_set_value(in_args, 1, mat)); |
target = paddle.layer.data(
name='target_input',
type=paddle.data_type.dense_vector_sequence(self.vocab_sizes[1])) 下面这个变量是多少?是不是 32 ? self.vocab_sizes[1] 请尽可能地组织一下问题。如果不能提炼问题,就无法迅速的解决问题。 里面这些变量都是什么,一个完全脱离背景的人需要花时间去理解。这些是改过了?还是没改?这些变量具体取值都是什么?自己是否有做过检查。 并且请确认提供的信息是完备,(完备不意味的把所有的代码都贴出来)。
这个出错信息非常明确,也非常简单。配置发生了变化, |
@lcy-seso 谢谢 重新运行后的出错信息: 训练时的网络结构:
预测时的网络结构:
不知道这样说明白了没有。 |
我可以理解你的任务和需求。 有一个办法,你试试看:https://github.com/lcy-seso/models/blob/8f10929112909c20dd4643fae05eb8c116a4792d/globally_normalized_reader/model.py#L327 你检查下修改之后的网络解析结果,和没有修改的网络解析结果。除去被丢弃掉的embedding层。修改前后两个网络的参数名,参数大小信息应该完全一样,不应该有差异。 |
@lcy-seso 按你的方法解析出来了,网络配置参数应该是正确的:
left_fc_2_32 target_input_32 而原来的网络配置是:
left_fc_2_32 right_fc_2_32 我推测是模型参数文件没有处理好。 再运行,成功 |
赞清晰的描述,我先关闭这个issue了,如有更新可以随时再打开。 |
背景:
DSSM模型中,一个输入是query,另一个输入是候选词。为了优化线上计算性能,候选词可以离线计算出来,在线计算只计算query部分的网络,在线和离线结果直接给softmax层
做法:
trainer_config.py
,删除target部分的网络,输入设为dense_vector_sequence类型问题:
加载原模型后,运行出core:
怀疑是不是模型参数文件也得修改?删掉right_fc的那些参数文件?
The text was updated successfully, but these errors were encountered: