load model parameters with load_dygraph
Created by: henrystrident
When I create a model with a .pdparams file , an error occures like this: RuntimeError: Parameter not found, Can't not find [ features.conv0.weight ] in stat_dictuse_structured_name is set to [True]. And my code:
import paddle.fluid as fluid
import paddle.fluid.dygraph.nn as nn
def make_layers(cfg, batch_norm=False):
layers = []
in_channels = 3
for i in range(len(cfg)):
v = cfg[i]
if v == 'M':
layers.append(('pool'+str(i), nn.Pool2D(pool_stride=2, pool_size=2, pool_type='max')))
else:
if batch_norm:
conv_2D = nn.Conv2D(num_channels=in_channels,
num_filters=v,
filter_size=3,
padding=1)
layers.extend([('conv'+str(i), conv_2D), nn.BatchNorm(num_channels=v, act='relu')])
else:
conv_2D = nn.Conv2D(num_channels=in_channels,
num_filters=v,
filter_size=3,
padding=1,
act='relu')
layers.append(('conv'+str(i), conv_2D))
in_channels = v
return fluid.dygraph.Sequential(*layers)
class VGG(fluid.dygraph.Layer):
def __init__(self, features):
super(VGG, self).__init__()
self.features = features
self.reg_layer = fluid.dygraph.Sequential(('reg_layer_conv1', nn.Conv2D(num_channels=512,
num_filters=256,
filter_size=3,
padding=1,
act='relu')),
('reg_layer_conv2', nn.Conv2D(num_channels=256,
num_filters=128,
filter_size=3,
padding=1,
act='relu')),
('reg_layer_conv3', nn.Conv2D(num_channels=128,
num_filters=1,
filter_size=1)))
def forward(self, x):
x = self.features(x)
x = fluid.layers.resize_bilinear(x, out_shape=[64, 64])
x = self.reg_layer(x)
return fluid.layers.abs(x)
def vgg():
return VGG(make_layers(cfg['E']))
cfg = {
'E': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512]
}
if __name__ == '__main__':
with fluid.dygraph.guard():
save_model = vgg()
save_parameters = save_model.state_dict()
fluid.save_dygraph(save_parameters, './test_params')
load_model = vgg()
load_model.set_dict('./test_params')