自定义模型paddle.Model训练, 动态图:paddle.Model.load然后paddle.model.predict预测结果是正确,paddle.load然后set_state_dict然后eval()然后前向计算结果错误, 静态图:使用paddle.load然后paddle.jit.to_static然后paddle.jit.save然后预测paddle.inference.create_predictor结果错误 静态图:使用paddle.model.save('inference', False)然后paddle.inference.create_predictor(paddle.inference.Config('inference.pdmodel', 'inference.pdiparams'))结果错误 希望高手大侠可以直接运行我的aistudio项目看结果,这样效率更高
代码如下:
import paddle as pp
class Net(pp.nn.Layer): ... @pp.jit.to_static() def forward(self, x): ... model = pp.Model(Net(), inputs=x, labels=y) model.fit( save_dir="output/" ) model = pp.Model(Net(), inputs=x) model.load("output/final") model.prepare() model.save('inference', False) results = model.predict() #results:1234结果正确 config = paddle_infer.Config('inference.pdmodel', 'inference.pdiparams') predictor = paddle_infer.create_predictor(config) predictor.run() #results:9876结果错误
我修改为如下方式,结果还是不一致,原来能正确识别,导出静态后精度只有10%
n=Net(is_infer=True) para_state_dict = pp.load("/home/aistudio/output/final.pdparams") n.set_state_dict(para_state_dict)
model = pp.jit.to_static( n, input_spec=[input_define] ) pp.jit.save(model, 'model')
以下动态图输出结果与pp.jit.to_static输出结果一致都是精度不准确的结果。只有在model = pp.Model(Net(), inputs=x, labels=y) 精度才是准确的 n=Net(is_infer=True) para_state_dict = pp.load("/home/aistudio/output/final.pdparams") n.set_state_dict(para_state_dict) n.eval() img_name=r'/home/aistudio/sample_img/8205.jpg' path=r'/home/aistudio/sample_img' for root, dirs, files in os.walk(path): for f in files: img_name = os.path.join(root, f) img = Image.open(img_name) x = np.array(img, dtype="float32").reshape((1,IMAGE_SHAPE_C, IMAGE_SHAPE_H, IMAGE_SHAPE_W)) x=pp.to_tensor(x, dtype='float32') out = n(x) print(f,out)
以下是aistudio地址 https://aistudio.baidu.com/aistudio/projectdetail/4067637?contributionType=1