0%

上篇主要介绍Pytorch转ONNX,由于业务需求暂时不在离线手机/车机端嵌入式,因此暂时对ONNX2NCNN不继续深入。既然ONNX model支持c,c++,java调用,那么serving的高效部署还是可行的。
这里选择了python简单调用的Flask部署ONNX模型。要注意的是本文的涉及的Flask仅供调试以保证模型转化和调用可行性,需要生产环境调用参考Deploying a Flask server in production

既然是python调用,那么Torch模型不用转换也可以尝试Flask部署。只是在实际应用中我们不需要任何“训练”,简而言之,只需要inference过程。那么显然直接用pytorch模型的意义不大,并且会导致效率低下。因此,一般来说需要转torchscript或者ONNX,或者其他inference 引擎支持的格式。

这里选用了ONNX, 本文默认模型已经成功打包成.onnx格式。Torch2ONNX转换可以参考上文 Pytorch 模型部署I—Torch2ONNX, 或者以下官方文档:

参考链接:
Pytorch 官方文档系列:torch.onnxPytorch2onnx and using onnxruntime

ONNX 模型压缩和可视化:onnx-simplifier可视化 Netron

Flask调用pytorch模型官方文档: Deplying Pytorch in Python via flask

完整代码: Flask基于onnx模型调用

Read more »

深度学习框架部署中,TF1部署工具链最为成熟,而同样流行的Pytorch部署频频受挫,让本Pytorch忠实拥护者极度烦恼。Torch最近版本中更新了torchscript的用法,然而无论是jit还是trace,标准transformer模型都无法正确转换成torchscript。当然也有可能是我写的transformer有问题,但更多的原因,来自Pytorch本身的动态graph导致无法直接实现类似于keras/tf1 model的 model.summary()功能。

另外,嵌入式端口(如手机,车机等)深度学习模型的部署,一般可以用腾讯NCNN。而TF1转NCNN也并非那么简单。(扯远了

基于规范ONNX模型转化NCNN的工具较为成熟,Pytorch本身也有ONNX的转化工具,本文尝试简略写一下pytorch转onnx的步骤,包括写pytorch 模型时的注意事项。

正文开始之前说一件悲惨的事情:其实到现在还无法搞通Transformer模型部署。如果只想要网络部署,学习TF1的代价其实不算大。当然文中写模型的注意事项,对编写pytorch模型也深有益处~

参考链接:
Pytorch 官方文档系列:torch.onnxPytorch2onnx and using onnxruntime

ONNX 模型压缩和可视化:onnx-simplifier可视化 Netron

Read more »

Hidden Markov Model (HMM) 和 Conditional Random Field (CRF)

是机器学习概率图模型中 有向图(Direced model) 和 无向图(Undirected model) 的经典结构。

这两个模型有本质区别,但是在图的结构上有相似之处,算法也有可以复用的地方。网上相关的文章很多,我写这篇单纯是为了自己总结……

代码:
DemoML/CRF/

本文中概率$p$表示随机变量概率分布,粗体小写表示单一数据的向量,下角标为样本编号,带括号上角标一般表示维度。变量表示规则和其他博文保持一致。

由于手写无法体现粗体,我一般选择变量加下横线表示一个向量。本文配图中,为了更清晰的展示,因此没有加下横线,实际都是向量。

Read more »

Variational AutoEncoder(VAE) 简单还是难?

理解优先,推导其次。
文末只有小段推导过程,其他的推导可以参考概率图模型相关文章,或通过其他网络资源获取。申明一下推导很重要,但有时候过于注重推导会陷入迷茫之中……

附代码(pytorch) DemoML/VAE_NLG/

本文中概率$p$表示随机变量概率分布,粗体小写表示单一数据的向量,下角标为样本编号,带括号上角标一般表示维度。变量表示规则和其他博文保持一致。

由于手写无法体现粗体,我一般选择变量加下横线表示一个向量。本文配图中,为了更清晰的展示,因此没有加下横线,实际都是向量。

Read more »

我们希望通过机器学习方法得到一个对象的表示(Representations),这个表示可以用到特定的应用场景中。

学习表示的方法有很多,无论是传统的MF,PCA,SVM,或者深度学习模型的VGG,Elmo,BERT,ALbert…都希望能学习到数据中的特点,来表达数据的”含义“。

这些representation的方法其实都降维操作,也就是用低维度表示尽可能诠释高维空间中的含义。

本文想谈谈如何才能算得上一个优秀的表示。

以下内容均为个人浅显理解,也欢迎所有同学提出意见和看法。

Read more »

大家都知道K-mean是无监督学习的经典算法。那为什么K-mean是无监督学习呢?可能有人觉得:这也要证明?

其实这是一个值得思考的问题……仔细思考这个问题,你会觉得自己似乎不太懂K-mean了?

哈哈,不要多想,本文意在剖析K-mean算法的本质:

K-mean算法是一种隐变量模型;隐变量模型可以用EM算法计算参数;无监督EM算法的其他应用。

本文单纯分享我自己的理解,如有不准确的地方欢迎讨论,互相进步~

Read more »

本文主要内容:如何从观测样本学习模型(参数)/分布

  • 理解观测数据,样本,未知分布之间的关系。
  • 三种模型(Model)概念和实例:概率模型(Probabilistic model),统计模型(Statistical Model)和贝叶斯模型(Bayesian Model)。
  • 两种学习方法的概念,区别和实例:最大似然估计(MLE, Maximum Likelihood estimation)和贝叶斯推断(Bayesian inference)
Read more »

本文主要介绍dependency parsing,包括:dependency parsing和constituency parsing的区别与优点;实现dependency parsing的两种主要方法(trasition based 和 MST);用RNNs实现dependency parsing。

原文参考

[1] Jurafsky and Martin Ch. 14 (3rd edition)

[2] Simple and Accurate Dependency Parsing Using Bidirectional LSTM Feature Representations(Eliyahu Kiperwasser, Yoav Goldberg, 2016)

正文为英文

Read more »