Polygon当下使用的以太坊扩容的方案包含两种扩容解决方案,Plasma链和PoS链:
Matic PoS Chain,称之为“提交链”(commit chain)。它不同于侧链,尽管Matic PoS Chain有自己的共识机制,但在验证节点staking和检查点方面,它也依赖于以太坊的安全性。它与以太坊链并行运行,且该链由具有自身验证节点的权益证明共识机制来保护,保证了它的去中心化特性。此外,Matic PoS Chain与以太坊虚拟机(EVM)兼容,那些基于以太坊的项目可便捷地迁移其智能合约至Matic PoS链上。
Polygon的愿景是建立Ethereum的区块链互联网。从本质上讲,Polygon提供了一个通用的框架,允许开发者创建定制的、特定于应用的链,利用Ethereum的安全性,以及提供一个可互操作的网络,将各种不同的扩展解决方案联系在一起,如Zk-rollups、optimistic-rollups和侧链。
import torch
import torchvision.models as models
#加载PyTorch模型
model=models.resnet18()
#将模型转换为ONNX格式但不加载权重
dummy_input=torch.randn(1,3,224,224)
torch.onnx.export(model,dummy_input,"resnet18.onnx",do_constant_folding=False)
torch.onnx.export():将pytorch模型转换为.onnx模型
torch.onnx.export(model,args,f,export_params=True,verbose=False,training=False,input_names=None,output_names=None,aten=False,export_raw_ir=False,operator_export_type=None,opset_version=None,_retain_param_name=True,do_constant_folding=False,example_outputs=None,strip_doc_string=True,dynamic_axes=None,keep_initializers_as_inputs=None)
参数
model(torch.nn.Module)–要导出的模型.
----args(tuple of arguments)–模型的输入,任何非Tensor参数都将硬编码到导出的模型中;任何Tensor参数都将成为导出的模型的输入,并按照他们在args中出现的顺序输入。因为export运行模型,所以我们需要提供一个输入张量x。只要是正确的类型和大小,其中的值就可以是随机的。请注意,除非指定为动态轴,否则输入尺寸将在导出的ONNX图形中固定为所有输入尺寸。在此示例中,我们使用输入batch_size 1导出模型,但随后dynamic_axes在torch.onnx.export()。因此,导出的模型将接受大小为[batch_size,3、100、100]的输入,其中batch_size可以是可变的。
----export_params(bool,default True)–如果指定为True或默认,参数也会被导出.如果你要导出一个没训练过的就设为False.
----verbose(bool,default False)-如果指定,我们将打印出一个导出轨迹的调试描述。
----training(bool,default False)-在训练模式下导出模型。目前,ONNX导出的模型只是为了做推断,所以你通常不需要将其设置为True。
----input_names(list of strings,default empty list)–按顺序分配名称到图中的输入节点
----output_names(list of strings,default empty list)–按顺序分配名称到图中的输出节点
----dynamic_axes–{‘input’:{0:‘batch_size’},‘output’:{0:‘batch_size’}})#variable lenght axes
import torch.nn as nn
class CNN(nn.Module):
def __init__(self):
super(CNN,self).__init__()
self.conv1=nn.Sequential(
nn.Conv2d(in_channels=1,out_channels=16,kernel_size=(3,3),stride=(1,1),padding=1),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2)#for 2828 to 1414
)
self.conv2=nn.Sequential(
nn.Conv2d(in_channels=16,out_channels=32,kernel_size=(3,3),stride=(1,1),padding=1),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2)#for 1414 to 77
)
self.output=nn.Linear(3277,10)
def forward(self,x):
out=self.conv1(x)
out=self.conv2(out)
out=out.view(out.size(0),-1)#flatten the 3277 dimension to 1568
out=self.output(out)
return out