深度学习利用回归算法进行数据预测

机床加工过程中,因热变形产生的热误差占机床加工总误差的40%-70%。热误差值补偿是解决热误差的主流技术,如何将神经网络建模与热误差值预测结合起来,是今天介绍的重点。
本项目研究对象为立式数控加工中心,“立式”指的是主轴竖直放置,那么主轴旋转产生的热量加上主轴自身重力的影响,热形变主要集中在Z向,也就是垂直方向。

  1. 目标值:热误差值如何测量?
    Z向的位移如何测量呢?项目通过采用主轴分析仪测量,主轴分析仪是一款根据电涡流原理测量位移的精密仪器,放置在主轴端面正下方,无限接近主轴的地方。测量值和热误差有什么关系呢?通过这张图很好地反映了。

    那么任意时刻i的测量值Li,和主轴停机初始状态下的测量值L1的差值,极为热误差值,

    在明确我们的目标值如何测量的情况下,我们接着介绍“多源异构数据”是哪些物理量。

  2. “多源异构数据”如何测量?
    本项目的数据,还有8温度数据,主轴功率、电流数据。
    研究热误差补偿,必不可少的就是温度了,温度如何测量呢?采用磁吸式或者贴片式温度传感器,安装在主轴及主轴外壳8各不同的位置,具体如下:
    温度传感器布置完后,再由数据采集卡,将数据汇总至上位机PC端,由PC端二次开发,读取8个温度数据。
    至于主轴功率、电流,熟悉机床的应该知道,可以通过数控系统二次开发实时读取数据,这两个数据容易获得。采集到的数据都是“野生数据”,要对数据预处理才能使用。

3.数据预处理
3.1 统一采集频率
项目中各数据的采集频率都不一样,例如,温度的采集频率为:0.01s/次,功率和电流的读取频率为:0.001s/次,Z向热形变量60s/次,因此,要统一各数据的采集频率。项目设计频率为:60s/次。

3.2 明确自变量和因变量,并对自变量归一化和标准化
回归问题的实质是寻求自变量x到因变量y的映射关系,

由于多源异构数据量纲不一致,有的数据10000,有的数据0.001,如果不做预处理直接输入模型,很容易导致模型训练过久,以及难以收敛。因此,归一化和标准化十分重要。归一化和标准化代码如下:

    #将数据标准化,自变量需做预处理,标签项不需要
    #减去特征平均值,再除以标准差,得到特征平均值为0,标准差为1
    mean=train_data.mean(axis=0)
    train_data-=mean
    std=train_data.std(axis=0)
    train_data/=std

    #测试数据必须以训练数据的均值和标准差进行变换,这样两者的变换才一致
    test_data-=mean
    test_data/=std

4.ANN模型搭建
由于本项目数据集较少,一共1905组数据。数据维度(1905,11),划分输入值后的数据维度:(1905,10),输出数据维度:(1905,1)。
训练集:[ :1600],测试集:[1600:]
那么为什么没有验证集呢?
小数据集在建模时,要采用交叉验证的方式进行。
项目采用K折交叉验证,其中k取4。一般情况下k为4或5。
K折交叉验证代码如下:

for i in range(k):
        print('第几折:'+str(i))
        #验证集
        val_data=train_data[i*num_val_samples:(i+1)*num_val_samples]
        val_targets=train_targets[i*num_val_samples:(i+1)*num_val_samples]

        #训练集
        x_train_data=np.concatenate([train_data[:i*num_val_samples],
                                     train_data[(i+1)*num_val_samples:]],axis=0)
        y_train_targers=np.concatenate([train_targets[:i*num_val_samples],
                                        train_targets[(i+1)*num_val_samples:]],axis=0)
        
        model=build_model()
        #verbose=0代表训练时用的是静默模式
        history=model.fit(x=x_train_data,
                          y=y_train_targers,
                          validation_data=(val_data,val_targets),
                          epochs=num_epochs,
                          batch_size=1,
                          verbose=1)
        
        #保存验证的平均绝对误差
        val_mae_history=history.history['val_mae']
        all_val_mae_histories.append(val_mae_history)

    #计算所有轮次中K折验证分数的平均值
    average_mae_history=[np.mean([x[i] for x in all_val_mae_histories]) for i in range(num_epochs)]

采用keras深度学习框架搭建3层ANN网络模型,模型层数如下:


代码如下:

def build_model():
    model=models.Sequential()
    model.add(layers.Dense(units=64,activation='relu',input_shape=(10,)))
    model.add(layers.Dense(units=64,activation='relu'))
    #回归问题的输出问题不需要激活函数,默认就为恒等函数
    model.add(layers.Dense(units=1))
    #损失函数使用均方误差 监控指标使用平均绝对误差
    model.compile(optimizer='rmsprop',loss='mse',metrics=['mae'])

    return model

接着就是训练模型,评估模型了,模型评估指标如下:

在迭代100次后,发现验证集在第57次具有最小mae,

取epoch=57,训练模型,验证集的表现为:


我们发现,test_ mae_score = 0.002059,这是什么意思呢?
要注意,本文热形变测量值单位是毫米(mm),这是什么意思呢?比如真实值是100mm,回归的预测误差为0.0025mm,这个效果就很好了。
因此,通过本项目可以发现,深度学习对于热误差预测、补偿都具有很高的精度。
当然在本文最后,要感谢深度学习大师,本文不少代码都是借鉴他的这篇“Keras深度学习(4)-回归问题之预测房价”

物联沃分享整理
物联沃-IOTWORD物联网 » 深度学习利用回归算法进行数据预测

发表评论