Skip to content

Commit e3e2b62

Browse files
committed
fix save and load bug, test=release/1.4
1 parent 1237dfa commit e3e2b62

File tree

4 files changed

+21
-11
lines changed

4 files changed

+21
-11
lines changed

paddle/fluid/imperative/layer.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,11 @@ class PYBIND11_HIDDEN RuntimeInferVarTypeContext
464464

465465
void SetType(const std::string& name,
466466
framework::proto::VarType::Type type) override {
467-
var_set_[name]->SetType(type);
467+
if (name == "kLookupTablePath") {
468+
VLOG(2) << "SUPER UGLY FIX, remove this when move imperative mode in C++";
469+
} else {
470+
var_set_[name]->SetType(type);
471+
}
468472
}
469473

470474
framework::proto::VarType::Type GetDataType(

python/paddle/fluid/dygraph/checkpoint.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def load_persistables(vardict, dirname, filename=None):
113113
def _save_var_to_file(stat_dict, file_dir, file_name):
114114
save_block = default_main_program().global_block()
115115
save_var_map = {}
116-
for each_var in stat_dict.items():
116+
for var_key, each_var in stat_dict.items():
117117
save_var_map[each_var.name] = each_var
118118
if file_name is None:
119119
save_block.append_op(
@@ -138,7 +138,7 @@ def _load_var_from_file(stat_dict, file_dir, file_name):
138138
load_block = default_main_program().global_block()
139139
load_var_map = {}
140140

141-
for each_var in stat_dict.items():
141+
for var_key, each_var in stat_dict.items():
142142
assert isinstance(each_var, Variable)
143143
if each_var.type == core.VarDesc.VarType.RAW:
144144
continue
@@ -175,5 +175,5 @@ def _clone_var_in_block_(block, var):
175175
shape=var.shape,
176176
dtype=var.dtype,
177177
type=var.type,
178-
lod_level=var.lod_level,
178+
lod_level=0,
179179
persistable=True)

python/paddle/fluid/dygraph/layers.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,10 @@ def state_dict(self, destination=None, prefix='', include_sublayers=True):
246246
def load_dict(self, stat_dict, include_sublayers=True):
247247
for name, item in self.__dict__.get('_parameters', None).items():
248248
if item.name in stat_dict:
249-
self.__setattr__(name, stat_dict[item.name])
249+
var = item._ivar.value()
250+
tensor = var.get_tensor()
251+
tensor.set(stat_dict[item.name].numpy(),
252+
framework._current_expected_place())
250253

251254
if include_sublayers:
252255
for layer_name, layer_item in self._sub_layers.items():

python/paddle/fluid/tests/unittests/test_imperative_checkpoint.py

+9-6
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def forward(self, inputs):
9999

100100

101101
class TestDygraphCheckpoint(unittest.TestCase):
102-
def save_load_persistables(self):
102+
def test_save_load_persistables(self):
103103
seed = 90
104104
epoch_num = 1
105105

@@ -135,23 +135,26 @@ def save_load_persistables(self):
135135

136136
avg_loss.backward()
137137
sgd.minimize(avg_loss)
138-
fluid.dygraph.save_persistables(mnist, "save_dir")
138+
fluid.dygraph.save_persistables(mnist.state_dict(),
139+
"save_dir")
139140
mnist.clear_gradients()
140141

141142
for param in mnist.parameters():
142143
dy_param_init_value[param.name] = param.numpy()
143144

144145
mnist.load_dict(
145-
fluid.dygraph.load_persistables(mnist, "save_dir"))
146+
fluid.dygraph.load_persistables(mnist.state_dict(),
147+
"save_dir"))
146148

147149
restore = mnist.parameters()
148150

149151
self.assertEqual(len(dy_param_init_value), len(restore))
150152
for value in restore:
151153
self.assertTrue(
152-
np.allclose(value, dy_param_init_value[value.name]))
153-
self.assertTrue(np.isfinite(value.all()))
154-
self.assertFalse(np.isnan(value.any()))
154+
np.allclose(value.numpy(), dy_param_init_value[
155+
value.name]))
156+
self.assertTrue(np.isfinite(value.numpy().all()))
157+
self.assertFalse(np.isnan(value.numpy().any()))
155158

156159
step += 1
157160

0 commit comments

Comments
 (0)