免费创建网站平台六安网站制作哪里有
web/
2025/9/30 12:56:38/
文章来源:
免费创建网站平台,六安网站制作哪里有,五金店网站模板,湖北商城网站建设内容介绍#xff1a;
AI编译框架分为两种运行模式#xff0c;分别是动态图模式以及静态图模式。MindSpore默认情况下是以动态图模式运行#xff0c;但也支持手工切换为静态图模式。两种运行模式的详细介绍如下#xff1a;
动态图模式#xff1a;
动态图的特点是计算图的…内容介绍
AI编译框架分为两种运行模式分别是动态图模式以及静态图模式。MindSpore默认情况下是以动态图模式运行但也支持手工切换为静态图模式。两种运行模式的详细介绍如下
动态图模式
动态图的特点是计算图的构建和计算同时发生Define by run其符合Python的解释执行方式在计算图中定义一个Tensor时其值就已经被计算且确定因此在调试模型时较为方便能够实时得到中间结果的值但由于所有节点都需要被保存导致难以对整个计算图进行优化。
在MindSpore中动态图模式又被称为PyNative模式。由于动态图的解释执行特性在脚本开发和网络流程调试过程中推荐使用动态图模式进行调试。
具体内容
1. 导包
import numpy as np
import mindspore as ms
from mindspore import nn, Tensor
2. 使用set_context进行动态图模式的配置
ms.set_context(modems.PYNATIVE_MODE)
3. 模型构建
class Network(nn.Cell):def __init__(self):super().__init__()self.flatten nn.Flatten()self.dense_relu_sequential nn.SequentialCell(nn.Dense(28*28, 512),nn.ReLU(),nn.Dense(512, 512),nn.ReLU(),nn.Dense(512, 10))def construct(self, x):x self.flatten(x)logits self.dense_relu_sequential(x)return logitsmodel Network()
4. 输入输出
input Tensor(np.ones([64, 1, 28, 28]).astype(np.float32))
output model(input)
print(output)
5. 使用set_context进行运行静态图模式的配置
ms.set_context(modems.GRAPH_MODE)
6. 构建模型
class Network(nn.Cell):def __init__(self):super().__init__()self.flatten nn.Flatten()self.dense_relu_sequential nn.SequentialCell(nn.Dense(28*28, 512),nn.ReLU(),nn.Dense(512, 512),nn.ReLU(),nn.Dense(512, 10))def construct(self, x):x self.flatten(x)logits self.dense_relu_sequential(x)return logitsmodel Network()
7. 输入输出
input Tensor(np.ones([64, 1, 28, 28]).astype(np.float32))
output model(input)
print(output)
静态图模式的使用场景
MindSpore编译器重点面向Tensor数据的计算以及其微分处理。因此使用MindSpore API以及基于Tensor对象的操作更适合使用静态图编译优化。其他操作虽然可以部分入图编译但实际优化作用有限。另外静态图模式先编译后执行的模式导致其存在编译耗时。因此如果函数无需反复执行那么使用静态图加速也可能没有价值。 静态图模式开启方式
通常情况下由于动态图的灵活性我们会选择使用PyNative模式来进行自由的神经网络构建以实现模型的创新和优化。但是当需要进行性能加速时我们需要对神经网络部分或整体进行加速。MindSpore提供了两种切换为图模式的方式分别是基于装饰器的开启方式以及基于全局context的开启方式。 基于装饰器的开启方式
MindSpore提供了jit装饰器可以通过修饰Python函数或者Python类的成员函数使其被编译成计算图通过图优化等技术提高运行速度。此时我们可以简单的对想要进行性能优化的模块进行图编译加速而模型其他部分仍旧使用解释执行方式不丢失动态图的灵活性。无论全局context是设置成静态图模式还是动态图模式被jit修饰的部分始终会以静态图模式进行运行。 在需要对Tensor的某些运算进行编译加速时可以在其定义的函数上使用jit修饰器在调用该函数时该模块自动被编译为静态图。需要注意的是jit装饰器只能用来修饰函数无法对类进行修饰。jit的使用示例如下
8. 模型构建
class Network(nn.Cell):def __init__(self):super().__init__()self.flatten nn.Flatten()self.dense_relu_sequential nn.SequentialCell(nn.Dense(28*28, 512),nn.ReLU(),nn.Dense(512, 512),nn.ReLU(),nn.Dense(512, 10))def construct(self, x):x self.flatten(x)logits self.dense_relu_sequential(x)return logits
9. 使用修饰函数输入输出
input Tensor(np.ones([64, 1, 28, 28]).astype(np.float32))ms.jit # 使用ms.jit装饰器使被装饰的函数以静态图模式运行
def run(x):model Network()return model(x)output run(input)
print(output)
10. 通过调用jit将函数转换为以静态图方式执行
class Network(nn.Cell):def __init__(self):super().__init__()self.flatten nn.Flatten()self.dense_relu_sequential nn.SequentialCell(nn.Dense(28*28, 512),nn.ReLU(),nn.Dense(512, 512),nn.ReLU(),nn.Dense(512, 10))def construct(self, x):x self.flatten(x)logits self.dense_relu_sequential(x)return logitsinput Tensor(np.ones([64, 1, 28, 28]).astype(np.float32))def run(x):model Network()return model(x)run_with_jit ms.jit(run) # 通过调用jit将函数转换为以静态图方式执行
output run(input)
print(output)
11. 当我们需要对神经网络的某部分进行加速时可以直接在construct方法上使用jit修饰器在调用实例化对象时该模块自动被编译为静态图。示例如下
class Network(nn.Cell):def __init__(self):super().__init__()self.flatten nn.Flatten()self.dense_relu_sequential nn.SequentialCell(nn.Dense(28*28, 512),nn.ReLU(),nn.Dense(512, 512),nn.ReLU(),nn.Dense(512, 10))ms.jit # 使用ms.jit装饰器使被装饰的函数以静态图模式运行def construct(self, x):x self.flatten(x)logits self.dense_relu_sequential(x)return logitsinput Tensor(np.ones([64, 1, 28, 28]).astype(np.float32))
model Network()
output model(input)
print(output)
12. 基于context的开启方式
context模式是一种全局的设置模式。
ms.set_context(modems.GRAPH_MODE) # 使用set_context进行运行静态图模式的配置class Network(nn.Cell):def __init__(self):super().__init__()self.flatten nn.Flatten()self.dense_relu_sequential nn.SequentialCell(nn.Dense(28*28, 512),nn.ReLU(),nn.Dense(512, 512),nn.ReLU(),nn.Dense(512, 10))def construct(self, x):x self.flatten(x)logits self.dense_relu_sequential(x)return logitsmodel Network()
input Tensor(np.ones([64, 1, 28, 28]).astype(np.float32))
output model(input)
print(output)
静态图加速的核心思想是将计算图的构建和实际计算分开也就是编译和运行分开。在构建阶段MindSpore会根据完整的计算流程对原始的计算图进行优化和调整编译得到更省内存和计算量更少的计算图。这种编译后图的结构不再改变的特性使得我们能够更好地利用硬件资源提升模型的执行效率。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84464.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!