用docker搭建selenium grid分布式环境实践之路

Selenium Grid分布式自动化测试环境搭建与实战指南 在软件测试领域,自动化测试是提升测试效率和覆盖面的关键技术。其核心原理是通过脚本模拟用户操作,自动执行测试用例并验证结果。随着Web应用日益复杂,多浏览器、多版本、多操作系统的兼容性测试成为刚需,单机测试在效率和场景覆盖上存在明显瓶颈。分布式测试架构应运而生,它通过任务调度中心将测试任务分发到多个执行节点并行处理,能实现测试效率的成倍提升和测试环境的极大丰富。Selenium Grid作为主流的开源分布式测试解决方案,采用Hub-Node主从架构,支持灵活的资源管理和任务调度。在工程实践中,通过合理配置Hu 阅读详情

最近需要测试zoom视频会议,同时模拟100个人加入会议。经过了解,zoom提供了直接通过url链接加入会议的方式(只能通过chrome浏览器或者FireFox浏览器,因为用的协议是webrtc)。

顺着这个思路考虑可以通过Selenium自动化,同时启动多个浏览器进程,每个进程代表一个视频会议用户,达到模拟多方会议的效果。不过有以下两个难点:

  • 需要多个chrome浏览器进程同时存活,在电脑上启动一个chrome浏览器进程差不多要消耗220M左右。
  • 视频会议的音频和视频源的问题。

针对视频会议的音频和视频源的问题,chrome浏览器有比较好的支持,在Selenium脚本中初始化Chrome浏览器的参数中,只需要加入如下配置:

chrome_options.add_argument("--use-fake-ui-for-media-stream")
chrome_options.add_argument("--use-fake-device-for-media-stream")

就能在加入视频会议之后,使用虚拟的视频和音频。不过有个问题需要考虑,这个虚拟视频和真实的视频会议中的视频质量看上去是有差距的,会不会对测试结果造成影响,我们这里暂时不讨论这个话题。

现在唯一比较头疼的是怎么实现100个chrome浏览器进程,可能你会觉得,这不就是资源问题吗?加服务器不就搞定了?!但是假如有了服务器资源之后,怎么做任务调度呢?好在有Selenium Grid,它是Selenium的三大组件,专门用来执行分布式测试。

于是基于Selenium Grid设计了个测试方案:

  • 将某台服务器作为Hub,也就是master
  • 将剩下的机器作为node,注册到hub机器。
  • 本地采用多进程执行Selenium自动化脚本(我使用python语言实现的)。

按照上面的设计思路,理论上是能够模拟出100人同时加入会议的。接下来我们就正式开始用docker搭建Selenium Grid分布式环境的探索之路。

selenium jar包直接启动节点

其实,最开始我是直接使用jar包启动节点的,起几个节点还能接受,但是节点多了之后会特别麻烦,比如:想重启下节点,则需要手动全部kill掉,然后再一个个启动。

只要是手动重复的工作,就能脚本化。于是我写了两个shell脚本,一个脚本是根据传参启动对应数量的节点;另一个脚本是将所有的节点进程全部kill掉。主要脚本如下图所示:
在这里插入图片描述

虽然用脚本也能轻松的执行,但还是不方便。首先启动节点后,会增加好多java进程,并且没办法查看单个节点的日志,因为所有节点的日志都同时在控制台打印。于是考虑用docker来管理Selenium grid节点。

用docker命令直接启动

在github上有现成的镜像: https://github.com/SeleniumHQ/docker-selenium 。然后说明文档中也列出了所有可用的镜像名称,因为我主要使用chrome浏览器,所有安装了: selenium/hub 、 selenium/node-chrome、 selenium/node-chrome-debug 三个镜像,其中selenium/node-chrome-debug镜像会启动一个VNC Server,在脚本执行过程中,本地可以连上VNC Server,通过界面查看服务器的脚本执行情况。 使用命令:

$ docker pull selenium/hub
$ docker pull selenium/node-chrome
$ docker pull selenium/node-chrome-debug

启动hub的命令如下:

$ docker run -d -p 4444:4444 -e GRID_MAX_SESSION=100 --name hub selenium/hub

启动本地节点(hub和node在一台机器上)的命令如下:

$ docker run -d -p 5555:5555 -e NODE_MAX_INSTANCES=5 -e NODE_MAX_SESSION=5 --shm-size=2g --link hub:hub --name node1 selenium/node-chrome

启动远端节点(hub和node不在一台机器上)的命令如下:

