加载模型时候报错 paddle.fluid.core.EnforceNotMet: Cannot read more from file
Created by: xiangyubo
1)PaddlePaddle版本:paddle.fluid.1.2.0 4)系统环境:Linux,Python2.7 训练时候使用 fluid.io.save_inference_model保存模型,预测的时候使用fluid.io.load_inference_model加载模型文件。保存的是我自己训练的 vgg 模型。保存没问题,加载的时候报错
Traceback (most recent call last):
File "classify-infer.py", line 43, in <module>
executor=exe)
File "/home/work/xiangyubo/paddle_release_home/python/lib/python2.7/site-packages/paddle/fluid/io.py", line 784, in load_inference_model
load_persistables(executor, dirname, program, params_filename)
File "/home/work/xiangyubo/paddle_release_home/python/lib/python2.7/site-packages/paddle/fluid/io.py", line 529, in load_persistables
filename=filename)
File "/home/work/xiangyubo/paddle_release_home/python/lib/python2.7/site-packages/paddle/fluid/io.py", line 395, in load_vars
filename=filename)
File "/home/work/xiangyubo/paddle_release_home/python/lib/python2.7/site-packages/paddle/fluid/io.py", line 436, in load_vars
executor.run(load_prog)
File "/home/work/xiangyubo/paddle_release_home/python/lib/python2.7/site-packages/paddle/fluid/executor.py", line 472, in run
self.executor.run(program.desc, scope, 0, True, True)
paddle.fluid.core.EnforceNotMet: Cannot read more from file ./classify-model/vgg-classify-params at [/paddle/paddle/fluid/operators/load_combine_op.cc:58]
PaddlePaddle Call Stacks:
0 0x7f4bdb4b2226p paddle::platform::EnforceNotMet::EnforceNotMet(std::__exception_ptr::exception_ptr, char const*, int) + 486
1 0x7f4bdbb97ab4p paddle::operators::LoadCombineOp::RunImpl(paddle::framework::Scope const&, boost::variant<paddle::platform::CUDAPlace, paddle::platform::CPUPlace, paddle::platform::CUDAPinnedPlace, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_> const&) const + 2004
2 0x7f4bdcda56afp paddle::framework::OperatorBase::Run(paddle::framework::Scope const&, boost::variant<paddle::platform::CUDAPlace, paddle::platform::CPUPlace, paddle::platform::CUDAPinnedPlace, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_> const&) + 463
3 0x7f4bdb588ef3p paddle::framework::Executor::RunPreparedContext(paddle::framework::ExecutorPrepareContext*, paddle::framework::Scope*, bool, bool, bool) + 227
4 0x7f4bdb589920p paddle::framework::Executor::Run(paddle::framework::ProgramDesc const&, paddle::framework::Scope*, int, bool, bool) + 128
5 0x7f4bdb49e0dbp
6 0x7f4bdb4da18ep
7 0x7f4c3efcabb8p PyEval_EvalFrameEx + 25016
8 0x7f4c3efce0bdp PyEval_EvalCodeEx + 2061
9 0x7f4c3efcb345p PyEval_EvalFrameEx + 26949
10 0x7f4c3efce0bdp PyEval_EvalCodeEx + 2061
11 0x7f4c3efcb345p PyEval_EvalFrameEx + 26949
12 0x7f4c3efce0bdp PyEval_EvalCodeEx + 2061
13 0x7f4c3efcb345p PyEval_EvalFrameEx + 26949
14 0x7f4c3efce0bdp PyEval_EvalCodeEx + 2061
15 0x7f4c3efcb345p PyEval_EvalFrameEx + 26949
16 0x7f4c3efce0bdp PyEval_EvalCodeEx + 2061
17 0x7f4c3efcb345p PyEval_EvalFrameEx + 26949
18 0x7f4c3efce0bdp PyEval_EvalCodeEx + 2061
19 0x7f4c3efce1f2p PyEval_EvalCode + 50
20 0x7f4c3eff6f42p PyRun_FileExFlags + 146
21 0x7f4c3eff82d9p PyRun_SimpleFileExFlags + 217
22 0x7f4c3f00e00dp Py_Main + 3149
23 0x7f4c3e20bbd5p __libc_start_main + 245
24 0x4007a1p
我的 vgg 模型基本和paddle在github上的一样,只是我自己加了一层 bn
class VGGNet():
def __init__(self, layers=16):
self.layers = layers
def net(self, input, class_dim=1000):
layers = self.layers
vgg_spec = {
11: ([1, 1, 2, 2, 2]),
13: ([2, 2, 2, 2, 2]),
16: ([2, 2, 3, 3, 3]),
19: ([2, 2, 4, 4, 4])
}
assert layers in vgg_spec.keys(), \
"supported layers are {} but input layer is {}".format(vgg_spec.keys(), layers)
nums = vgg_spec[layers]
conv1 = self.conv_block(input, 64, nums[0])
conv2 = self.conv_block(conv1, 128, nums[1])
conv3 = self.conv_block(conv2, 256, nums[2])
conv4 = self.conv_block(conv3, 512, nums[3])
conv5 = self.conv_block(conv4, 512, nums[4])
fc_dim = 4096
fc1 = fluid.layers.fc(
input=conv5,
size=fc_dim,
act='relu',
param_attr=fluid.param_attr.ParamAttr(
initializer=fluid.initializer.Normal(scale=0.005)),
bias_attr=fluid.param_attr.ParamAttr(
initializer=fluid.initializer.Constant(value=0.1)))
fc1 = fluid.layers.dropout(x=fc1, dropout_prob=0.5)
fc2 = fluid.layers.fc(
input=fc1,
size=fc_dim,
act='relu',
param_attr=fluid.param_attr.ParamAttr(
initializer=fluid.initializer.Normal(scale=0.005)),
bias_attr=fluid.param_attr.ParamAttr(
initializer=fluid.initializer.Constant(value=0.1)))
fc2 = fluid.layers.dropout(x=fc2, dropout_prob=0.5)
out = fluid.layers.fc(
input=fc2,
size=class_dim,
act='softmax',
param_attr=fluid.param_attr.ParamAttr(
initializer=fluid.initializer.Normal(scale=0.005)),
bias_attr=fluid.param_attr.ParamAttr(
initializer=fluid.initializer.Constant(value=0.1)))
return out
def conv_block(self, input, num_filter, groups):
conv = input
for i in range(groups):
if i == groups - 1:
act = None
else:
act = 'relu'
conv = fluid.layers.conv2d(
input=conv,
num_filters=num_filter,
filter_size=3,
stride=1,
padding=1,
act=act,
param_attr=fluid.param_attr.ParamAttr(
initializer=fluid.initializer.Normal(scale=0.01)),
bias_attr=fluid.param_attr.ParamAttr(
initializer=fluid.initializer.Constant(value=0.0)))
conv = fluid.layers.batch_norm(input=conv, act=act)
return fluid.layers.pool2d(
input=conv, pool_size=2, pool_type='max', pool_stride=2)