使用Mindspore拟合f(x)=a*sin(x)+b这类函数

根据mindspore线性拟合官方案例改编而成

f(x)=w * sin(x) + b,下面脚本展示将以 f(x)=2 * sin(x) +3为实例。

  1. #导入所需的工具包

    import numpy as np

    from mindspore import dataset as ds

    from mindspore.common.initializer import Normal

    from mindspore import nn

    from mindspore.train import Model

    from mindspore.train.callback import LossMonitor

    from mindspore import context

    #确定运行的硬件平台

    context.set_context(mode=context.GRAPH_MODE, device_target="CPU")

  2. #设定要拟合的函数

    def get_data(num, w=2.0, b=3.0):

        # f(x)=w * sin(x) + b

        # f(x)=2 * sin(x) +3

        for i in range(num):

            x = np.random.uniform(-np.pi, np.pi)

            noise = np.random.normal(0, 1)

            y = w * np.sin(x) + b + noise

            yield np.array([np.sin(x)]).astype(np.float32), np.array([y]).astype(np.float32)

  3. #初始化开始的参数

    class LinearNet(nn.Cell):

        def __init__(self):

            super(LinearNet, self).__init__()

            self.fc = nn.Dense(1, 1, Normal(0.02), Normal(0.02))

        def construct(self, x):

            x = self.f

  4. #开始拟合,设定初始化超参数。

    if __name__ == "__main__":

        num_data = 1600

        batch_size = 16

        repeat_size = 1

        lr = 0.005

        momentum = 0.9

         

        net = LinearNet()

        net_loss = nn.loss.MSELoss()

        opt = nn.Momentum(net.trainable_params(), lr, momentum)

        model = Model(net, net_loss, opt)

         

        ds_train = create_dataset(num_data, batch_size=batch_size, repeat_size=repeat_size) 

        model.train(1, ds_train, callbacks=LossMonitor(), dataset_sink_mode=False)

         

        print(net.trainable_params()[0], "\n%s" % net.trainable_params()[1])

上一篇:MATLAB-Fourier变换


下一篇:matlab新手入门一