$ docker run -d -p port:5555 -e HUB_HOST=remote_ip -e HUB_PORT=remote_port -e REMOTE_HOST=http://ip:port -e NODE_MAX_INSTANCES=5 -e NODE_MAX_SESSION=5 --shm-size=2g  --name node1 selenium/node-chrome

这里需要注意,网上很多教程提供的启动命令都是hub和node在一台机器上,假如需要hub和node在不同的机器上,按照网上的教程,虽然启动不会报错,但是节点和hub之间的网络是不通的。

不过直接使用docker命令虽然可以单独查看单个节点的日志,但是却和使用jar包的方式面对一样的问题:启动多个节点,非常不方便,需要手动执行多次命令。有没有更好的方案呢?当然有,可以使用docker-compose对docker容器进行整合。

docker-compose 启动

docker compose是docker的一个命令行工具,用来定义和运行多个容器组成的应用。相当于我们可以将多个docker命令放到一个文件里,然后由docker-compose一键执行。

同样的,也需要分两种情况:

Hub和node在一台机器上

可以使用如下的配置文件docker-compose.yml

version: "3"
services:
  selenium-hub:
    image: selenium/hub
    container_name: selenium-hub
    ports:
      - "4444:4444"
    environment:
      - GRID_MAX_SESSION=50
      - GRID_TIMEOUT=900
      - START_XVFB=false
  chrome:
    image: selenium/node-chrome
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - selenium-hub
    environment:
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
      - NODE_MAX_INSTANCES=5
      - NODE_MAX_SESSION=5

然后在控制台执行命令:

$ docker-compose up -d  //-d表示在后台运行

如果想同时启动多个节点该怎么办呢?非常简单:

$ docker-compose up -d --scale chrome=num   //num是要启动节点的数量

如果想关闭节点,可以执行如下命令:

$ docker-compose down

Hub和node不在一台机器上

可以使用如下配置文件docker-compose.yml

version: "3"
services:
  # selenium-chrome-1
  selenium-chrome-node-1:
    image: selenium/node-chrome
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "5556:5555"
    restart: always
    stdin_open: true
    environment:
      HUB_HOST: hub_ip
      HUB_PORT: 4444
      NODE_MAX_INSTANCES: 5
      NODE_MAX_SESSION: 5
      REMOTE_HOST: http://节点ip:5556
      GRID_TIMEOUT: 60000
    shm_size: "2gb"
  # selenium-chrome-2
  selenium-chrome-node-2:
    image: selenium/node-chrome
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "5555:5555"
    restart: always
    stdin_open: true
    container_name: node1
    environment:
      HUB_HOST: hub_ip
      HUB_PORT: 4444
      NODE_MAX_INSTANCES: 5
      NODE_MAX_SESSION: 5
      REMOTE_HOST: http://节点ip:5555
      GRID_TIMEOUT: 60000
    shm_size: "2gb"
  # selenium-chrome-3
  selenium-chrome-node-3:
    image: selenium/node-chrome
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "5557:5555"
    restart: always
    stdin_open: true
    environment:
      HUB_HOST: hub_ip
      HUB_PORT: 4444
      NODE_MAX_INSTANCES: 5
      NODE_MAX_SESSION: 5
      REMOTE_HOST: http://节点ip:5557
      GRID_TIMEOUT: 60000
    shm_size: "2gb"
  # selenium-chrome-4
  selenium-chrome-node-4:
    image: selenium/node-chrome
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "5558:5555"
    restart: always
    stdin_open: true
    environment:
      HUB_HOST: hub_ip
      HUB_PORT: 4444
      NODE_MAX_INSTANCES: 5
      NODE_MAX_SESSION: 5
      REMOTE_HOST: http://节点ip:5558
      GRID_TIMEOUT: 60000
    shm_size: "2gb"

  # selenium-chrome-5
  selenium-chrome-node-5:
    image: selenium/node-chrome
    volumes:
      - /dev/shm:/dev/shm
    ports:
      - "5559:5555"
    restart: always
    stdin_open: true
    environment:
      HUB_HOST: hub_ip
      HUB_PORT: 4444
      NODE_MAX_INSTANCES: 5
      NODE_MAX_SESSION: 5
      REMOTE_HOST: http://节点ip:5559
      GRID_TIMEOUT: 60000
    shm_size: "2gb"

启动节点的命令是(前提是hub需要提前启动):

$ docker-compose up -d

关闭节点的命令是:

$ docker-compose down

遗留问题

