2023/05/22
近年来,AI(人工智能)的认知度越来越高,在各种企业逐渐得到活用。在制造现场也使用AI(人工智能),通过自动化提高生产效率等,世人期待解决各种各样的课题。 这次以示例程序为例,解释在测量控制领域活用AI(人工智能)。
虽然对“AI(人工智能)”没有明确的定义,但是作为一个广义的概念,一般被认为是实现人工创造的智能的技术、处理等。涉及AI常用的“机器学习”和“深度学习(Deep Learning)”如图1所示,被包含在“AI(人工智能)的技术中。
图1:AI示意图
所谓“深度学习”,就是通过学习大量的数据,能够自动提取共通点、规律性等的“特征量”。 对于以前需要人类输入的“特征量”,只要准备好数据,计算机就能自动判断。这样就能够实现以前的机器学习难以做到的面部识别、噪声去除等复杂处理。
图2:深度学习示意图
这次为大家介绍使用深度学习中最简单的自编码器的无监督学习、使用与机器学习有关的库丰富的Python去除噪声的程序。
自编码器(Autoencoder)是利用神经网络的机器学习手法之一。开发的目的是削减清除不需要的信息的维度、提取特征,但是近年来被用作异常检测等的生成模型。 另外,自编码器的学习也能够进行监督学习,但是基本上出于输出与输入一致的数据的目的而进行无监督学习。
图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的各参数的说明如下。
# 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方法指定训练数据等。 虽然在自编码器上可以使用无监督学习和监督学习,但是因为这次使用无监督学习,所以也为教学数据(正确解答数据)指定了训练数据。
各参数的说明如下。
# 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比较容易构建使用深度学习去除噪声的程序。虽然这次只针对单纯的正弦波数据做了说明,但是在理解每个手法的特征之后,选择合适的参数、数据,还能够应对以前的噪声去除处理难以应对的不规则信号等。
随着数字技术的进步所带来的变革,数字化转型(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等新技术,使其更贴近顾客,更好用。
配备NVIDIA® Jetson™ 模块,是一款重视实用性的通用工业用边缘AI计算机。作为在现场运行的推理环境,它可以运用于各类环境之中。
查看所有文章
To PageTop