参考代码:

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

dataset_sink_mode=True  时,我们可以理解是把数据进行部分的缓存到计算设备上,那么dataset_sink_mode为False和True时对性能影响大吗???

实际代码:

dataset_sink_mode=False 时:

  1. #!/usr/bin python
  2. # encoding:UTF-8
  3.  
  4. """" 对输入的超参数进行处理 """
  5. import os
  6. import argparse
  7.  
  8. """ 设置运行的背景context """
  9. from mindspore import context
  10.  
  11. """ 对数据集进行预处理 """
  12. import mindspore.dataset as ds
  13. import mindspore.dataset.transforms.c_transforms as C
  14. import mindspore.dataset.vision.c_transforms as CV
  15. from mindspore.dataset.vision import Inter
  16. from mindspore import dtype as mstype
  17.  
  18. """ 构建神经网络 """
  19. import mindspore.nn as nn
  20. from mindspore.common.initializer import Normal
  21.  
  22. """ 训练时对模型参数的保存 """
  23. from mindspore.train.callback import ModelCheckpoint, CheckpointConfig
  24.  
  25. """ 导入模型训练需要的库 """
  26. from mindspore.nn import Accuracy
  27. from mindspore.train.callback import LossMonitor
  28. from mindspore import Model
  29.  
  30. parser = argparse.ArgumentParser(description='MindSpore LeNet Example')
  31. parser.add_argument('--device_target', type=str, default="CPU", choices=['Ascend', 'GPU', 'CPU'])
  32.  
  33. args = parser.parse_known_args()[0]
  34.  
  35. # 为mindspore设置运行背景context
  36. context.set_context(mode=context.GRAPH_MODE, device_target=args.device_target)
  37.  
  38. def create_dataset(data_path, batch_size=32, repeat_size=1,
  39. num_parallel_workers=1):
  40. # 定义数据集
  41. mnist_ds = ds.MnistDataset(data_path)
  42. resize_height, resize_width = 32, 32
  43. rescale = 1.0 / 255.0
  44. shift = 0.0
  45. rescale_nml = 1 / 0.3081
  46. shift_nml = -1 * 0.1307 / 0.3081
  47.  
  48. # 定义所需要操作的map映射
  49. resize_op = CV.Resize((resize_height, resize_width), interpolation=Inter.LINEAR)
  50. rescale_nml_op = CV.Rescale(rescale_nml, shift_nml)
  51. rescale_op = CV.Rescale(rescale, shift)
  52. hwc2chw_op = CV.HWC2CHW()
  53. type_cast_op = C.TypeCast(mstype.int32)
  54.  
  55. # 使用map映射函数,将数据操作应用到数据集
  56. mnist_ds = mnist_ds.map(operations=type_cast_op, input_columns="label", num_parallel_workers=num_parallel_workers)
  57. mnist_ds = mnist_ds.map(operations=resize_op, input_columns="image", num_parallel_workers=num_parallel_workers)
  58. mnist_ds = mnist_ds.map(operations=rescale_op, input_columns="image", num_parallel_workers=num_parallel_workers)
  59. mnist_ds = mnist_ds.map(operations=rescale_nml_op, input_columns="image", num_parallel_workers=num_parallel_workers)
  60. mnist_ds = mnist_ds.map(operations=hwc2chw_op, input_columns="image", num_parallel_workers=num_parallel_workers)
  61.  
  62. # 进行shuffle、batch、repeat操作
  63. buffer_size = 10000
  64. mnist_ds = mnist_ds.shuffle(buffer_size=buffer_size)
  65. mnist_ds = mnist_ds.batch(batch_size, drop_remainder=True)
  66. mnist_ds = mnist_ds.repeat(repeat_size)
  67.  
  68. return mnist_ds
  69.  
  70. class LeNet5(nn.Cell):
  71. """
  72. Lenet网络结构
  73. """
  74.  
  75. def __init__(self, num_class=10, num_channel=1):
  76. super(LeNet5, self).__init__()
  77. # 定义所需要的运算
  78. self.conv1 = nn.Conv2d(num_channel, 6, 5, pad_mode='valid')
  79. self.conv2 = nn.Conv2d(6, 16, 5, pad_mode='valid')
  80. self.fc1 = nn.Dense(16 * 5 * 5, 120, weight_init=Normal(0.02))
  81. self.fc2 = nn.Dense(120, 84, weight_init=Normal(0.02))
  82. self.fc3 = nn.Dense(84, num_class, weight_init=Normal(0.02))
  83. self.relu = nn.ReLU()
  84. self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2)
  85. self.flatten = nn.Flatten()
  86.  
  87. def construct(self, x):
  88. # 使用定义好的运算构建前向网络
  89. x = self.conv1(x)
  90. x = self.relu(x)
  91. x = self.max_pool2d(x)
  92. x = self.conv2(x)
  93. x = self.relu(x)
  94. x = self.max_pool2d(x)
  95. x = self.flatten(x)
  96. x = self.fc1(x)
  97. x = self.relu(x)
  98. x = self.fc2(x)
  99. x = self.relu(x)
  100. x = self.fc3(x)
  101. return x
  102.  
  103. # 实例化网络
  104. net = LeNet5()
  105.  
  106. # 定义损失函数
  107. net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')
  108.  
  109. # 定义优化器
  110. net_opt = nn.Momentum(net.trainable_params(), learning_rate=0.01, momentum=0.9)
  111.  
  112. # 设置模型保存参数
  113. # 每125steps保存一次模型参数,最多保留15个文件
  114. config_ck = CheckpointConfig(save_checkpoint_steps=125, keep_checkpoint_max=15)
  115. # 应用模型保存参数
  116. ckpoint = ModelCheckpoint(prefix="checkpoint_lenet", config=config_ck)
  117.  
  118. def train_net(args, model, epoch_size, data_path, repeat_size, ckpoint_cb, sink_mode):
  119. """定义训练的方法"""
  120. # 加载训练数据集
  121. ds_train = create_dataset(os.path.join(data_path, "train"), 32, repeat_size)
  122. model.train(epoch_size, ds_train, callbacks=[LossMonitor(1875)], dataset_sink_mode=sink_mode)
  123.  
  124. def test_net(network, model, data_path):
  125. """定义验证的方法"""
  126. ds_eval = create_dataset(os.path.join(data_path, "test"))
  127. acc = model.eval(ds_eval, dataset_sink_mode=False)
  128. print("{}".format(acc))
  129.  
  130. mnist_path = "./datasets/MNIST_Data"
  131. train_epoch = 10
  132. dataset_size = 1
  133. model = Model(net, net_loss, net_opt, metrics={"Accuracy": Accuracy()})
  134. import time
  135. a=time.time()
  136. train_net(args, model, train_epoch, mnist_path, dataset_size, ckpoint, False)
  137. b=time.time()
  138. print(b-a)
  139. #train_net(args, model, train_epoch, mnist_path, dataset_size, ckpoint, True)
  140. #test_net(net, model, mnist_path)