按照我上面这种方式搭建Selenium Grid环境,本地节点可以正常执行,但是远端的节点却经常超时,不过从http://hub_ip:4444/grid/console界面上看到的节点网络全部都是通的。

之前查过一些资料,貌似需要使用Docker Swarm,它是一个docker集群管理工具, 将若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源 。不过目前还没研究它,后面如果用Docker Swarm有结论之后,我再写文章同步给大家。

总结

用docker搭建selenium grid分布式环境,非常方便,基本是一行命令就能启动或者关闭节点。希望我这篇文章能给大家提供一些思路,帮助大家在平时的工作中解决一些问题。

还是那句话,任何技术,只要能帮你解决实际的问题,就是好的技术!

UI 自动化分布式测试 -Docker Selenium Grid Docker-Selenium 是一种将 Selenium Grid 与 Docker 容器技术结合的解决方案,能够简化 Selenium Grid 的部署和管理。通过使用 Docker 容器,用户可以快速创建和销毁 Selenium Grid 环境,而不需要手动配置每个节点,极大地提高了测试环境的可移植性和可扩展性简化部署:使用 Docker,可以在几分钟内启动完整的 Selenium Grid 环境,而不需要复杂的安装和配置过程。环境隔离。 阅读详情

相关推荐

使用Docker进行Selenium Grid分布式测试

使用Docker进行Selenium Grid分布式测试 本文主要介绍如何使用Docker进行Selenium Grid分布式测试,附上简单例子以及遇到的一些问题,准备环境如下: CentOS 7.0 Docker 1.18 selenium/hub 镜像 selenium/node-chrome 镜像 eclipse Oxygen.3 Release JDK 1.8.0 以上 宿主主机IP...

小苏少的博客 6181

Docker + Selenium Grid 搭建分布式 UI 自动化测试

Selenium Grid 是 selenium 提供的一个分布式测试工具,将自动化脚本发布到多个物理机或者虚拟机(跨平台、跨浏览器)上执行,通过一个中心节点来控制多个设备,也就是在中心节点(hub)上管理测试,在其它节点(node)上执行测试,以实现 Selenium 的并行执行。除了可以在多个设备上运行测试脚本以外,Selenium Grid 也可以实现多浏览器兼容性测试。Node 本身不提供多线程并发执行,需要结合多进程技术实现并行执行用例。使用场景:Selenium Grid 架构:(Seleniu

m0_60054525的博客 3264

基于Docker的Selenium Grid分布式测试环境搭建与实战指南

容器化技术通过将应用程序及其依赖打包成标准化的单元,实现了环境的一致性与隔离性,其核心原理是利用操作系统级别的虚拟化来封装进程、文件系统和网络。这项技术的工程价值在于能够显著提升软件交付的效率和可靠性,尤其在自动化测试领域,它能从根本上解决环境差异导致的测试不稳定问题。Docker作为主流的容器化平台,结合Selenium Grid这一分布式测试框架,可以构建出弹性的、可快速复用的测试执行环境。这种组合方案广泛应用于需要多浏览器兼容性验证、大规模回归测试以及追求高效CI/CD流水线的场景。本文聚焦于如何利用

dieyuqi2955的博客 330

基于docker部署的Selenium Grid分布式自动化测试_docker+selenium grid

此时你可以访问:http://localhost:4444/grid/console。如果需要多个Chrome node则继续运行这个命令:docker run -d --link selenium-hub:hub selenium/node-chrome,刷新则看到多了一个Chrome实例。node机器上命令行运行:java -jar selenium-server-standalone-3.141.59.jar -role node -nodeConfig node_config.json。

2401_84247449的博客 1022

搭建 Selenium Grid 集群的完整指南

创建],

monk all the way 972

Docker+Selenium Grid+Python搭建分布式测试环境

实验背景: 双11前,马云爸爸用诚(jin)意(qian)打造了一个超级大片《功守道》,更抢眼的是,这个被首富耽误的歌唱家,在11月4号的时候,在虾米音乐上首发了他和王菲演唱的主题曲《风清扬》。 CC先生一时好奇想要测测虾米此次发布在各个浏览器上的兼容性,就是看看能不能正常播放。于是搭建了一个分布式的测试环境来试试。 主要使用到的东西: 语言:python3.5 web自动化:selenium...

u012014531的博客 954

【Selenium】Selenium4 Grid

selenium4 grid

测试小工 1924

SeleniumGridDocker:如何使用Selenium Grid和Docker运行并行测试

