《Deep Learning Methods for Reynolds-Averaged Navier-Stokes Simulations of Airfoil Flows》

这篇论文把机翼流体仿真和深度学习结合,预测在不同机翼模型或气流不同的初始速度场下机翼周围气流的压强以及速度场
这篇论文是一个很好的实验记录,我根据自己的任务主要学习第四部分中如何构造数据集、如何进行预处理以及如何训练等以及需要做哪些实验,而且我对机翼流体仿真这个问题本身也不是很了解,所以对论文分析的并不全面
以下是对论文的第四部分的梳理,并结合代码理解细节

1. 构造数据集

(1)网络的输入输出

输入:机翼模型,初始速度场
输出:气流在机翼周围的压强以及速度场分布
在这里插入图片描述

(2)输入

机翼模型:从UIUC数据集中可以获取到1505个不同的机翼模型
以下是三种个不同的机翼模型的数据(应该是机翼边界上采样的坐标,范围、个数可能都不相同)
在这里插入图片描述
问题:后面是如何把这些初始的机翼模型(机翼边界的坐标)转化到128*128网格上的?
在这里插入图片描述
初始速度场:应该是跟雷诺数和攻角有关
本篇论文中限定了雷诺数和攻角的范围,这样应该是防止问题规模太大,网络无法预测(考虑到我的任务,比如预测平移的模型,是否也可限制在一定平移范围内的模型是可预测的,而不是那么强的泛化能力
在这里插入图片描述
问题:如何在这个范围内选取雷诺数和攻角,以及如何通过这两个变量得到初始速度场?
论文里说是在给定的范围内随机采样以得到速度场(注意:初始速度场在机翼模型外部是个常量),再和机翼模型结合生成输入数据

(3)输出

得到输入后,再使用现有的开源软件OpenFOAM对这些输入进行流体仿真得到机翼周围的压强和速度场即网络输出待比较的真实值
仿真中求解的方程是Reynolds-averaged Navier-Stokes(RANS) equations(本篇论文的方法是通用的,可以构造新的数据集用本篇论文的方法求解其它方程)

(4)生成数据集的代码解析

data/dataGen.py对初始机翼模型进行处理后得到输入后并通过OpenFOAM软件仿真得到输出
一个样本数据放在一个npz文件中:6个128*128的图像
在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述
从上图可以发现:前三组在各个点的值看起来像是固定的,实际上,输入中,初始速度场在模型外部各个点的值是相同的,模型内部都为0;第三组,模型内部用1表示,模型外部为0;打开过一个模型,模型内部有186个点
源代码,具体步骤
在这里插入图片描述
(1)151行:随机选取一个机翼模型文件
(2)155行:可能是雷诺数,在给定范围内随机选取一个值
(3)156行:可能是攻角,也是在给定范围内随机选取一个值
(4)157行,158行:根据雷诺数和攻角计算得到一个初始速度场
(5)164行:genMesh,应该是根据机翼模型文件生成网格
具体没有细看,不知道如何根据原始机翼模型中离散的边界坐标点得到下图的第一个图的
在这里插入图片描述
(6)169行,用OpenFOAM根据初始速度场对机翼网格模型进行仿真,得到机翼周围气流的压强和速度场
(7)172行,把前面得到的机翼模型、初始速度场和仿真得到的压强和速度场存作图片,做成数据集
在这里插入图片描述
在这里插入图片描述
第一个文件pfile应该是仿真后的压强,第二个文件ufile应该是仿真后的速度场,在这两个文件中每个数据应该都是(x,y,value)的格式,机翼模型外的空间上的一个点对应一个压强或速度场
x方向限制在[-0.5,1.5](?),y方向限制在[-1,1]之间,在这样的空间中均匀采样,按顺序读取仿真文件,当跟文件中的点比较接近时,表示是机翼模型外部,就可以设置成对应的具体值,比如对于模型图像须设为1,对于初始速度场须设置为根据雷诺数和攻角求出的值;当采样点不在仿真文件中时,表示在机翼模型内部,对于初始速度场、仿真得到的压强和速度场均设为0,模型图象设为1

可以学习的点
(1)限制一些参数的范围,在构造数据集的时候需要限制某些参数的范围,在使用时也是限制在这样的范围内求解,如果不限制范围,就是一个无穷的空间,对于网络来说太难求解了。对我的任务,在构造几何模型时,需要旋转和平移,旋转无所谓,平移的范围需要有一定的限制
(2)随机采样再结合,对我的模型构造来说,构造出初始的模型后,可以随机选择模型和旋转角度或平移值来对模型进行变换,之前构造出来的数据集太过规律,也会影响模型的学习。

2. 预处理

(1)用自由流速度(初始速度场)的大小对所有涉及的量进行标准化

在这里插入图片描述

(2)压强减去平均值

在这里插入图片描述

(3)根据最大值的绝对值标准化到[-1,1]中

在这里插入图片描述

(4)源码

第一个if对应(2)
第二个if对应(1)
最后对应(3)
在这里插入图片描述在这里插入图片描述

(5)学习

标准化的数据应该能使网络的训练更加容易(后面有实验4.2来展示标准化的优点)
我也应该要根据自己数据的特点对输入输出做一些处理(也可以把想到的标准化方法都做实验比较看看)

3.网络架构-UNet

在这里插入图片描述
UNet是一种特殊的编码解码结构,特点是有一个skip connection:把编码部分的数据给了解码模块,可以看成残差结构
更多的了解UNet

4.监督训练

(1)训练设置在这里插入图片描述
(2)数据不同标准化的影响

在这里插入图片描述在这里插入图片描述在这里插入图片描述
(A)是没有标准化的原始数据,看图4可以发现pressure和Vx预测的都不是很好
(B)对应上面的2(1),相对(A),对Vx的预测有所改进,但是压强的预测还是很差
(C)对应上面的2(2),跟(B)相比,对压强的预测明显更接近target
对数据进行标准化不仅能使网络更加容易训练,而且预测效果也会变好
应该主要是减少了一些不必要的信息,而且把数据限制在一定范围了,使得解更加简单,网络也就更容易学习并成功预测了

5.Basic Parameters

在这里插入图片描述
其中,最关键的一个参数就是优化器的学习率
在这里插入图片描述
上图中的左图是不同学习率下训练的网络的误差,学习率较大时可能降不到最低点,网络预测的误差比较大;学习率较小时,网络训练的比较慢。从左图可以看出,当学习率设为0.00004和0.0004时网络误差最低,这篇论文在后面会以0.0004的学习率进行训练。
上图中的右图是对有没有在训练的过程中降低学习率进行的实验,绿色线是一直以0.0004的学习率进行训练,蓝色线开始以0.0004进行训练,后面会降到原来的0.1倍即0.00004接着进行训练。可以蓝色线的预测误差总是低于绿色线的,所有,这篇论文后面的训练中也会采取学习率递减的方式。

6.accuracy

(1)网络的自由度即权重的数量对网络预测效果的影响,以及训练数据的个数对网络预测效果的影响

在这里插入图片描述
这张图横坐标是训练数据的个数,纵坐标是验证误差,不同颜色的线代表不同的网络规模
a. 随着训练数据的增加,不同规模网络的误差都在降低
b. 比较122k和30.9m的网络,在训练数据较少时,122k的网络误差比30.9m的误差要低,但训练数据增多后,30.9m的网络的误差更低
c. 122k的网络在训练数据在1000左右时就开始饱和了,而30.9m的网络的误差还在逐渐降低
主要原因应该是待训练权重个数多,需要的训练数据也就越多,而大规模网络在训练数据足够的情况下可以比小规模网络的预测效果更好

在这里插入图片描述
看一看不同规模的网络在不同数量训练数据集的情况下对新的机翼模型构造的test集的泛化能力
注意在test集上计算误差时使用的不是L1误差,而是对标准化量的平均相对误差
在这里插入图片描述
a. 随着训练数据集的增加,不同规模网络在test集上的误差都在降低,但各网络之前的差异不是很大。比如在训练数据是12800时,122k的网络在test集上的误差是0.033,而30.9m得误差是0.026
b. 注意由于压力函数和速度场函数的不同,网络在各通道的相对误差也不是很平均,在x和y通道上的误差在0.02左右,而压力通道上的误差高达0.14,这个跟L1损失函数有关,可以通过修改损失函数来调整
c. 发现1.9m、7.7m、30.9m这三个大规模的网络在test集上的误差曲线差不多,虽然这三个网络在训练集增加时在验证集上误差有所区别,但是额外的训练数据集也不会生成未见模型的新信息,也就是说即使训练数据增加,也学不到新的东西了

(2)进一步探讨泛化能力

扩充数据集:(没看懂是如何剪切这个机翼形状的)
在这里插入图片描述
在这里插入图片描述
得到剪切后的新的数据集后,分别用三种数据集:最开始的数据集regular,剪切后的数据集sheared,一半regular一半sheared组成的混合数据集mixed来训练网络,如下,图10是对7.7m网络训练的结果,图11是对30.9m的网络训练的结果
在这里插入图片描述
从图10可以发现,sheared数据集和mixed数据集上的验证误差比较大,sheared在test集上的误差比较大,虽然扩充了训练数据集,但对网络的训练效果没有改善,反而更差,因为加入新的模型后,网络需要学习的解的空间也很大,也就增加了网络的学习难度。
思考:我的任务对神经网络来说是不是也太复杂了,是不是可以稍微简化一下任务!!

7.performance

在这里插入图片描述
训练后的网络在预测使用时比较快速

8.discuss

(1)本篇论文的方法能达到一个比较好的精度,相对误差小于3%,但还需要进一步减小这个误差,这可能就需要增加训练集和网络规模。但从上面实验结果图6也可发现,简单的增加训练数据集或网络规模也不能达到任意的精度,那么就需要试试不同的方法和新的网络架构。

(2)虽然计算出来的平均相对误差比较小,但是对测试集结果可视化后发现在机翼尾部还是存在较大的误差的。是不是说明实际的泛化能力也并不是那么好?文中提到这部分可以用一个更大的测试数据集来研究泛化能力。
在这里插入图片描述
(3)图6中大规模网络最后的误差都差不多,但是可视化后发现效果是随着网络规模的扩大变好的,说明loss函数选取的不是很好,单纯用L1误差是存在一定的局限性
在这里插入图片描述
我之前做的实验也是,loss确实很低,但可视化结果却不令人满意,可能是数据集的问题,也可能是Loss的问题

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值