命令式和符号式混合编程
# 命令式和符号式编程 def add_str(): return ''' def add(a,b): return a + b ''' def fancy_func_str(): return ''' def fancy_func(a, b, c, d): e = add(a,b) f = add(c,d) g = add(e,f) return g ''' def evoke_str(): return add_str() + fancy_func_str() + ''' print(fancy_func(1,2,3,4)) ''' prog = evoke_str() # print(prog) y = compile(prog,'','exec') # exec(y) from mxnet import nd,autograd,sym from mxnet.gluon import nn,loss as gloss def get_net(): net = nn.HybridSequential() net.add(nn.Dense(256,activation='relu'), nn.Dense(128,activation='relu'), nn.Dense(2)) net.initialize() return net net = get_net() X = nd.random.normal(shape=(1,512)) print(net(X)) # 通过net.hybridize()来编译和优化HybridSequential实例中的串联层的计算 net.hybridize() print(net(X)) # 对比 import time def benchmark(net, x): start = time.time() for i in range(1000): _ = net(x) nd.waitall() return time.time() - start net = get_net() print('before hybridizing: %.4f sec' % benchmark(net,X)) net.hybridize() print('after hybridizing: %.4f sec' % benchmark(net,X)) # 保存参数 net.export('my_mlp') x = sym.var('data') print(net(x))
from mxnet.gluon import nn,loss from mxnet import nd,autograd class HybirdNet(nn.HybridBlock): def __init__(self, **kwargs): super(HybirdNet,self).__init__(**kwargs) self.hidden = nn.Dense(10) self.output = nn.Dense(2) def hybrid_forward(self, F, x, *args, **kwargs): print('F: ',F) print('x: ',x) x = F.relu(self.hidden(x)) print('hidden: ',x) return self.output(x) net = HybirdNet() net.initialize() X = nd.random.normal(shape=(1,4)) print(X) print(net(X)) # 编译优化 net.hybridize() print(net(X))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架