测量控制领域的AI(人工智能)活用

近年来,AI(人工智能)的认知度越来越高,在各种企业逐渐得到活用。在制造现场也使用AI(人工智能),通过自动化提高生产效率等,世人期待解决各种各样的课题。
这次以示例程序为例,解释在测量控制领域活用AI(人工智能)。

目录

什么是AI(人工智能)

虽然对“AI(人工智能)”没有明确的定义,但是作为一个广义的概念,一般被认为是实现人工创造的智能的技术、处理等。
涉及AI常用的“机器学习”和“深度学习(Deep Learning)”如图1所示,被包含在“AI(人工智能)的技术中。

深度学习被包含在机器学习中,机器学习被包含在人工智能中的图。深度学习 DL:Deep Learning  在机器学习中,使用由多层组成的神经网络  在发现模式/规则上,可以自由提取着眼什么(特征量)  机器学习 ML:Machine  Learning  在AI中,用计算机等实现相当于人类的“学习”的体系  从输入的数据发现模式/规则,套用到新数据上,能够进行与新数据有关的识别、预测等。人工智能 AI:Artificial Intelligence  以与人类的思考过程相同的形式动作的整个程序或者人类感受到智力的全部信息处理和技术图1:AI示意图

什么是深度学习

所谓“深度学习”,就是通过学习大量的数据,能够自动提取共通点、规律性等的“特征量”。
对于以前需要人类输入的“特征量”,只要准备好数据,计算机就能自动判断。这样就能够实现以前的机器学习难以做到的面部识别、噪声去除等复杂处理。

输入猫的图像  从输入层到中间层(隐藏层),从中间层(隐藏层)到输出层,依次处理数据  输出猫的图像 答对率96%图2:深度学习示意图

这次为大家介绍使用深度学习中最简单的自编码器的无监督学习、使用与机器学习有关的库丰富的Python去除噪声的程序。

什么是自编码器

自编码器(Autoencoder)是利用神经网络的机器学习手法之一。开发的目的是削减清除不需要的信息的维度、提取特征,但是近年来被用作异常检测等的生成模型。
另外,自编码器的学习也能够进行监督学习,但是基本上出于输出与输入一致的数据的目的而进行无监督学习。

从编码器的4个圆分别向特征量的2个圆画1个箭头  从特征量的2个圆分别向解码器的4个圆画1个箭头图3:自编码器示意图

自编码器具有如图所示的结构,从左向右进行编码/解码,以进行学习。将图的圆圈部分叫做节点,箭头部分叫做边。
从输入层的节点接收数据,分别为各边设置权重,这些值之和就是最终的值。
在这样的处理中,将前半部分进行维度削减和特征提取的功能叫做编码器,将后半部分依据缩小了维数的数据生成数据的功能叫做解码器。
自编码器的网络缩小已输入的数据的维数,重新恢复成原来的数据后输出。另外,还能够分别使用这些编码器与解码器的功能。

使用自编码器去除噪声的程序

这次举一个例子,通过自编码器的无监督学习创建Python程序,在按照以下构成采样的正弦波数据上模拟叠加噪声,使用这样的数据集,去除施加的噪声。

本篇介绍的程序的示例源代码已公开。可从以下链接下载。

示例程序:使用自编码器去除噪声的程序打开新窗口

对象设备:边缘AI计算机DX-U1100P1-2E0211+模拟量输入板卡 AI-1616L-LPE
使用语言:Python3.10
使用库:tensorflow、keras等

首先请执行以下的命令,安装Python,并安装必要的库等。另外,Python的安装也需要几个构建工具,请一并执行安装。

# Install Python *Only when the Python environment is not installed
sudo apt update
sudo apt upgrade
sudo apt install build-essential libbz2-dev libdb-dev libreadline-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libsqlite3-dev libssl-dev zlib1g-dev uuid-dev tk-dev
wget https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz
tar -xf Python-3.10.0.tgz
cd Python-3.10.0/
./configure --enable-optimizations
make -j $(nproc)
sudo make altinstall

# Install library
pip install --upgrade pip
pip install tensorflow
pip install numpy pandas matplotlib scikit-learn opencv-python

库的导入

首先请导入必要的库。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense
from IPython.display import display

数据的预处理

为提取特征数据进行预处理,以便能够合适地处理数据集。
将准备好的数据转换成一维数组,生成训练用数据。

# Data window width
input_shape_num = 50

# Normalizing the dataset
scaler = MinMaxScaler()
# Calculating the transformation formula and perform data transformation
train_list = scaler.fit_transform(train_data[['Signal']], test_data[['Signal']])
test_list = scaler.transform(test_data[['Signal']])