使用Docker的Selenium Grid 描述 该项目有关如何使用Selenium Grid和Docker运行并行测试。 该项目执行基本的google搜索并验证页面标题。 依存关系: Selenium 测试NG Log4J 安装 Docker安装 什么是Docker? 一个开放源代码项目,通过在Linux上提供OS级虚拟化的附加抽象层和自动化层,来自动化容器内软件应用程序的部署。 下载适用于Windows的 安装后,在命令提示符下键入docker --version命令,以确保Docker是否成功安装到我们的系统。 您需要一台Docker机器才能在Mac或Windows上安装和运行Docker。 docker machine是一种工具,可让您在虚拟主机上安装Docker Engine并使用docker-machine命令管理主机。 您可以通过键入docker-machi

基于docker部署的Selenium Grid分布式自动化测试

Selenium Grid是Selenium套件的一部分,它专门用于并行运行多个测试用例在不同的浏览器、操作系统和机器上。

软件自动化测试技术交流、资源分享 1431

拆开一个烧坏的IGBT模块,手把手教你识别过压、过流、过温的“案发现场”

本文详细解析了IGBT模块失效分析的实战技巧,通过观察铝层熔化纹路、焊锡溢出形态等物理痕迹,手把手教你识别过压、过流、过温的典型失效模式。文章提供了从基础工具包到现场快速诊断的完整流程,帮助工程师精准定位IGBT模块失效的根本原因。

weixin_30655569的博客 426

手把手教你用CEFSharp打造防关联指纹浏览器(附完整代码)

本文详细介绍了如何基于CEFSharp框架,从零开始构建一个企业级的防关联指纹浏览器。通过剖析核心架构、多进程隔离实现、动态指纹混淆(如Canvas、WebGL)的实战代码,以及代理集成与性能优化,为跨境电商、广告投放等场景提供了一套可控、安全的开源解决方案。

fern8的博客 962

用docker搭建selenium grid分布式环境实践

通过这些步骤,您可以使用Docker搭建Selenium Grid分布式环境,并在多个节点上并行运行Selenium测试。根据实际需求,您还可以进行更高级的配置和扩展,如增加更多的节点、配置浏览器版本等。这将下载并启动所需的镜像,并创建一个包含Selenium Hub和两个节点(一个Chrome节点和一个Firefox节点)的分布式环境。

高性价比服务器就选:蓝易云 280

将Dify平台开发的工作流集成到Open WebUI中

将Dify开发的工作流集成到Open WebUI是一个能够显著增强AI应用交互能力和业务逻辑深度的有效途径。其核心在于通过API建立两者间的通信桥梁,并确保API在格式、协议和行为上的一致性,特别是向OpenAI Chat API规范看齐。最简单直接的路径是利用Dify的“对话型”或“Agent型”应用,这类应用的API设计更倾向于满足Open WebUI这类聊天前端的期望。然而,面对复杂的现实场景,直接的完美兼容并非总是唾手可得。

形上得其象,形下合于数;阴阳自济,玄理自明。 2030

基于Docker与Selenium Grid的分布式UI自动化测试方案实践

在软件测试领域,自动化测试是提升研发效能、保障软件质量的关键技术。其核心原理是通过脚本模拟用户操作,自动执行测试用例,从而替代重复的人工验证。随着Web应用规模扩大,单机执行UI自动化测试面临执行效率瓶颈和环境碎片化两大挑战。Docker容器技术通过封装应用及其依赖,提供了环境一致性与便携性,实现了“一次构建,处处运行”。结合Selenium Grid成熟的Hub-Node分布式调度架构,可以构建弹性的测试执行集群,将测试任务分发到多个节点并行执行。这种技术组合的价值在于显著缩短测试反馈周期,降低环境维护成

congsikuai0611的博客 443

Openclaw接入大模型API,操作本地windows文件

本文介绍了在WSL2环境下配置OpenClaw使用阿里百炼API的方法。主要内容包括:1)确认WSL2安装完成;2)配置阿里百炼API(需注意Qwen3-Max-Thinking为收费模型);3)提供正确的JSON配置格式示例,强调apiKey必须填写真实值;4)说明配置错误需修改Linux配置文件;5)建议通过询问模型信息验证连接成功。后续将介绍如何切换免费API及本地文件访问功能。

qq_27246521的博客 989

[PCIE5.0] 4.2.3.2 Encoding of Presets

• 发射器预设:发射器预设值用4位二进制编码,表示不同的预设设置(P0 到 P10),这些设置定义了信号的传输特性。• 接收器预设提示:接收器预设提示是通过3位二进制编码告诉接收器建议的增益值,用于调整接收器的灵敏度(适用于8.0 GT/s数据速率)。

