自定义模型后,训练,推理结果都是正确,但是保存为静态图模型后,再推理同样的样本结果就不一致了
代码如下:
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)
paddle.Model.load结果是正确,paddle.load结果错误