# Flatten to one dimension array
train_list = train_list.flatten()
test_list = test_list.flatten()

# Creating partial time series
train_vec = []
test_vec = []
for i in range(len(train_list)-input_shape_num+1):
    train_vec.append(train_list[i:i+input_shape_num])
for i in range(len(test_list)-input_shape_num+1):
    test_vec.append(test_list[i:i+input_shape_num])

模型的定义

接着,使用keras的Sequential模型定义进行学习的自编码器的模型。先压缩模型的输入数,再进行恢复,既抑制过拟合、梯度,同时提取特征。
将使其学习的数据信息指定到Sequential模型的层。
这次从好几个keras的层中使用常用的Dense(全连接层)。
Dense的各参数的说明如下。

  • units:指定输出的维数。
  • activation:指定要使用的激活函数。
  • input_shape:赋予被称作元组的定长数组。存在多个要赋值的元素时,描述为(0,1,2,...,n),但是因为这次只有一个元素,描述为(input_shape_num,)。
# Setting autoencoder
def init_autoencorder(input_shape_num):
    model = Sequential()
    # Encoding (number of output units = units, activation function = relu, number of inputs = input_shape_num)
    model.add(Dense(units=200, activation='relu',
              input_shape=(input_shape_num,)))
    # Decoding (Number of units to output = units, activation function = relu)
    model.add(Dense(units=100, activation='relu'))
    # Output layer (number of outputs = input_shape_num, activation function = sigmoid)
    model.add(Dense(input_shape_num, activation='sigmoid'))

    # Checking the model created
    model.summary()

    return model

模型的学习

针对已创建的自编码器模型,进行学习。
首先,需要使用compile方法对学习的处理进行设置。
其次,要使其执行学习,需要对fit方法指定训练数据等。
虽然在自编码器上可以使用无监督学习和监督学习,但是因为这次使用无监督学习,所以也为教学数据(正确解答数据)指定了训练数据。

各参数的说明如下。

  • optimizer:指定要使用的优化算法。
  • loss:指定损失函数(计算模型的正确解答值与预测值的偏差的函数)。
  • metrics:指定评价函数(衡量模型精度的函数)。
# Running autoencoder
def run_auto_encoder(model, train_vec, batch_size, epochs):
    # Set learning conditions (optimization = adam method, loss function = mean squared error, evaluation function = accuracy rate of multi-class classification)
    model.compile(optimizer='adam', loss='mse', metrics=['acc'])

# Executing learning (training data = train_vec, teacher data = train_vec, number of gradient update samples = batch_size,
    hist = model.fit(x=train_vec, y=train_vec, batch_size=batch_size, number of training data iterations = epochs, progress display = progress bar, training data ratio)
                     epochs=epochs, verbose=1, validation_split=0.2)

    return hist

学习的结果

将已创建的模型应用到测试用噪声数据上,评价模型。

# Evaluating the model on test data
pred_vec = model.predict(test_vec)
pred_vec = scaler.inverse_transform(pred_vec)
test_vec = scaler.inverse_transform(test_vec)

# Outputting test data to graph
plt.figure(figsize=(16, 2))
plt.plot(test_vec[:, 0], clor='blue', label='Test')
plt.plot(pred_vec[:, 0], color='orange', label='Filter')
plt.legend()
plt.show()

那么,让我们用输出的曲线确认学习结果吧。
橙色线为测试数据(叠加了噪声的数据),蓝色线为应用了从学习模型生成的滤波器后的数据。
大致输出噪声被完全去除的正弦波。

图4:将滤波器应用到测试数据上

综上所述,用Python比较容易构建使用深度学习去除噪声的程序。虽然这次只针对单纯的正弦波数据做了说明,但是在理解每个手法的特征之后,选择合适的参数、数据,还能够应对以前的噪声去除处理难以应对的不规则信号等。

边缘AI计算机DX系列

随着数字技术的进步所带来的变革,数字化转型(DX)使人们的生活更丰富。将其变成现实的康泰克的解决方案之一就是“DX系列”。在这次的噪声去除程序中使用的DX-U1100P1-2E0211配备NVIDIA® Jetson™ 模块,是一款重视实用性的通用工业用边缘AI计算机。该计算机配备1x PCI Express插槽、2x Gigabit LAN、HDMI、2x USB、通用I/O、RTC(实时/日历钟),可进行灵活设置,并具备耐环境性。
“DX系列”力争向顾客提供实现DX不可缺少的AI、IoT、5G等新技术,使其更贴近顾客,更好用。

相关链接

查看所有文章

To PageTop