运行时间:

108.28s

120.17s

119.88s

110.11s

108.42s

平均值:113.37s

dataset_sink_mode=True 时:

  1. #!/usr/bin python
  2. # encoding:UTF-8
  3.  
  4. """" 对输入的超参数进行处理 """
  5. import os
  6. import argparse
  7.  
  8. """ 设置运行的背景context """
  9. from mindspore import context
  10.  
  11. """ 对数据集进行预处理 """
  12. import mindspore.dataset as ds
  13. import mindspore.dataset.transforms.c_transforms as C
  14. import mindspore.dataset.vision.c_transforms as CV
  15. from mindspore.dataset.vision import Inter
  16. from mindspore import dtype as mstype
  17.  
  18. """ 构建神经网络 """
  19. import mindspore.nn as nn
  20. from mindspore.common.initializer import Normal
  21.  
  22. """ 训练时对模型参数的保存 """
  23. from mindspore.train.callback import ModelCheckpoint, CheckpointConfig
  24.  
  25. """ 导入模型训练需要的库 """
  26. from mindspore.nn import Accuracy
  27. from mindspore.train.callback import LossMonitor
  28. from mindspore import Model
  29.  
  30. parser = argparse.ArgumentParser(description='MindSpore LeNet Example')
  31. parser.add_argument('--device_target', type=str, default="CPU", choices=['Ascend', 'GPU', 'CPU'])
  32.  
  33. args = parser.parse_known_args()[0]
  34.  
  35. # 为mindspore设置运行背景context
  36. context.set_context(mode=context.GRAPH_MODE, device_target=args.device_target)
  37.  
  38. def create_dataset(data_path, batch_size=32, repeat_size=1,
  39. num_parallel_workers=1):
  40. # 定义数据集
  41. mnist_ds = ds.MnistDataset(data_path)
  42. resize_height, resize_width = 32, 32
  43. rescale = 1.0 / 255.0
  44. shift = 0.0
  45. rescale_nml = 1 / 0.3081
  46. shift_nml = -1 * 0.1307 / 0.3081
  47.  
  48. # 定义所需要操作的map映射
  49. resize_op = CV.Resize((resize_height, resize_width), interpolation=Inter.LINEAR)
  50. rescale_nml_op = CV.Rescale(rescale_nml, shift_nml)
  51. rescale_op = CV.Rescale(rescale, shift)
  52. hwc2chw_op = CV.HWC2CHW()
  53. type_cast_op = C.TypeCast(mstype.int32)
  54.  
  55. # 使用map映射函数,将数据操作应用到数据集
  56. mnist_ds = mnist_ds.map(operations=type_cast_op, input_columns="label", num_parallel_workers=num_parallel_workers)
  57. mnist_ds = mnist_ds.map(operations=resize_op, input_columns="image", num_parallel_workers=num_parallel_workers)
  58. mnist_ds = mnist_ds.map(operations=rescale_op, input_columns="image", num_parallel_workers=num_parallel_workers)
  59. mnist_ds = mnist_ds.map(operations=rescale_nml_op, input_columns="image", num_parallel_workers=num_parallel_workers)
  60. mnist_ds = mnist_ds.map(operations=hwc2chw_op, input_columns="image", num_parallel_workers=num_parallel_workers)
  61.  
  62. # 进行shuffle、batch、repeat操作
  63. buffer_size = 10000
  64. mnist_ds = mnist_ds.shuffle(buffer_size=buffer_size)
  65. mnist_ds = mnist_ds.batch(batch_size, drop_remainder=True)
  66. mnist_ds = mnist_ds.repeat(repeat_size)
  67.  
  68. return mnist_ds
  69.  
  70. class LeNet5(nn.Cell):
  71. """
  72. Lenet网络结构
  73. """
  74.  
  75. def __init__(self, num_class=10, num_channel=1):
  76. super(LeNet5, self).__init__()
  77. # 定义所需要的运算
  78. self.conv1 = nn.Conv2d(num_channel, 6, 5, pad_mode='valid')
  79. self.conv2 = nn.Conv2d(6, 16, 5, pad_mode='valid')
  80. self.fc1 = nn.Dense(16 * 5 * 5, 120, weight_init=Normal(0.02))
  81. self.fc2 = nn.Dense(120, 84, weight_init=Normal(0.02))
  82. self.fc3 = nn.Dense(84, num_class, weight_init=Normal(0.02))
  83. self.relu = nn.ReLU()
  84. self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2)
  85. self.flatten = nn.Flatten()
  86.  
  87. def construct(self, x):
  88. # 使用定义好的运算构建前向网络
  89. x = self.conv1(x)
  90. x = self.relu(x)
  91. x = self.max_pool2d(x)
  92. x = self.conv2(x)
  93. x = self.relu(x)
  94. x = self.max_pool2d(x)
  95. x = self.flatten(x)
  96. x = self.fc1(x)
  97. x = self.relu(x)
  98. x = self.fc2(x)
  99. x = self.relu(x)
  100. x = self.fc3(x)
  101. return x
  102.  
  103. # 实例化网络
  104. net = LeNet5()
  105.  
  106. # 定义损失函数
  107. net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')
  108.  
  109. # 定义优化器
  110. net_opt = nn.Momentum(net.trainable_params(), learning_rate=0.01, momentum=0.9)
  111.  
  112. # 设置模型保存参数
  113. # 每125steps保存一次模型参数,最多保留15个文件
  114. config_ck = CheckpointConfig(save_checkpoint_steps=125, keep_checkpoint_max=15)
  115. # 应用模型保存参数
  116. ckpoint = ModelCheckpoint(prefix="checkpoint_lenet", config=config_ck)
  117.  
  118. def train_net(args, model, epoch_size, data_path, repeat_size, ckpoint_cb, sink_mode):
  119. """定义训练的方法"""
  120. # 加载训练数据集
  121. ds_train = create_dataset(os.path.join(data_path, "train"), 32, repeat_size)
  122. model.train(epoch_size, ds_train, callbacks=[LossMonitor(1875)], dataset_sink_mode=sink_mode)
  123.  
  124. def test_net(network, model, data_path):
  125. """定义验证的方法"""
  126. ds_eval = create_dataset(os.path.join(data_path, "test"))
  127. acc = model.eval(ds_eval, dataset_sink_mode=False)
  128. print("{}".format(acc))
  129.  
  130. mnist_path = "./datasets/MNIST_Data"
  131. train_epoch = 10
  132. dataset_size = 1
  133. model = Model(net, net_loss, net_opt, metrics={"Accuracy": Accuracy()})
  134. import time
  135. a=time.time()
  136. train_net(args, model, train_epoch, mnist_path, dataset_size, ckpoint, True)
  137. b=time.time()
  138. print(b-a)
  139. #train_net(args, model, train_epoch, mnist_path, dataset_size, ckpoint, True)
  140. #test_net(net, model, mnist_path)

