TranslatedLayer

    TranslatedLayer 是一个命令式编程模式 的继承类, 通过 load 载入构建。能够像一般 Layer 一样在train或者eval模式下使用。

    注解

    示例代码:

    program(method_name='forward'):

    参数:

    • method_name (string) - 要获取的Porgram对应的方法名。默认值为”forward”。

    返回:Program

    示例代码:

    1. import numpy as np
    2. import paddle
    3. import paddle.nn as nn
    4. import paddle.optimizer as opt
    5. BATCH_SIZE = 16
    6. BATCH_NUM = 4
    7. EPOCH_NUM = 4
    8. IMAGE_SIZE = 784
    9. CLASS_NUM = 10
    10. # define a random dataset
    11. class RandomDataset(paddle.io.Dataset):
    12. def __init__(self, num_samples):
    13. self.num_samples = num_samples
    14. def __getitem__(self, idx):
    15. image = np.random.random([IMAGE_SIZE]).astype('float32')
    16. label = np.random.randint(0, CLASS_NUM - 1, (1, )).astype('int64')
    17. return self.num_samples
    18. class LinearNet(nn.Layer):
    19. def __init__(self):
    20. super(LinearNet, self).__init__()
    21. self._linear = nn.Linear(IMAGE_SIZE, CLASS_NUM)
    22. @paddle.jit.to_static
    23. def forward(self, x):
    24. return self._linear(x)
    25. def train(layer, loader, loss_fn, opt):
    26. for epoch_id in range(EPOCH_NUM):
    27. for batch_id, (image, label) in enumerate(loader()):
    28. out = layer(image)
    29. loss = loss_fn(out, label)
    30. loss.backward()
    31. opt.step()
    32. opt.clear_grad()
    33. print("Epoch {} batch {}: loss = {}".format(
    34. epoch_id, batch_id, np.mean(loss.numpy())))
    35. loss_fn = nn.CrossEntropyLoss()
    36. adam = opt.Adam(learning_rate=0.001, parameters=layer.parameters())
    37. # create data loader
    38. dataset = RandomDataset(BATCH_NUM * BATCH_SIZE)
    39. loader = paddle.io.DataLoader(dataset,
    40. batch_size=BATCH_SIZE,
    41. shuffle=True,
    42. drop_last=True,
    43. num_workers=2)
    44. # train
    45. train(layer, loader, loss_fn, adam)
    46. # save
    47. model_path = "linear.example.model"
    48. paddle.jit.save(layer, model_path)
    49. # load
    50. translated_layer = paddle.jit.load(model_path)
    51. # get program
    52. program = translated_layer.program()