系统固件工程师 574

Selenium Grid分布式测试实战指南

摘要:SeleniumGrid作为分布式测试解决方案,通过Hub-Node架构实现跨环境并行测试,大幅提升测试效率。文章详细介绍了环境搭建、节点配置、测试脚本适配等实践方法,包括Docker部署、多类型节点配置和弹性伸缩策略。同时探讨了测试框架集成、运维监控方案及企业级最佳实践,涵盖性能监控、常见问题解决和安全加固措施。SeleniumGrid4.0的新特性进一步简化了集群管理,为构建高效稳定的自动化测试环境提供了完整方案。

2501_94471289的博客 1115

提示词驱动的智能合同生成与审核

第1章:核心概念与背景 1.1.1 问题背景 1.1.1.1 合同生成与审核的需求 合同作为商业和法律领域中的基本工具,其生成和审核过程至关重要。传统的合同生成往往依赖于法律专业人士的手工撰写,这不仅耗时耗力,而且容易出现错误。此外,合

AI天才研究院 1001

分布式测试网格(Selenium Grid)配置实战

本文介绍了SeleniumGrid分布式测试架构的实战应用。通过Hub-Node架构实现多节点并行测试,显著提升测试效率(500用例从4小时缩短至24分钟)。详细讲解了从零搭建Grid环境的步骤,包括Hub启动、节点注册和测试脚本编写。进阶部分涵盖容器化部署和监控优化方案,推荐使用Docker/Kubernetes管理节点。最后分享了企业级最佳实践,包括环境隔离、版本控制和CI/CD集成,并提供了常见问题排错指南。SeleniumGrid已成为提升测试效率的关键基础设施,特别适合持续集成场景。

2501_94480392的博客 1154

LLaMA-Factory微调教程2:命令行sft微调

本文介绍了如何使用llama-factory项目在本地运行Qwen2-7B大语言模型进行对话。首先通过llamafactory-cli env查看环境配置,然后使用git lfs下载Qwen2-7B模型。创建配置文件qwen2_7b_instruct.yaml,修改模型路径和模板参数。最后通过llamafactory-cli chat命令启动对话服务,加载模型配置文件和tokenizer,完成环境初始化后即可进行交互式对话。

Cachel Wood的博客 8814

[从零开始学习FPGA编程-18]:快速入门篇 - 操作步骤2-6- VerilogHDL时序电路语法分析(以计数器为例)

目录前言:第1章 功能模块代码:counter.v第2章 驱动代码:tcounter.v前文以及阐述了VerilogHDL基本语法,本文将以modelsim自带的计数器程序来解读VerilogHDL的语法。代码路径:

文火冰糖(王文兵)的博客 7万+

Selenium Grid分布式UI自动化测试:从原理到实战部署

分布式计算通过将任务分解到多台机器并行执行,解决了单机资源瓶颈和效率低下的问题。其核心原理在于主从(Master-Slave)架构,由中心节点进行任务调度与资源管理,执行节点负责具体运算,通过网络通信协同工作。这一架构在软件测试领域价值显著,能够极大提升测试执行效率,实现环境隔离,增强测试稳定性。具体到UI自动化测试场景,Selenium Grid正是该架构的经典实现,它将测试脚本分发到配置了不同浏览器环境的节点上并行运行。通过搭建包含Hub(调度中心)和Node(执行节点)的集群,并结合Docker容器化

weixin_31083901的博客 244

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Selenium WebDriver与Java:Web自动化测试全攻略

本文系统介绍了Selenium自动化测试框架的应用实践。主要内容包括:环境搭建(JDK11+、Maven配置、浏览器驱动管理);核心组件解析(WebDriver、WebElement、定位策略等);企业级测试框架设计(分层架构、PageObject模式);最佳实践(智能等待、动态元素处理等);以及持续集成和前沿技术(Selenium Grid4、Docker容器化)。文章提供了从基础配置到高级应用的完整技术路线,帮助测试人员构建高效可靠的自动化测试体系。

2501_94480392的博客 458

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 软件测试行业的职业发展路线如何?如何快速突破职业瓶颈?
下一篇: 关于手机淘宝3.25bug我的一些思考与建议
布道师玄柯
布道师玄柯 领域专家: 数据科学与机器学习技术领域 领域专家: 数据科学与机器学习技术领域
博客等级 码龄15年 18粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值