ONNX公司
一般用法
将ONNX模型加载到SINGA
进口 康克斯 从 歌声 进口 装置 从 歌声 进口 十四行诗 班 我的模型 (sonnx.sonnx模型) :
定义 __初始化__ (自我,onnx_model) : super(MyModel,self)__ 初始化_(onnx模型) 定义 向前地 (自我,*x) : y=超级(MyModel,self).forward(*x) #由于SINGA模型以列表形式返回输出,
#如果只有一个输出,
#你只需要取第一个元素。
返回 年[ 0 ] 定义 列车一个批次 (自身,x,y) :
通过 模型路径= “路径/目标/ONNX/型号” onnx_model=onnx.load(模型路径) #将onnx模型转换为SINGA模型 dev=设备.create_cuda_gpu() x=张量。 占位符(INPUT.shape,device=dev) model=我的模型(onnx_model) 模型编译([x],is_train= False(错误) ,使用图形= 真的 ,按顺序= 真的 )
推断SINGA模型
. The
x个 =张量。 张量(device=dev,data=INPUT) 年 =模型向前(x)
将SINGA模型保存为ONNX格式
# x个 是输入张量, 年 是输出张量 宋体到宋体([ x个 ], [ 年 ])
重新训练ONNX模型
从singa导入选项 从singa进口autograd 班 我的模型 ( 十四行诗 . SONNX模型 ):
定义 __初始化__ ( 自己 ,onnx _型号) : 超级的 (我的模型, 自己 )__ 初始化_ _ (onnx模型) 定义 向前地 ( 自己 ,*x) : 年= 超级的 (我的模型, 自己 )向前(*x) 返回 年[ 0 ] 定义 列车一个批次 ( 自己 、x、y、dist_option、spar) : 退出= 自己 向前(x) 损失=签名.softmax_cross_entropy(out,y) 如果 分发选项(_O)== “fp32” : 自己 .optimizer.backrd_and_update(丢失) elif分布选项== “fp16” : 自己 .optimizer.backward_and_update_half(损失) elif分布选项== '部分更新' : 自己 .optimizer.backrd_and_partial_update(丢失) elif分布选项== '稀疏顶部K' : 自己 .optimizer.backrd_and_sparse_update(损失, topK=正确, spars=spars) elif分布选项== “稀疏阈值” : 自己 .optimizer.backrd_and_sparse_update(损失, topK=错误, spars=spars) 返回 输出,损失 定义 集合优化程序 ( 自己 ,优化器) : 自己 优化器=优化器 sgd=选择。 新加坡元(lr= 0 . 005 ,动量= 0 . 9 ,重量_日期= 1 e(电子)- 5 ) model.set_optimizer(sgd) model.compile([tx],is_train=True,use_graph=graph,sequential=True)
转移学习ONNX模型
从singa导入选项 从新加坡进口签名 班 我的模型 ( 十四行诗 . SONNX模型 ):
定义 __初始化__ ( 自己 ,onnx _型号) : 超级的 (我的模型, 自己 ).__ 初始化_ _ (onnx模型) 自己 .linear=层。 线性( 1000 , 三 ) 定义 向前地 ( 自己 ,*x) : #在最后第三层之后切断
#并附加一个线性层 年= 超级的 (我的模型, 自己 ).forward(*x,last_layers=- 三 )[ 0 ] 年= 自己 线性(y) 返回 年 定义 列车一个批次 ( 自己 、x、y、dist_option、spar) : 退出= 自己 向前(x) 损失=签名.softmax_cross_entropy(out,y) 如果 分发选项(_O)== “fp32” : 自己 .optimizer.backrd_and_update(丢失) elif分布选项== “fp16” : 自己 .optimizer.backward_and_update_half(损失) elif分布选项== '部分更新' : 自己 .optimizer.backrd_and_partial_update(丢失) elif分布选项== “spareTopK” : 自己 .optimizer.backrd_and_sparse_update(损失, topK=正确, spars=spars) elif分布选项== “稀疏阈值” : 自己 .optimizer.backrd_and_sparse_update(损失, topK=错误, spars=spars) 返回 出局,损失 定义 集合优化程序 ( 自己 ,优化器) : 自己 优化器=优化器 sgd=选择。 新加坡元(lr= 0 . 005 ,动量= 0 . 9 ,重量_日期= 1 e(电子)- 5 ) model.set_optimizer(sgd) model.compile([tx],is_train=True,use_graph=graph,sequential=True)
ONNX模型动物园
图像分类
目标检测
人脸分析
机器理解
支持的操作员
Acos公司 Acosh公司 添加 而且 阿辛 阿西恩 阿坦 阿塔恩 平均池 批次规格化 铸造 锡尔 削减 连接两个字符串 ConstantOfShape常量 卷积和多项式相乘 科斯 科什 Div公司 辍学 埃鲁 相等 Erf公司 展开 压扁 收集 宝石 GlobalAveragePool公司 更大的 硬Sigmoid 身份 泄漏Relu 减去 日志 MatMul公司 马克斯 MaxPool(最大池) 平均值 分钟 穆尔 阴性 非零 不是 OneHot公司 或者 衬垫 功率 普雷卢 往复式 减少平均值 ReduceSum公司 雷鲁 重塑形状 散点元素 塞鲁 形状 乙状结肠 签名 罪 Sinh公司 切片 Softmax软件 Softplus软件 软信号 拆分 平方米 挤压 附属的 总和 棕褐色 坦恩(Tanh) 瓦片 转座 取消缩放 向上采样 在哪里? Xor公司
ONNX后端特别说明
Conv、MaxPool和AveragePool 输入必须为1d (N*C*H) 和2d( N*C*H*W )形状和 膨胀 必须为1。 批次规格化 ε 是1e-05,无法更改。 铸造 只支持float32和int32,其他类型都被强制转换为这两种类型。 挤压和取消挤压 如果您在执行以下操作时遇到错误 挤压 或 取消缩放 之间 张索尔 和 Scalar,请向我们报告。 空张量空张量在SINGA中是非法的。