存储PLCNext社区PLCNext. on LinkedInPLCNext. on Instagram  PLCNext. on YouTube github plcnext社区存储PLCNext社区

 

 如何创建博客条目

制造商博客
Hits: 770

PLCNext的机器学习

到目前为止,每个人都听说过机器学习以及如何改变一切。但很少有想法如何开始改变一切。我希望当你尝试这个博客中的步骤,甚至阅读它将帮助您了解如何开始使用PLCNext控制器更改事物。在此博客中,我致力于培训您的第一个ML模型,将其转换为ONNX标准并在PLCNext控制器上推断模型。因为不去,让事情压倒了我将使用着名的虹膜数据集来构建我们的模型。

 

在我们开始之前,应该非常清楚我们试图实现的目标。因此,我将对这篇博客中处理的主题提供了一个小的解释。我的参考文献可以在本博客的末尾找到。

机器学习简介

什么是机器学习

所以,我猜我们应该从解释机器学习开始。机器学习的本质是,我们将尝试使用统计和算法查找数据集中的模式。我们区分了三个市长类型的机器学习: 监督机器学习,无监督机器学习和加固学习。监督学习是今天最使用的“味道”,我们将在这篇博客中使用受监督学习。在监督学习中,我们标记数据EN告诉机器正是我们正在寻找的模式。

在无人监督的学习中,我们没有标记我们的数据,我们让机器去找到自己的模式,因为这种技术的应用程序不太明显,无监督的学习不太受欢迎。

最后,在钢筋学习中,算法通过试验和错误来实现达到陈述的目标。它只是尝试了很多东西,并获得奖励或惩罚,取决于它是一个好的还是坏行动。 Googles Alphago是加强学习的着名示例。

虹膜花数据集

根据维基百科的说法,虹膜花数据集是:

这  鸢尾花 flower data set or 费舍尔 鸢尾花 data set is a 多变量 数据集 由英国介绍 统计员优化主义者, 和 生物学家 罗纳德费舍尔 in his 1936 paper 在分类问题中使用多重测量 as an example of 线性判别分析.[1] 它有时被称为 安德森的 鸢尾花 data set because 埃德加安德森 收集数据以量化 形态学 variation of 鸢尾花 三种相关物种的花朵。[2]

好的,好,但它看起来如何?

在虹膜数据集中有5个字段:萼片长度,萼片宽度,花瓣长度,花瓣宽度和各种虹膜花。我们今天的目标是在知道萼片长度,萼片宽度,花瓣长度和花瓣宽度时找到虹膜花的类型。所以我们将培训模型来分类花的类型。正如您所知,这种类型的机器学习是分类。

机器学习也可用于预测数据集中的值。这是程序被命名为回归,并使用不同的算法而不是分类。

 The Algorithm

算法是计算机需要执行任务的指令和规则列表。

今天我们将使用“决策树分类器”不是因为它是完美的任务,但它非常直观,可以轻松地理解没有花哨的数学。在这里,您可以找到虹膜花数据集的决策树的示例。

 

决策树1

 ONNX

您可以想象机器学习模型可以以各种格式出现,并且需要使用不同的加速方法进行大量不同的硬件。开放的神经网络交换试图减轻这个问题。它可以在Open Office,Azure和世界各地的无数其他应用中使用。它几乎肯定用于您正在阅读此博客的设备。

onnx.是一种用于代表机器学习模型的开放格式。 ONNX定义了一组通用的运算符 - 机器学习和深度学习模型的构建块 - 以及使AI开发人员能够使用具有各种框架,工具,运行时和编译器的模型的常用文件格式。


要运行Onnx型号,我们需要Onnx运行时,这是挑战。特别是在ARM处理器上,但随着Docker图像提供,您应该没问题!

技术往返

先决条件

我正在使用AXC F 2152控制器,安装固件2021.0 LTS和Ubuntu 20.04 VM培训模型。提供了用于训练和推理模型的脚本,但Ubuntu VM的设置超出了博客的范围。您可以找到有关如何安装所需的Python软件包的良好解释,并且所有使用的软件包应使用PIP3正确安装。

在PLCnext控制器上,我们需要安装一个容器引擎。您可以找到对程序的良好解释 这里.

具有AXC F 3152的类似过程也是可能的。

对于此博客,您将需要至少具有Python和Containers的最小体验。

 

培训模型

下载此GitHub存储库的内容,并确保已安装所有必要的包。

我们要运行的第一个脚本是火车脚本我们将把我们的模型适合虹膜数据集。
你可以找到下面 从此培训脚本中删除的代码。此脚本将创建“.onnx”文件Witch包含培训的模型。

# Slit the dataset in a training and testing dataset
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, Y_test = train_test_split(X, y)
# Define the model and fit the model with training data and print information about the model
clr = DecisionTreeClassifier()
clr.fit(X_train, y_train)
print(clr)
#Convert the model from sklearn format to ONNX (Open Neural Network Exchange)
initial_type = [('float_input', FloatTensorType([None, 4]))]
onx = convert_sklearn(clr, initial_types=initial_type)
with open("decision_tree_iris.onnx", "wb") as f:
f.write(onx.SerializeToString())

ubuntu介绍

通过在开发机上运行它来检查您的模型。运行推断脚本时,您应该得到2个对应于某种虹膜花的整数。

import numpy as np
import onnxruntime as rt
X_test = np.array([[5.8,4.0,1.2,0.2],[7.7,3.8,6.7,2.2,]])
sess = rt.InferenceSession("decision_tree_iris.onnx")
input_name = sess.get_inputs()[0].name
label_name = sess.get_outputs()[0].name
pred_onx = sess.run(
[label_name], {input_name: X_test.astype(np.float32)})[0]
print(pred_onx)

output : [0 2]

推理PLCNext.

打开您喜欢的SFTP客户端,并在PLCNext控制器上删除“.onnx”和“.onnx”和“Turfering.py”存储库/ opt / plcnext / onnx。继续执行作为root的下一个命令:

balena-engine run -it --name onnx -v /opt/plcnext/onnx/:/app pxcbe/onnx-runtime-arm32v7

使用python推理脚本运行

cd /app
python3 /app/inference.py

如果一切顺利,您可以获得与您的Ubuntu VM的推断相同的输出!祝贺,你已经成功了。现在去改变事情!

 

如何在申请中实施?

实际上,我们还没有完成。我的意思是,分类虹膜花很有趣,但我无法在逻辑控制器上想象它的多个应用程序。您需要提出自己的模型并为该模型创建一个API,以便您可以推断它。您可以选择使用OPC UA向模型提供数据,也可以为其构建自定义REST-ENDPOINT。无论如何,您需要编写一些比我提供的代码。

考虑到这座建筑物的图像拍摄了我几天和一个不眠之夜,我建议您在提供的图像顶部构建图像。在引用中,您可以找到构建Python容器应用程序的良好资源。

参考:

//www.technologyreview.com/2018/11/17/103781/what-is-machine-learning-we-drew-you-another-flowchart/

//en.wikipedia.org/wiki/Iris_flower_data_set

//www.thinkautomation.com/eli5/what-is-an-algorithm-an-in-a-nutshell-explanation/

//www.researchgate.net/figure/Decision-tree-for-Iris-dataset_fig1_293194222

//onnx.ai/

//github.com/PLCnext/Docker_GettingStarted

//www.wintellect.com/containerize-python-app-5-minutes/

//github.com/onnx/models