|
|
|
|
@ -40,7 +40,7 @@ from paddle.fluid.dygraph.dygraph_to_static.program_translator import ProgramTra
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LeNetDygraph(paddle.nn.Layer):
|
|
|
|
|
def __init__(self, num_classes=10, classifier_activation=None):
|
|
|
|
|
def __init__(self, num_classes=10):
|
|
|
|
|
super(LeNetDygraph, self).__init__()
|
|
|
|
|
self.num_classes = num_classes
|
|
|
|
|
self.features = Sequential(
|
|
|
|
|
@ -55,8 +55,7 @@ class LeNetDygraph(paddle.nn.Layer):
|
|
|
|
|
|
|
|
|
|
if num_classes > 0:
|
|
|
|
|
self.fc = Sequential(
|
|
|
|
|
Linear(400, 120), Linear(120, 84), Linear(84, 10),
|
|
|
|
|
Softmax()) #Todo: accept any activation
|
|
|
|
|
Linear(400, 120), Linear(120, 84), Linear(84, 10))
|
|
|
|
|
|
|
|
|
|
def forward(self, inputs):
|
|
|
|
|
x = self.features(inputs)
|
|
|
|
|
@ -67,6 +66,34 @@ class LeNetDygraph(paddle.nn.Layer):
|
|
|
|
|
return x
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LeNetDeclarative(fluid.dygraph.Layer):
|
|
|
|
|
def __init__(self, num_classes=10):
|
|
|
|
|
super(LeNetDeclarative, self).__init__()
|
|
|
|
|
self.num_classes = num_classes
|
|
|
|
|
self.features = Sequential(
|
|
|
|
|
Conv2d(
|
|
|
|
|
1, 6, 3, stride=1, padding=1),
|
|
|
|
|
ReLU(),
|
|
|
|
|
Pool2D(2, 'max', 2),
|
|
|
|
|
Conv2d(
|
|
|
|
|
6, 16, 5, stride=1, padding=0),
|
|
|
|
|
ReLU(),
|
|
|
|
|
Pool2D(2, 'max', 2))
|
|
|
|
|
|
|
|
|
|
if num_classes > 0:
|
|
|
|
|
self.fc = Sequential(
|
|
|
|
|
Linear(400, 120), Linear(120, 84), Linear(84, 10))
|
|
|
|
|
|
|
|
|
|
@declarative
|
|
|
|
|
def forward(self, inputs):
|
|
|
|
|
x = self.features(inputs)
|
|
|
|
|
|
|
|
|
|
if self.num_classes > 0:
|
|
|
|
|
x = fluid.layers.flatten(x, 1)
|
|
|
|
|
x = self.fc(x)
|
|
|
|
|
return x
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MnistDataset(MNIST):
|
|
|
|
|
def __init__(self, mode, return_label=True, sample_num=None):
|
|
|
|
|
super(MnistDataset, self).__init__(mode=mode)
|
|
|
|
|
@ -198,7 +225,7 @@ class TestModel(unittest.TestCase):
|
|
|
|
|
paddle.manual_seed(seed)
|
|
|
|
|
paddle.framework.random._manual_program_seed(seed)
|
|
|
|
|
|
|
|
|
|
net = LeNet(classifier_activation=None)
|
|
|
|
|
net = LeNet()
|
|
|
|
|
optim_new = fluid.optimizer.Adam(
|
|
|
|
|
learning_rate=0.001, parameter_list=net.parameters())
|
|
|
|
|
model = Model(net, inputs=self.inputs, labels=self.labels)
|
|
|
|
|
@ -287,14 +314,12 @@ class TestModel(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MyModel(paddle.nn.Layer):
|
|
|
|
|
def __init__(self, classifier_activation='softmax'):
|
|
|
|
|
def __init__(self):
|
|
|
|
|
super(MyModel, self).__init__()
|
|
|
|
|
self._fc = Linear(20, 10)
|
|
|
|
|
self._act = Softmax() #Todo: accept any activation
|
|
|
|
|
|
|
|
|
|
def forward(self, x):
|
|
|
|
|
y = self._fc(x)
|
|
|
|
|
y = self._act(y)
|
|
|
|
|
return y
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -311,7 +336,7 @@ class TestModelFunction(unittest.TestCase):
|
|
|
|
|
def get_expect():
|
|
|
|
|
fluid.enable_dygraph(fluid.CPUPlace())
|
|
|
|
|
self.set_seed()
|
|
|
|
|
m = MyModel(classifier_activation=None)
|
|
|
|
|
m = MyModel()
|
|
|
|
|
optim = fluid.optimizer.SGD(learning_rate=0.001,
|
|
|
|
|
parameter_list=m.parameters())
|
|
|
|
|
m.train()
|
|
|
|
|
@ -330,7 +355,7 @@ class TestModelFunction(unittest.TestCase):
|
|
|
|
|
fluid.enable_dygraph(device) if dynamic else None
|
|
|
|
|
self.set_seed()
|
|
|
|
|
|
|
|
|
|
net = MyModel(classifier_activation=None)
|
|
|
|
|
net = MyModel()
|
|
|
|
|
optim2 = fluid.optimizer.SGD(learning_rate=0.001,
|
|
|
|
|
parameter_list=net.parameters())
|
|
|
|
|
|
|
|
|
|
@ -374,7 +399,7 @@ class TestModelFunction(unittest.TestCase):
|
|
|
|
|
for dynamic in [True, False]:
|
|
|
|
|
device = paddle.set_device('cpu')
|
|
|
|
|
fluid.enable_dygraph(device) if dynamic else None
|
|
|
|
|
net = MyModel(classifier_activation=None)
|
|
|
|
|
net = MyModel()
|
|
|
|
|
inputs = [InputSpec([None, 20], 'float32', 'x')]
|
|
|
|
|
labels = [InputSpec([None, 1], 'int64', 'label')]
|
|
|
|
|
optim = fluid.optimizer.SGD(learning_rate=0.001,
|
|
|
|
|
@ -417,7 +442,7 @@ class TestModelFunction(unittest.TestCase):
|
|
|
|
|
fluid.enable_dygraph(device)
|
|
|
|
|
inputs = [InputSpec([None, 20], 'float32', 'x')]
|
|
|
|
|
labels = [InputSpec([None, 1], 'int64', 'label')]
|
|
|
|
|
model = Model(MyModel(classifier_activation=None), inputs, labels)
|
|
|
|
|
model = Model(MyModel(), inputs, labels)
|
|
|
|
|
optim = fluid.optimizer.SGD(learning_rate=0.001,
|
|
|
|
|
parameter_list=model.parameters())
|
|
|
|
|
model.prepare(optimizer=optim, loss=CrossEntropyLoss(reduction="sum"))
|
|
|
|
|
@ -426,7 +451,7 @@ class TestModelFunction(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
inputs = [InputSpec([None, 20], 'float32', 'x')]
|
|
|
|
|
labels = [InputSpec([None, 1], 'int64', 'label')]
|
|
|
|
|
model = Model(MyModel(classifier_activation=None), inputs, labels)
|
|
|
|
|
model = Model(MyModel(), inputs, labels)
|
|
|
|
|
optim = fluid.optimizer.SGD(learning_rate=0.001,
|
|
|
|
|
parameter_list=model.parameters())
|
|
|
|
|
model.prepare(optimizer=optim, loss=CrossEntropyLoss(reduction="sum"))
|
|
|
|
|
@ -436,7 +461,7 @@ class TestModelFunction(unittest.TestCase):
|
|
|
|
|
def test_static_save_dynamic_load(self):
|
|
|
|
|
path = tempfile.mkdtemp()
|
|
|
|
|
|
|
|
|
|
net = MyModel(classifier_activation=None)
|
|
|
|
|
net = MyModel()
|
|
|
|
|
inputs = [InputSpec([None, 20], 'float32', 'x')]
|
|
|
|
|
labels = [InputSpec([None, 1], 'int64', 'label')]
|
|
|
|
|
optim = fluid.optimizer.SGD(learning_rate=0.001,
|
|
|
|
|
@ -448,7 +473,7 @@ class TestModelFunction(unittest.TestCase):
|
|
|
|
|
device = paddle.set_device('cpu')
|
|
|
|
|
fluid.enable_dygraph(device) #if dynamic else None
|
|
|
|
|
|
|
|
|
|
net = MyModel(classifier_activation=None)
|
|
|
|
|
net = MyModel()
|
|
|
|
|
inputs = [InputSpec([None, 20], 'float32', 'x')]
|
|
|
|
|
labels = [InputSpec([None, 1], 'int64', 'label')]
|
|
|
|
|
optim = fluid.optimizer.SGD(learning_rate=0.001,
|
|
|
|
|
@ -557,7 +582,7 @@ class TestModelFunction(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
class TestRaiseError(unittest.TestCase):
|
|
|
|
|
def test_input_without_name(self):
|
|
|
|
|
net = MyModel(classifier_activation=None)
|
|
|
|
|
net = MyModel()
|
|
|
|
|
|
|
|
|
|
inputs = [InputSpec([None, 10], 'float32')]
|
|
|
|
|
labels = [InputSpec([None, 1], 'int64', 'label')]
|
|
|
|
|
@ -567,7 +592,7 @@ class TestRaiseError(unittest.TestCase):
|
|
|
|
|
def test_input_without_input_spec(self):
|
|
|
|
|
for dynamic in [True, False]:
|
|
|
|
|
paddle.disable_static() if dynamic else None
|
|
|
|
|
net = MyModel(classifier_activation=None)
|
|
|
|
|
net = MyModel()
|
|
|
|
|
with self.assertRaises(TypeError):
|
|
|
|
|
model = Model(net)
|
|
|
|
|
paddle.enable_static()
|
|
|
|
|
|