zoukankan      html  css  js  c++  java
  • (续)在深度计算框架MindSpore中如何对不持续的计算进行处理——对数据集进行一定epoch数量的训练后,进行其他工作处理,再返回来接着进行一定epoch数量的训练——单步计算

    内容接前文:

    https://www.cnblogs.com/devilmaycry812839668/p/14988686.html

    这里我们考虑的数据集是自建数据集,那么效果又会如何呢???

    import mindspore
    import numpy as np  # 引入numpy科学计算库
    import matplotlib.pyplot as plt  # 引入绘图库
    
    np.random.seed(123)  # 随机数生成种子
    
    import mindspore.nn as nn
    import mindspore.ops as ops
    from mindspore import Tensor
    from mindspore import ParameterTuple, Parameter
    from mindspore import dtype as mstype
    from mindspore import Model
    import mindspore.dataset as ds
    from mindspore.train.callback import ModelCheckpoint, CheckpointConfig
    from mindspore.train.callback import LossMonitor
    
    
    class Net(nn.Cell):
        def __init__(self, input_dims, output_dims):
            super(Net, self).__init__()
            self.matmul = ops.MatMul()
    
            self.weight_1 = Parameter(Tensor(np.random.randn(input_dims, 128), dtype=mstype.float32), name='weight_1')
            self.bias_1 = Parameter(Tensor(np.zeros(128), dtype=mstype.float32), name='bias_1')
            self.weight_2 = Parameter(Tensor(np.random.randn(128, 64), dtype=mstype.float32), name='weight_2')
            self.bias_2 = Parameter(Tensor(np.zeros(64), dtype=mstype.float32), name='bias_2')
            self.weight_3 = Parameter(Tensor(np.random.randn(64, output_dims), dtype=mstype.float32), name='weight_3')
            self.bias_3 = Parameter(Tensor(np.zeros(output_dims), dtype=mstype.float32), name='bias_3')
    
        def construct(self, x):
            x1 = self.matmul(x, self.weight_1) + self.bias_1
            x2 = self.matmul(x1, self.weight_2) + self.bias_2
            x3 = self.matmul(x2, self.weight_3) + self.bias_3
            return x3
    
    
    def main():
        net = Net(1, 1)
        # loss function
        loss = nn.MSELoss()
        # optimizer
        optim = nn.SGD(params=net.trainable_params(), learning_rate=0.000001)
        # make net model
        model = Model(net, loss, optim, metrics={'loss': nn.Loss()})
    
        # 数据集
        x, y = np.array([[0.1]], dtype=np.float32), np.array([[0.1]], dtype=np.float32)
    
        def generator_multidimensional():
            for i in range(10):
                a = x*i
                b = y*i
                print(a, b)
                yield (a, b)
    
        dataset = ds.GeneratorDataset(source=generator_multidimensional, column_names=["input", "output"])
    
        model.train(1, dataset, callbacks=LossMonitor(1), dataset_sink_mode=True)
    
        print('*' * 100)
    
        x, y = np.array([[0.2]], dtype=np.float32), np.array([[0.2]], dtype=np.float32)
        model.train(1, dataset, callbacks=LossMonitor(1), dataset_sink_mode=False)
    
        # right
        # False, False
        # False, True
        # True, True  xxx
    
        # not right
        # True, False
    
    
    if __name__ == '__main__':
        """ 设置运行的背景context """
        from mindspore import context
    
        # 为mindspore设置运行背景context
        #context.set_context(mode=context.PYNATIVE_MODE, device_target='GPU')
        context.set_context(mode=context.GRAPH_MODE, device_target='GPU')
    
        import time
    
        a = time.time()
        main()
        b = time.time()
        # print(b-a)

    运行结果:

    WARNING: 'ControlDepend' is deprecated from version 1.1 and will be removed in a future version, use 'Depend' instead.
    [WARNING] ME(22644:139765219266688,MainProcess):2021-07-09-03:51:42.606.193 [mindspore/ops/operations/array_ops.py:2302] WARN_DEPRECATED: The usage of Pack is deprecated. Please use Stack.
    [[0.]] [[0.]]
    [[0.1]] [[0.1]]
    [[0.2]] [[0.2]]
    [[0.3]] [[0.3]]
    [[0.4]] [[0.4]]
    [[0.5]] [[0.5]]
    [[0.6]] [[0.6]]
    [[0.7]] [[0.7]]
    [[0.8]] [[0.8]]
    [[0.90000004]] [[0.90000004]]
    [[0.]] [[0.]]
    [[0.1]] [[0.1]]
    [[0.]] [[0.]]
    [[0.1]] [[0.1]]
    [[0.2]] [[0.2]]
    [[0.3]] [[0.3]]
    [[0.4]] [[0.4]]
    [[0.5]] [[0.5]]
    [[0.6]] [[0.6]]
    [[0.7]] [[0.7]]
    [[0.8]] [[0.8]]
    [[0.90000004]] [[0.90000004]]
    epoch: 1 step: 10, loss is 14095.578
    ****************************************************************************************************
    [[0.]] [[0.]]
    [[0.2]] [[0.2]]
    [[0.4]] [ERROR] ANALYZER(22644,python):2021-07-09-03:51:44.281.599 [mindspore/ccsrc/pipeline/jit/static_analysis/evaluator.cc:74] Eval] Function construct_wrapper, The number of parameters of this function is 20, but the number of provided arguments is 22. NodeInfo: 
    Traceback (most recent call last):
      File "/tmp/pycharm_project_753/second_nnnew_line_regression.py", line 85, in <module>
    [[0.4]]    main()
      File "/tmp/pycharm_project_753/second_nnnew_line_regression.py", line 63, in main
    
    [[0.6]]     [[0.6]]model.train(1, dataset, callbacks=LossMonitor(1), dataset_sink_mode=False)
    
      File "/usr/local/python-3.7.5/lib/python3.7/site-packages/mindspore/train/model.py", line 592, in train
    [[0.8]] [[0.8]]
    [[1.]]     sink_size=sink_size)[[1.]]
    
      File "/usr/local/python-3.7.5/lib/python3.7/site-packages/mindspore/train/model.py", line 385, in _train
    [[1.2]] [[1.2]]
    [[1.4]]     [[1.4]]self._train_process(epoch, train_dataset, list_callback, cb_params)
    
      File "/usr/local/python-3.7.5/lib/python3.7/site-packages/mindspore/train/model.py", line 513, in _train_process
    [[1.6]] [[1.6]]
    [[1.8000001]]     [[1.8000001]]outputs = self._train_network(*next_element)
    
      File "/usr/local/python-3.7.5/lib/python3.7/site-packages/mindspore/nn/cell.py", line 322, in __call__
        out = self.compile_and_run(*inputs)
      File "/usr/local/python-3.7.5/lib/python3.7/site-packages/mindspore/nn/cell.py", line 578, in compile_and_run
        self.compile(*inputs)
      File "/usr/local/python-3.7.5/lib/python3.7/site-packages/mindspore/nn/cell.py", line 565, in compile
        _executor.compile(self, *inputs, phase=self.phase, auto_parallel_mode=self._auto_parallel_mode)
      File "/usr/local/python-3.7.5/lib/python3.7/site-packages/mindspore/common/api.py", line 505, in compile
        result = self._executor.compile(obj, args_list, phase, use_vm)
    TypeError: mindspore/ccsrc/pipeline/jit/static_analysis/evaluator.cc:74 Eval] Function construct_wrapper, The number of parameters of this function is 20, but the number of provided arguments is 22. NodeInfo: 
    
    # 
    
    进程已结束,退出代码为 1

    经过多次实验,发现:

    设置为:

        model.train(1, dataset, callbacks=LossMonitor(1), dataset_sink_mode=True)
    
        print('*' * 100)
    
        x, y = np.array([[0.2]], dtype=np.float32), np.array([[0.2]], dtype=np.float32)
        model.train(1, dataset, callbacks=LossMonitor(1), dataset_sink_mode=False)

    则会报错。

    而:

        model.train(1, dataset, callbacks=LossMonitor(1), dataset_sink_mode=True)
    
        print('*' * 100)
    
        x, y = np.array([[0.2]], dtype=np.float32), np.array([[0.2]], dtype=np.float32)
        model.train(1, dataset, callbacks=LossMonitor(1), dataset_sink_mode=True)
        model.train(1, dataset, callbacks=LossMonitor(1), dataset_sink_mode=False)
    
        print('*' * 100)
    
        x, y = np.array([[0.2]], dtype=np.float32), np.array([[0.2]], dtype=np.float32)
        model.train(1, dataset, callbacks=LossMonitor(1), dataset_sink_mode=False)
        model.train(1, dataset, callbacks=LossMonitor(1), dataset_sink_mode=False)
    
        print('*' * 100)
    
        x, y = np.array([[0.2]], dtype=np.float32), np.array([[0.2]], dtype=np.float32)
        model.train(1, dataset, callbacks=LossMonitor(1), dataset_sink_mode=True)

    则都不会报错。

    可以看到如果两次调用同一个mode来训练持续数据,那么dataset_sink_mode 的设置还是很重要的,

    这里面推荐的dataset_sink_mode的设置是如果同一个model多次训练,那么所有的训练时dataset_sink_mode都设置为False ,

    这样经验上来说能够更大可能性保证正常运行。

    ====================================================================

    那么我们对多次的 model.train 进行训练和一次的model.train 进行训练,那么在运算效率上会有多大区别呢???

    1.

    一次model.tain 进行20000epochs的训练, 代码如下:

    import mindspore
    import numpy as np  # 引入numpy科学计算库
    import matplotlib.pyplot as plt  # 引入绘图库
    
    np.random.seed(123)  # 随机数生成种子
    
    import mindspore.nn as nn
    import mindspore.ops as ops
    from mindspore import Tensor
    from mindspore import ParameterTuple, Parameter
    from mindspore import dtype as mstype
    from mindspore import Model
    import mindspore.dataset as ds
    from mindspore.train.callback import ModelCheckpoint, CheckpointConfig
    from mindspore.train.callback import LossMonitor
    
    
    class Net(nn.Cell):
        def __init__(self, input_dims, output_dims):
            super(Net, self).__init__()
            self.matmul = ops.MatMul()
    
            self.weight_1 = Parameter(Tensor(np.random.randn(input_dims, 128), dtype=mstype.float32), name='weight_1')
            self.bias_1 = Parameter(Tensor(np.zeros(128), dtype=mstype.float32), name='bias_1')
            self.weight_2 = Parameter(Tensor(np.random.randn(128, 64), dtype=mstype.float32), name='weight_2')
            self.bias_2 = Parameter(Tensor(np.zeros(64), dtype=mstype.float32), name='bias_2')
            self.weight_3 = Parameter(Tensor(np.random.randn(64, output_dims), dtype=mstype.float32), name='weight_3')
            self.bias_3 = Parameter(Tensor(np.zeros(output_dims), dtype=mstype.float32), name='bias_3')
    
        def construct(self, x):
            x1 = self.matmul(x, self.weight_1) + self.bias_1
            x2 = self.matmul(x1, self.weight_2) + self.bias_2
            x3 = self.matmul(x2, self.weight_3) + self.bias_3
            return x3
    
    
    def main():
        net = Net(1, 1)
        # loss function
        loss = nn.MSELoss()
        # optimizer
        optim = nn.SGD(params=net.trainable_params(), learning_rate=0.000001)
        # make net model
        model = Model(net, loss, optim, metrics={'loss': nn.Loss()})
    
        # 数据集
        x, y = np.array([[0.1]], dtype=np.float32), np.array([[0.1]], dtype=np.float32)
    
        def generator_multidimensional():
            for i in range(100):
                a = x*i
                b = y*i
                #print(a, b)
                yield (a, b)
    
        dataset = ds.GeneratorDataset(source=generator_multidimensional, column_names=["input", "output"])
    
        model.train(20000, dataset, callbacks=LossMonitor(100), dataset_sink_mode=False)
    
        """
        print('*' * 100)
    
        x, y = np.array([[0.2]], dtype=np.float32), np.array([[0.2]], dtype=np.float32)
        model.train(1, dataset, callbacks=LossMonitor(1), dataset_sink_mode=False)
        """
    
        # right
        # False, False
        # False, True
        # True, True  xxx
    
        # not right
        # True, False
    
    
    if __name__ == '__main__':
        """ 设置运行的背景context """
        from mindspore import context
    
        # 为mindspore设置运行背景context
        #context.set_context(mode=context.PYNATIVE_MODE, device_target='GPU')
        context.set_context(mode=context.GRAPH_MODE, device_target='GPU')
    
        import time
    
        a = time.time()
        main()
        b = time.time()
        print(b-a)
    View Code

    训练时间:

     1464.53s

     1460.07s

     1452.64s

    2.

    2次model.tain 分别进行10000epochs的训练, 代码如下:

    import mindspore
    import numpy as np  # 引入numpy科学计算库
    import matplotlib.pyplot as plt  # 引入绘图库
    
    np.random.seed(123)  # 随机数生成种子
    
    import mindspore.nn as nn
    import mindspore.ops as ops
    from mindspore import Tensor
    from mindspore import ParameterTuple, Parameter
    from mindspore import dtype as mstype
    from mindspore import Model
    import mindspore.dataset as ds
    from mindspore.train.callback import ModelCheckpoint, CheckpointConfig
    from mindspore.train.callback import LossMonitor
    
    
    class Net(nn.Cell):
        def __init__(self, input_dims, output_dims):
            super(Net, self).__init__()
            self.matmul = ops.MatMul()
    
            self.weight_1 = Parameter(Tensor(np.random.randn(input_dims, 128), dtype=mstype.float32), name='weight_1')
            self.bias_1 = Parameter(Tensor(np.zeros(128), dtype=mstype.float32), name='bias_1')
            self.weight_2 = Parameter(Tensor(np.random.randn(128, 64), dtype=mstype.float32), name='weight_2')
            self.bias_2 = Parameter(Tensor(np.zeros(64), dtype=mstype.float32), name='bias_2')
            self.weight_3 = Parameter(Tensor(np.random.randn(64, output_dims), dtype=mstype.float32), name='weight_3')
            self.bias_3 = Parameter(Tensor(np.zeros(output_dims), dtype=mstype.float32), name='bias_3')
    
        def construct(self, x):
            x1 = self.matmul(x, self.weight_1) + self.bias_1
            x2 = self.matmul(x1, self.weight_2) + self.bias_2
            x3 = self.matmul(x2, self.weight_3) + self.bias_3
            return x3
    
    
    def main():
        net = Net(1, 1)
        # loss function
        loss = nn.MSELoss()
        # optimizer
        optim = nn.SGD(params=net.trainable_params(), learning_rate=0.000001)
        # make net model
        model = Model(net, loss, optim, metrics={'loss': nn.Loss()})
    
        # 数据集
        x, y = np.array([[0.1]], dtype=np.float32), np.array([[0.1]], dtype=np.float32)
    
        def generator_multidimensional():
            for i in range(100):
                a = x*i
                b = y*i
                #print(a, b)
                yield (a, b)
    
        dataset = ds.GeneratorDataset(source=generator_multidimensional, column_names=["input", "output"])
    
        model.train(10000, dataset, callbacks=LossMonitor(100), dataset_sink_mode=False)
    
        print('*' * 100)
    
        x, y = np.array([[0.1]], dtype=np.float32), np.array([[0.1]], dtype=np.float32)
        model.train(10000, dataset, callbacks=LossMonitor(100), dataset_sink_mode=False)
    
        # right
        # False, False
        # False, True
        # True, True  xxx
    
        # not right
        # True, False
    
    
    if __name__ == '__main__':
        """ 设置运行的背景context """
        from mindspore import context
    
        # 为mindspore设置运行背景context
        #context.set_context(mode=context.PYNATIVE_MODE, device_target='GPU')
        context.set_context(mode=context.GRAPH_MODE, device_target='GPU')
    
        import time
    
        a = time.time()
        main()
        b = time.time()
        print(b-a)
    View Code

    训练时间: 

    1460.29s

    1454.51s

    1457.07s

    3.

    10次model.tain 分别进行2000epochs的训练, 代码如下:

    import mindspore
    import numpy as np  # 引入numpy科学计算库
    import matplotlib.pyplot as plt  # 引入绘图库
    
    np.random.seed(123)  # 随机数生成种子
    
    import mindspore.nn as nn
    import mindspore.ops as ops
    from mindspore import Tensor
    from mindspore import ParameterTuple, Parameter
    from mindspore import dtype as mstype
    from mindspore import Model
    import mindspore.dataset as ds
    from mindspore.train.callback import ModelCheckpoint, CheckpointConfig
    from mindspore.train.callback import LossMonitor
    
    
    class Net(nn.Cell):
        def __init__(self, input_dims, output_dims):
            super(Net, self).__init__()
            self.matmul = ops.MatMul()
    
            self.weight_1 = Parameter(Tensor(np.random.randn(input_dims, 128), dtype=mstype.float32), name='weight_1')
            self.bias_1 = Parameter(Tensor(np.zeros(128), dtype=mstype.float32), name='bias_1')
            self.weight_2 = Parameter(Tensor(np.random.randn(128, 64), dtype=mstype.float32), name='weight_2')
            self.bias_2 = Parameter(Tensor(np.zeros(64), dtype=mstype.float32), name='bias_2')
            self.weight_3 = Parameter(Tensor(np.random.randn(64, output_dims), dtype=mstype.float32), name='weight_3')
            self.bias_3 = Parameter(Tensor(np.zeros(output_dims), dtype=mstype.float32), name='bias_3')
    
        def construct(self, x):
            x1 = self.matmul(x, self.weight_1) + self.bias_1
            x2 = self.matmul(x1, self.weight_2) + self.bias_2
            x3 = self.matmul(x2, self.weight_3) + self.bias_3
            return x3
    
    
    def main():
        net = Net(1, 1)
        # loss function
        loss = nn.MSELoss()
        # optimizer
        optim = nn.SGD(params=net.trainable_params(), learning_rate=0.000001)
        # make net model
        model = Model(net, loss, optim, metrics={'loss': nn.Loss()})
    
        # 数据集
        x, y = np.array([[0.1]], dtype=np.float32), np.array([[0.1]], dtype=np.float32)
    
        def generator_multidimensional():
            for i in range(100):
                a = x*i
                b = y*i
                #print(a, b)
                yield (a, b)
    
        dataset = ds.GeneratorDataset(source=generator_multidimensional, column_names=["input", "output"])
    
        for i in range(10):
            print(i, '	', '*' * 100)
            model.train(2000, dataset, callbacks=LossMonitor(100), dataset_sink_mode=False)
    
        # right
        # False, False
        # False, True
        # True, True  xxx
    
        # not right
        # True, False
    
    
    if __name__ == '__main__':
        """ 设置运行的背景context """
        from mindspore import context
    
        # 为mindspore设置运行背景context
        #context.set_context(mode=context.PYNATIVE_MODE, device_target='GPU')
        context.set_context(mode=context.GRAPH_MODE, device_target='GPU')
    
        import time
    
        a = time.time()
        main()
        b = time.time()
        print(b-a)
    View Code

    训练时间:

     1457.52s

    4.

    100次model.tain 分别进行200epochs的训练, 代码如下:

    import mindspore
    import numpy as np  # 引入numpy科学计算库
    import matplotlib.pyplot as plt  # 引入绘图库
    
    np.random.seed(123)  # 随机数生成种子
    
    import mindspore.nn as nn
    import mindspore.ops as ops
    from mindspore import Tensor
    from mindspore import ParameterTuple, Parameter
    from mindspore import dtype as mstype
    from mindspore import Model
    import mindspore.dataset as ds
    from mindspore.train.callback import ModelCheckpoint, CheckpointConfig
    from mindspore.train.callback import LossMonitor
    
    
    class Net(nn.Cell):
        def __init__(self, input_dims, output_dims):
            super(Net, self).__init__()
            self.matmul = ops.MatMul()
    
            self.weight_1 = Parameter(Tensor(np.random.randn(input_dims, 128), dtype=mstype.float32), name='weight_1')
            self.bias_1 = Parameter(Tensor(np.zeros(128), dtype=mstype.float32), name='bias_1')
            self.weight_2 = Parameter(Tensor(np.random.randn(128, 64), dtype=mstype.float32), name='weight_2')
            self.bias_2 = Parameter(Tensor(np.zeros(64), dtype=mstype.float32), name='bias_2')
            self.weight_3 = Parameter(Tensor(np.random.randn(64, output_dims), dtype=mstype.float32), name='weight_3')
            self.bias_3 = Parameter(Tensor(np.zeros(output_dims), dtype=mstype.float32), name='bias_3')
    
        def construct(self, x):
            x1 = self.matmul(x, self.weight_1) + self.bias_1
            x2 = self.matmul(x1, self.weight_2) + self.bias_2
            x3 = self.matmul(x2, self.weight_3) + self.bias_3
            return x3
    
    
    def main():
        net = Net(1, 1)
        # loss function
        loss = nn.MSELoss()
        # optimizer
        optim = nn.SGD(params=net.trainable_params(), learning_rate=0.000001)
        # make net model
        model = Model(net, loss, optim, metrics={'loss': nn.Loss()})
    
        # 数据集
        x, y = np.array([[0.1]], dtype=np.float32), np.array([[0.1]], dtype=np.float32)
    
        def generator_multidimensional():
            for i in range(100):
                a = x*i
                b = y*i
                #print(a, b)
                yield (a, b)
    
        dataset = ds.GeneratorDataset(source=generator_multidimensional, column_names=["input", "output"])
    
        for i in range(100):
            print(i, '	', '*' * 100)
            model.train(200, dataset, callbacks=LossMonitor(100), dataset_sink_mode=False)
    
        # right
        # False, False
        # False, True
        # True, True  xxx
    
        # not right
        # True, False
    
    
    if __name__ == '__main__':
        """ 设置运行的背景context """
        from mindspore import context
    
        # 为mindspore设置运行背景context
        #context.set_context(mode=context.PYNATIVE_MODE, device_target='GPU')
        context.set_context(mode=context.GRAPH_MODE, device_target='GPU')
    
        import time
    
        a = time.time()
        main()
        b = time.time()
        print(b-a)
    View Code

    训练时间:

     1457.56s

    5.

    1000次model.tain 分别进行20epochs的训练, 代码如下:

    6.

    10000次model.tain 分别进行2epochs的训练, 代码如下:

    import mindspore
    import numpy as np  # 引入numpy科学计算库
    import matplotlib.pyplot as plt  # 引入绘图库
    
    np.random.seed(123)  # 随机数生成种子
    
    import mindspore.nn as nn
    import mindspore.ops as ops
    from mindspore import Tensor
    from mindspore import ParameterTuple, Parameter
    from mindspore import dtype as mstype
    from mindspore import Model
    import mindspore.dataset as ds
    from mindspore.train.callback import ModelCheckpoint, CheckpointConfig
    from mindspore.train.callback import LossMonitor
    
    
    class Net(nn.Cell):
        def __init__(self, input_dims, output_dims):
            super(Net, self).__init__()
            self.matmul = ops.MatMul()
    
            self.weight_1 = Parameter(Tensor(np.random.randn(input_dims, 128), dtype=mstype.float32), name='weight_1')
            self.bias_1 = Parameter(Tensor(np.zeros(128), dtype=mstype.float32), name='bias_1')
            self.weight_2 = Parameter(Tensor(np.random.randn(128, 64), dtype=mstype.float32), name='weight_2')
            self.bias_2 = Parameter(Tensor(np.zeros(64), dtype=mstype.float32), name='bias_2')
            self.weight_3 = Parameter(Tensor(np.random.randn(64, output_dims), dtype=mstype.float32), name='weight_3')
            self.bias_3 = Parameter(Tensor(np.zeros(output_dims), dtype=mstype.float32), name='bias_3')
    
        def construct(self, x):
            x1 = self.matmul(x, self.weight_1) + self.bias_1
            x2 = self.matmul(x1, self.weight_2) + self.bias_2
            x3 = self.matmul(x2, self.weight_3) + self.bias_3
            return x3
    
    
    def main():
        net = Net(1, 1)
        # loss function
        loss = nn.MSELoss()
        # optimizer
        optim = nn.SGD(params=net.trainable_params(), learning_rate=0.000001)
        # make net model
        model = Model(net, loss, optim, metrics={'loss': nn.Loss()})
    
        # 数据集
        x, y = np.array([[0.1]], dtype=np.float32), np.array([[0.1]], dtype=np.float32)
    
        def generator_multidimensional():
            for i in range(100):
                a = x*i
                b = y*i
                #print(a, b)
                yield (a, b)
    
        dataset = ds.GeneratorDataset(source=generator_multidimensional, column_names=["input", "output"])
    
        for i in range(10000):
            print(i, '	', '*' * 100)
            model.train(2, dataset, callbacks=[LossMonitor(100)], dataset_sink_mode=False)
    
        # right
        # False, False
        # False, True
        # True, True  xxx
    
        # not right
        # True, False
    
    
    if __name__ == '__main__':
        """ 设置运行的背景context """
        from mindspore import context
    
        # 为mindspore设置运行背景context
        #context.set_context(mode=context.PYNATIVE_MODE, device_target='GPU')
        context.set_context(mode=context.GRAPH_MODE, device_target='GPU')
    
        import time
    
        a = time.time()
        main()
        b = time.time()
        print(b-a)
    View Code

    训练时间:

     1464.64s

    7.

    20000次model.tain 分别进行1epochs的训练, 代码如下:

    import mindspore
    import numpy as np  # 引入numpy科学计算库
    import matplotlib.pyplot as plt  # 引入绘图库
    
    np.random.seed(123)  # 随机数生成种子
    
    import mindspore.nn as nn
    import mindspore.ops as ops
    from mindspore import Tensor
    from mindspore import ParameterTuple, Parameter
    from mindspore import dtype as mstype
    from mindspore import Model
    import mindspore.dataset as ds
    from mindspore.train.callback import ModelCheckpoint, CheckpointConfig
    from mindspore.train.callback import LossMonitor
    
    
    class Net(nn.Cell):
        def __init__(self, input_dims, output_dims):
            super(Net, self).__init__()
            self.matmul = ops.MatMul()
    
            self.weight_1 = Parameter(Tensor(np.random.randn(input_dims, 128), dtype=mstype.float32), name='weight_1')
            self.bias_1 = Parameter(Tensor(np.zeros(128), dtype=mstype.float32), name='bias_1')
            self.weight_2 = Parameter(Tensor(np.random.randn(128, 64), dtype=mstype.float32), name='weight_2')
            self.bias_2 = Parameter(Tensor(np.zeros(64), dtype=mstype.float32), name='bias_2')
            self.weight_3 = Parameter(Tensor(np.random.randn(64, output_dims), dtype=mstype.float32), name='weight_3')
            self.bias_3 = Parameter(Tensor(np.zeros(output_dims), dtype=mstype.float32), name='bias_3')
    
        def construct(self, x):
            x1 = self.matmul(x, self.weight_1) + self.bias_1
            x2 = self.matmul(x1, self.weight_2) + self.bias_2
            x3 = self.matmul(x2, self.weight_3) + self.bias_3
            return x3
    
    
    def main():
        net = Net(1, 1)
        # loss function
        loss = nn.MSELoss()
        # optimizer
        optim = nn.SGD(params=net.trainable_params(), learning_rate=0.000001)
        # make net model
        model = Model(net, loss, optim, metrics={'loss': nn.Loss()})
    
        # 数据集
        x, y = np.array([[0.1]], dtype=np.float32), np.array([[0.1]], dtype=np.float32)
    
        def generator_multidimensional():
            for i in range(100):
                a = x*i
                b = y*i
                #print(a, b)
                yield (a, b)
    
        dataset = ds.GeneratorDataset(source=generator_multidimensional, column_names=["input", "output"])
    
        for i in range(20000):
            #print(i, '	', '*' * 100)
            model.train(1, dataset, callbacks=[LossMonitor(100)], dataset_sink_mode=False)
    
        # right
        # False, False
        # False, True
        # True, True  xxx
    
        # not right
        # True, False
    
    
    if __name__ == '__main__':
        """ 设置运行的背景context """
        from mindspore import context
    
        # 为mindspore设置运行背景context
        #context.set_context(mode=context.PYNATIVE_MODE, device_target='GPU')
        context.set_context(mode=context.GRAPH_MODE, device_target='GPU')
    
        import time
    
        a = time.time()
        main()
        b = time.time()
        print(b-a)
    View Code

    训练时间:

     1475.06s

     1469.48s

     1475.70s

     1471.46s

    =========================================================

    从测试的数据上来看使用多次的model.train确实要比一次调用model.train耗费时间,不过考虑到这样能够更多的支持其他功能,这种性能损耗也是完全可以接受的。

    本文实验环境为  MindSpore1.1  docker版本

    宿主机:Ubuntu18.04系统

    CPU:I7-8700

    GPU:1060ti NVIDIA显卡

    本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注者,如有侵权请与博主联系。
  • 相关阅读:
    软链接mongo
    添加系统路径
    安装mongodb扩展
    查看php扩展
    查看mongodb状态
    phpExcel 替代 产品, 可导出10W数据,无压力
    饭饭之辈 200 Vue2.0生命周期(组件钩子函数与路由守卫)
    vue 父组件监听子组件事件,emit携带参数,且父组件也自带参数问题
    xlswriter 使用文档,快速写入xls 支持 2007以上的版本
    vue 中组件传值问题
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/14990021.html
Copyright © 2011-2022 走看看