复杂形态钢结构设计培训班

首页 结构乌托邦-公众号 【编程】基于神经网络预测加速度反应谱——SRP第一课

【编程】基于神经网络预测加速度反应谱——SRP第一课

“基于神经网络预测规范加速度反应谱
本学期与郑振光博士带大二本科生参与SRP项目。为保证项目能顺利推进,组员们需具备一定的编程能力,并掌握机器学习的相关基础知识点。恰逢组员们在“荷载课”首次邂逅加速度反应谱曲线【广东省性能设计规程】与国家高规对比浅谈反应谱的修正与完善),因此围绕加速度反应谱给组员们安排了如下两个学习任务,分别培养组员的编程及机器学习基础能力。
  • 通过C#完成窗体开发,掌握定义类及常用控件(CheckListbox、Listbox、Chart、DataGridView)的使用及数据绑定。

  • 基于Python人工神经网络(ANN)建立加速度反应谱曲线预测模型,通过输入影响系数最大值、特征周期及阻尼比预测规范反应谱曲线。

图1 学习任务一:C#窗体示例

由于规范反应谱存在明显的数学关系,以之做为机器学习的入门最好不过。组员们百花齐放,经过努力均出色完成学习任务。以梁振宇同学(大二)的成果为例,他通过PyTorch机器学习库建立加速度反应谱曲线预测模型。点击阅读原文可跳转至梁同学CSDN主页查看完整实现过程。
  • 生成数据集
梁同学通过枚举的方式,利用规范的反应谱计算公式建立43.2万组反应谱数据。本推送不对本部分进行赘述,可通过阅读原文查看实现过程。
  • 搭建神经网络
本神经网络模型共具备4个隐藏层,各隐藏层的神经元数分别为4,500,500,1。
  1. # 搭建神经网络

  2. model = torch.nn.Sequential(

  3. torch.nn.Linear(1*4,500),

  4. torch.nn.ReLU(),

  5. torch.nn.Linear(500,500),

  6. torch.nn.ReLU(),

  7. torch.nn.Linear(500,500),

  8. torch.nn.ReLU(),

  9. torch.nn.Linear(500,1)

  10. )


  11. # 损失函数和优化器

  12. loss_fuc = nn.MSELoss()

  13. optimizer = torch.optim.SGD(model.parameters(), lr=0.01)


  14. # 数据集和下载器

  15. train_dataset =Data.TensorDataset(input, target)

  16. train_loader =DataLoader(train_dataset, batch_size=1000, shuffle=True)


  17. # 数据训练

  18. num_epochs =1000000

  19. for epoch in range(num_epochs):

  20. for step,(data, target)in enumerate(train_loader):

  21. output = model(data)

  22. loss = loss_fuc(output, target)

  23. # 反向传播

  24. optimizer.zero_grad()

  25. loss.backward()

  26. optimizer.step()

  27. if loss.item()<0.0001:

  28. break

  29. # 保存整个网络

  30. torch.save(model,'net.pkl')

  • 神经网络性能测试
ANN预测结果与规范反应谱曲线的对比如图2所示。

图2 ANN预测结果与规范反应谱曲线对比
  • 优化建议

国家反应谱曲线为分段函数,具备明确的数学关系式,因此训练数据中不存在噪点,理应有较好的预测效果,但图2中的预测效果并不理想。针对梁同学的实现实例,伙伴杨明灿提出以下建议:
  • 输入层数据未经处理即进行数据训练,建议对数据进行归一化及均布化,可大幅度提高预测精度;

  • 对于本类简单的分段函数问题而言,本实例中神经网络模型架构过于复杂,极大增加了训练时间,易发生数据过拟合。建议最多两个隐藏层,各层内128或64节点即可解决问题;

  • 实例中的训练中止条件或无法判断神经网络模型是否已具备足够的预测精度,同时建议分割验证集来判断是否出现过拟合;

  • 本实例中的测试集已加入到训练集样本中,无法反应神经网络模型的预测效果;

  • 学习率等超参数有待优化。

待梁同学对ANN进行优化后,在与大家分享优化后的神经网络预测效果!

点击阅读原文可跳转至梁同学CSDN主页查看完整实现过程!

精彩回顾:

【会议总结】OpenSEES Days Eurasia 2019 in PolyU

【PBSD】【OpenSEES】2019年精选推送集锦

【编程】Python效率测试与调用.Net的基本方法

【编程】分段解析法及多软件反应谱求解结果对比探究[开源]

【YJK】弹性时程分析如何考虑周期折减系数

【YTO】YJK to OpenSees:框架结构算例验证

【YTO】YJK to OpenSees:剪力墙结构算例验证
  • PBSD

【PBSD】2019年更新历史——结构抗震性能设计软件PBSD

【PBSD】超限工程好助手:结构抗震性能设计软件PBSD功能简介

【PBSD】V1.0.5.0版正式发布:免费地震动工具箱之教学视频

【PBSD】弹性时程分析的实现与功能测试

【PBSD】【PERFORM-3D】YTP导模工具使用手册

【PBSD】【OpenSEES】【YTO】智能化的结构弹塑性分析全套解决方案

【PBSD】人工波生成功能测试 [开源]

【广东省性能设计规程】与国家高规对比浅谈反应谱的修正与完善

【广东省性能设计规程】性能设计基本方法与PBSD的实现
  • OpenSees

【OpenSEES】OpenSEES历史版本下载:v1.7.2-v3.1.0

【OpenSees】浅析两类纤维单元:位移元与应力元

【OpenSEES】24类纤维截面剖分TCL函数

【OpenSees】浅析纤维单元的数值积分方法

【OpenSees】浅析分布塑性铰单元的数值积分方法

【OpenSees】应力元纤维单元的Localization Issues

【OpenSees】宏观梁柱单元的强度软化模拟

【OpenSees】浅析剪力墙宏观单元:MVLEM

【OpenSees】浅析剪力墙宏观单元:SFI-MVLEM

【OpenSees】浅析剪力墙宏观单元:分层壳单元

【OpenSEES】浅析迭代(一)

【OpenSEES】浅析迭代(二):基于LineSearch优化迭代算法

【OpenSEES】浅析迭代(三):基于Krylov优化迭代算法

【OpenSees】SecAggregator为DispBC赋予剪切刚度乃无用功

【OpenSEES】PM截面分析实例

【OpenSees】如何利用应变控制截面分析的进程

【OpenSEES】低周往复加载实例:荷载位移双控

【OpenSees】SDOF非线性动力时程分析的实现与算例

  • 工具

【工具】PC端文字识别小工具2.0[Mini_OCR]

【工具】OSRun [OpenSees运行辅助工具][开源]

【工具】FSV [OpenSees纤维截面可视化工具][开源]



本文来自网络,不代表钢构人的立场,转载请注明出处。搜索工程类文章,就用钢构人网站。 https://www.ganggouren.com/2020/05/8660fe24d8/
上一篇
下一篇

作者: ganggouren

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

17717621528

在线咨询: QQ交谈

邮箱: 1356745727@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部