情况是这样的,我将模型训练好,得到参数dnn_params1.tar.gz,然后用这个模型打分也是正常的。
但是,如果我将这个dnn_params1.tar.gz用tar -xzvf 命令解压缩到目录temp/下,然后再跳转到temp目录下,用命令tar -zcvf 将所有文件压缩成dnn_params2.tar.gz。
然后我加载dnn_params2.tar.gz预测,结果就报错。
Traceback (most recent call last):
File "dnn_attention.py", line 153, in
dnn_infer("model_params/dnn_params_pass0.tar.gz")
File "dnn_attention.py", line 118, in dnn_infer
parameters = paddle.parameters.Parameters.from_tar(gzip.open(param_file_name))
File "/home/forum/paddle_local/python27-gcc482/lib/python2.7/site-packages/paddle/v2/parameters.py", line 382, in from_tar
f = tar.extractfile(param_name)
File "/home/forum/paddle_local/python27-gcc482/lib/python2.7/tarfile.py", line 2136, in extractfile
tarinfo = self.getmember(member)
File "/home/forum/paddle_local/python27-gcc482/lib/python2.7/tarfile.py", line 1821, in getmember
raise KeyError("filename %r not found" % name)
KeyError: "filename u'_attention_layer.w0' not found"
压缩的时候不要带入当前目录,进入参数的当前目录下,执行tar czvf
dnn_params2.tar.gz
非常感谢。
还有一个问题,如果我将模型文件dnn_params2.tar.gz解压缩到一个目录中,然后我用c++读取其中的某一层的参数,比如我要读取_fc1_layer.w0文件,应该怎么做呢?
发现在存的时候,就应该保留为明文,然后C++直接读取就OK啦。
问题已经解决了。谢谢