运行时间:

108.94s

111.44s

114.04s

112.52s

108.29s

平均值:111.04s

可以看到,dataset_sink_mode=True  确实可以提高一些运算性能,但是看测试的结果也没有太多的提升,所以一般情况下这个dataset_sink_mode设置不太需要考虑,当然如果是实际的生产环境那种情况或许还是有一定区别的。

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

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

宿主机:Ubuntu18.04系统

CPU:I7-8700

GPU:1060ti NVIDIA显卡

在 MindSpore 中 dataset_sink_mode 的设置对算法的性能有多少影响呢???的更多相关文章

  1. 关于网站高性能中磁盘cpu以及内存对网站性能的影响

    之前和同事聊天的时候,提到了这个硬件方面(包括内存,cpu,以及硬盘的存储选择),个人认为可以从这几个方面来提高底层硬件的性能,从而提高网站的整体吞吐量和速度. 一.主机: (1).CPU:决定处理的 ...

  2. mahout中kmeans算法和Canopy算法实现原理

    本文讲一下mahout中kmeans算法和Canopy算法实现原理. 一. Kmeans是一个很经典的聚类算法,我想大家都非常熟悉.虽然算法较为简单,在实际应用中却可以有不错的效果:其算法原理也决定了 ...

  3. Batch Normalization原理及其TensorFlow实现——为了减少深度神经网络中的internal covariate shift,论文中提出了Batch Normalization算法,首先是对”每一层“的输入做一个Batch Normalization 变换

    批标准化(Bactch Normalization,BN)是为了克服神经网络加深导致难以训练而诞生的,随着神经网络深度加深,训练起来就会越来越困难,收敛速度回很慢,常常会导致梯度弥散问题(Vanish ...

  4. 回声消除中的LMS和NLMS算法与MATLAB实现

    自适应滤波是数字信号处理的核心技术之一,在科学和工业上有着广泛的应用领域.自适应滤波技术应用广泛,包括回波抵消.自适应均衡.自适应噪声抵消和自适应波束形成.回声对消是当今通信系统中普遍存在的现象.声回 ...

  5. 【Matlab开发】matlab中bar绘图设置与各种距离度量

    [Matlab开发]matlab中bar绘图设置与各种距离度量 标签(空格分隔): [Matlab开发] [机器学习] 声明:引用请注明出处http://blog.csdn.net/lg1259156 ...

  6. vlc 详细使用方法:libvlc_media_add_option 函数中的参数设置

    vlc 详细使用方法:libvlc_media_add_option 函数中的参数设置 [转载自]tinyle的专栏 [原文链接地址]http://blog.csdn.net/myaccella/ar ...

  7. 如何基于MindSpore实现万亿级参数模型算法?

    摘要:近来,增大模型规模成为了提升模型性能的主要手段.特别是NLP领域的自监督预训练语言模型,规模越来越大,从GPT3的1750亿参数,到Switch Transformer的16000亿参数,又是一 ...

  8. 如何在 Java 中实现 Dijkstra 最短路算法

    定义 最短路问题的定义为:设 \(G=(V,E)\) 为连通图,图中各边 \((v_i,v_j)\) 有权 \(l_{ij}\) (\(l_{ij}=\infty\) 表示 \(v_i,v_j\) 间 ...

  9. 转-ArcGIS Engine中的License设置

    AE开发中的License有两种方法进行设置,一种是通过LicenseControl控件,另一种是通过IAoInitialize接口设置.整个应用程序中只能有一种方式存在,如果进行了两种License ...

  10. Android中的颜色设置

    1.在android中经常看到设置的颜色为八位的十六进制的颜色值,例如 public static final class color { public static final int lightb ...

随机推荐

  1. 图片jpg,png转为BASE64编码

    -- using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; namespace aliy ...

  2. Docker入门系列之四:Docker镜像

    在本文中,您将学习如何加快Docker构建周期并创建轻量级镜像.遵循之前的文章中的食物隐喻,我们将沙拉隐喻为Docker镜像,同时减少Docker镜像的数量. 在本系列的第3部分中,我们介绍了十几个D ...

  3. rabbitMq消息接收转换对象,Json解析字符串报错syntax error, expect {, actual string, pos 0, fastjson-version 1.2.62解决

    Expected BEGIN_OBJECT but was STRING at line 1 column 2 path $ syntax error, expect {, actual string ...

  4. Win10任务栏图标居中

    win+q键搜索并打开字符映射表 点击第五行的空白字符,然后先后点击下方的选择以及复制 在桌面新建一个文件夹,然后重命名,将刚才复制的空白字符粘贴进去,如图,这样我们就拥有了一个空白名称的文件夹 在任 ...

  5. 了解Microsoft Media Foundation

    关于Microsoft Media Foundation 是什么 Microsoft Media Foundation是用来处理(创建.修改.传输.合成)多媒体数据(音视频)的一个平台. 有什么用 M ...

  6. 在C#中进行单元测试

    单元测试 前言 时隔多个月,终于抽空学习了点新知识,那么这次来记录一下C#怎么进行单元测试,单元测试是做什么的. 我相信大部分刚毕业的都很疑惑单元测试是干什么的?在小厂实习了6个月后,我发现每天除了写 ...

  7. python基础-数据容器的通用操作

    五种数据容器的特性   列表list[]  元组tuple()  字符串str""   集合set{}   字典dict{key:value} 元素数量 支持多个 支持多个 支持多 ...

  8. 从零开始带你上手体验Sermant自定义插件开发

    本文分享自华为云社区<Sermant自定义插件开发上手体验>,作者:华为云开源. 一.研究缘由 由于目前我们所处的行业是汽车行业,项目上进行云服务的迁移时使用到了Sermant中的相关插件 ...

  9. 【ClickHouse】3:clickhouse基本操作一 用户权限管理

    背景介绍: 有三台CentOS7服务器安装了ClickHouse HostName IP 安装程序 程序端口 centf8118.sharding1.db 192.168.81.18 clickhou ...

  10. podman+openresty+openssl,https双向认证demo测试

    前言 暂不讨论https原理,单论配置的话: 1. https单项认证 server: server.crt + server.key client: server_ca.crt 2. https双向 ...