变分自动编码器【03/3】:使用 Docker 和 Bash 脚本进行超参数调整

一、说明

        在深入研究第 1 部分中的介绍和实现,并在第 2 部分中探索训练过程之后,我们现在将重点转向在第 3 部分中通过超参数调整来优化模型的性能。要访问本系列的完整代码,请访问我们的 GitHub 存储库在GitHub - asokraju/ImageAutoEncoder: A repository to learn features from Off Road Navigation Vehicles

        在任何机器学习模型中,超参数都是我们调整以获得最佳模型性能的旋钮和杠杆。然而,找到正确的设置有点像大海捞针——非常耗时,有时甚至令人困惑!但不用担心,我们将以简单直接的方式引导您完成整个过程。

        在本部分中,我们将利用 Docker 和 Bash 脚本对变分自动编码器执行超参数调整。Docker 是一个用于部署应用程序的流行平台,它将帮助我们为实验创建一个隔离的环境,确保我们的结果是可重现的。同时,Bash 脚本将自动执行使用不同超参数运行模型的繁琐任务,从而使该过程更加高效。

        那么,您准备好调整您对变分自动编码器的理解并释放模型的全部潜力了吗?让我们一起深入研究“变分自动编码器:使用 Docker 和 Bash 脚本进行超参数调整”!

        如果您需要复习或想要重温任何概念,请不要忘记重温第 1 部分和第 2 部分。快乐学习!

二、超参数实验

        任何机器学习模型的开发通常都涉及微调一系列超参数。然而,手动测试每种可能的组合将是一项艰巨的任务。这就是master.sh派上worker.sh用场的地方。这两个 bash 脚本自动化了尝试不同超参数并记录结果的过程,为我们节省了大量的时间和精力。

  master.sh是我们的控制室,编排我们希望测试的各种超参数组合。它系统地循环遍历我们预定义的一组超参数(在本例中为学习率、潜在维度和批量大小),并且对于每个独特的组合,它调用脚本worker.sh

        剧本worker.sh就是地面上的工人。每次调用它时,它都会从 接收超参数的独特组合master.sh,为该实验设置专用日志目录,然后train.py使用这些特定的超参数运行我们的模型(在本例中)。日志目录根据使用的超参数进行唯一命名,以便我们以后可以轻松识别每个实验的结果。

        有了这两个脚本,我们就可以放松下来,让我们的机器完成繁重的工作,使用不同的超参数运行实验并记录结果,以便我们在闲暇时进行分析。

# Contents of master.sh #!/bin/bash -l
for learning_rates in 0.001
dofor latent_dims in 6 8dofor batch_sizes in 128do./scripts/call_experiments.sh $learning_rates $latent_dims $batch_sizesdonedone
done

        现在让我们仔细看看这些脚本的详细信息。

        主脚本:

        该master.sh脚本的主要功能是循环遍历我们想要测试模型训练的不同超参数,然后调用脚本worker.sh使用提供的超参数执行每个实验。

        我们来分解一下步骤:

  1. #!/bin/bash -l:这一行通常称为 shebang,告诉系统该文件是一个 bash 脚本,应该这样执行。
  2. for learning_rates in 0.001:这将开始一个循环,迭代不同的学习率。在本例中,它仅包含一个值 0.001。您可以添加更多由空格分隔的值,例如for learning_rates in 0.001 0.01 0.1
  3. for latent_dims in 6 8for batch_sizes in 128:这些是其他超参数的附加循环 - 潜在维度和批量大小。
  4. ./scripts/call_experiments.sh $learning_rates $latent_dims $batch_sizescall_experiments.sh:这是使用当前选择的超参数调用脚本的关键步骤。这些值作为参数传递给worker.sh脚本。
  5. done:其中每一个都关闭一个 for 循环。由于存在三个for循环,因此必须有三个done命令。

本质上,该脚本将对指定学习率、潜在维度和批量大小的笛卡尔积执行超参数搜索,并worker.sh为每个组合运行脚本。

        工人脚本

        该worker.sh脚本旨在接受一组超参数作为输入,为实验设置唯一的日志目录,然后使用这些超参数运行 Python 训练脚本。

# contents of worker.sh#!/bin/bashlearning_rate=$1
latent_dim=$2
batch_size=$3PARENT_DIR="$(dirname $PWD)"
EXEC_DIR=$PWD
log_dir="logs/lr=${learning_rate}_latentdim=${latent_dim}_batchsize=${batch_size}"
mkdir -p $log_dir
echo "Current working directory is: $(pwd)"
python train.py --image-dir='../train_data' --learning-rate=${learning_rate} --latent-dim=${latent_dim} --batch-size=${batch_size} --logs-dir=${log_dir}

        下面对其步骤进行详细说明:

  1. #!/bin/bash:就像在master.sh脚本中一样,这个 shebang 将文件声明为 bash 脚本。
  2. learning_rate=$1latent_dim=$2batch_size=$3:这些行捕获 提供的输入参数master.sh并将它们分配给相应的变量。
  3. PARENT_DIR="$(dirname $PWD)"EXEC_DIR=$PWD: 在这里,我们将父目录路径和当前目录路径保存到变量中以供将来使用。
  4. log_dir="logs/lr=${learning_rate}_latentdim=${latent_dim}_batchsize=${batch_size}"mkdir -p $log_dir:这一对行创建一个唯一的目录来存储当前超参数集的日志。-p命令中的标志确保mkdir它创建整个目录路径(如果不存在)。
  5. echo "Current working directory is: $(pwd)":此行只是将当前工作目录打印到终端以进行调试。
  6. 最后一行使用所选的超参数运行 Python 训练脚本,并指定本次运行的日志目录:python train.py --image-dir='../train_data' --learning-rate=${learning_rate} --latent-dim=${latent_dim} --batch-size=${batch_size} --logs-dir=${log_dir}

        总之,该worker.sh脚本使用一组给定的超参数执行单个实验,将实验的输出记录在专用目录中,然后终止。

三、Docker 设置

        Dockerfile 和 docker-compose 文件在 Docker 上下文中使用,Docker 是一个允许您将应用程序及其依赖项打包到隔离容器中的平台。

        Dockerfile 是一个文本文件,其中包含一组用于构建 Docker 映像的指令。它定义基础映像,设置工作目录,将文件复制到映像中,安装依赖项,并指定启动容器时要运行的命令。

        另一方面,docker-compose 文件用于定义和管理多个容器作为单个应用程序的一部分。它允许您定义服务、它们的配置以及它们如何相互交互。

# Contents of Dockerfile
# Use an official Tensorflow runtime as a parent image
FROM tensorflow/tensorflow:latest# Set the working directory to /app
WORKDIR /autoencodersCOPY . .# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
RUN pip install pyyamlRUN chmod +x scripts/master.sh
RUN chmod +x scripts/worker.sh# Run app.py when the container launches
CMD ["python", "train.py"]

        现在,让我们详细了解 Dockerfile 中的每个步骤:

  1. FROM tensorflow/tensorflow:latest:此行指定要使用的基础映像,这是官方 TensorFlow 运行时映像的最新版本。
  2. WORKDIR /autoencoders:将容器内的工作目录设置为/autoencoders. 这是后续命令将被执行的地方。
  3. COPY . .:将当前目录(Dockerfile所在目录)中的所有文件复制到/autoencoders容器内的目录中。
  4. RUN pip install --no-cache-dir -r requirements.txt:安装文件中指定的Python包requirements.txt。该--no-cache-dir标志用于避免在容器上缓存包索引。
  5. RUN pip install pyyamlpyyaml使用 pip 安装软件包。某些 YAML 相关功能可能需要此包。
  6. RUN chmod +x scripts/master.shRUN chmod +x scripts/worker.sh:更改 shell 脚本的权限master.sh并使worker.sh它们可执行。
  7. CMD ["python", "train.py"]:指定容器启动时运行的默认命令。train.py在本例中,它使用 Python 解释器运行Python 脚本。
# contents of requirements.txt
pandas==1.3.3
numpy==1.21.2
matplotlib==3.4.3
argparse==1.4.0
protobuf==3.20.*
tensorflow==2.7.0
pyyaml

现在,让我们继续讨论 docker-compose 文件:

  1. version: '3':指定正在使用的 docker-compose 文件格式的版本。
  2. services:定义组成应用程序的服务(容器)。
  3. autoencoders:服务的名称。
  4. build:指定如何构建该服务的镜像。
  5. context: .:将构建上下文设置为当前目录(docker-compose 文件所在的位置)。
  6. dockerfile: Dockerfile:指定用于构建映像的 Dockerfile。
  7. ports: - "8080:80":将主机上的8080端口映射到容器上的80端口。这允许通过访问容器内运行的服务localhost:8080
  8. volumes: - ./:/autoencoders:将主机上的当前目录挂载到/autoencoders容器内的目录,确保主机上文件的更改反映在容器内。
  9. - type: bind source: F:/train_data target: /train_data:将F:/train_data主机上的目录与/train_data容器内的目录绑定,允许从容器内访问训练数据。
  10. command: ./scripts/master.sh:指定启动容器时运行的命令。在这种情况下,它运行master.sh位于scripts目录中的脚本。
# Contents of docker-compose.yml
version: '3'
services:autoencoders:build:context: .dockerfile: Dockerfileports:- "8080:80"volumes:- ./:/autoencoders- type: bindsource: F:/train_datatarget: /train_datacommand: ./scripts/master.sh

        在您的docker-compose.yml文件中,您指定了两个卷。第一个卷将docker-compose.yml主机上的当前目录(文件所在的位置)映射到/autoencodersDocker 容器中的目录。

        第二个卷是绑定挂载,它将主机中的目录或文件绑定到 Docker 容器中的目录或文件。在本例中,您将F:/train_data主机上的目录绑定到/train_dataDocker 容器中的目录。

        此行很重要,因为您的训练脚本(在 Docker 容器内运行)期望在 处找到您的训练数据/train_data。但由于 Docker 容器与主机隔离,因此您需要一种方法来向脚本提供训练数据。绑定挂载通过使F:/train_data主机上的目录/train_data在 Docker 容器中可用来实现这一点。

        但是,并非每个使用您的脚本的人都会在 处获得训练数据F:/train_data。这就是为什么您需要指示他们根据训练数据所在的位置更改此行。他们可以替换F:/train_data为训练数据的路径。例如,如果他们的训练数据位于C:/Users/user123/data,他们需要将此行更改为:

# Contents of docker-compose.yml
version: '3'
services:autoencoders:build:context: .dockerfile: Dockerfileports:- "8080:80"volumes:- ./:/autoencoders- type: bindsource: C:/Users/user123/datatarget: /train_datacommand: ./scripts/master.sh

        这些步骤共同定义了用于构建映像并运行关联容器的 Dockerfile 和 docker-compose 文件,从而能够在容器化环境中训练自动编码器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/222323.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

直播电商“去网红化”势在必行,AI数字人打造品牌专属IP

近年来,网红直播带货“翻车”事件频发,给品牌商带来了信任危机和负面口碑的困扰,严重损害了企业的声誉。这证明强大的个人IP,对于吸引粉丝和流量确实能起到巨大的好处,堪称“金牌销售”,但太过强势的个人IP属性也会给企业带来一定风险&#x…

计算机网络:应用层

0 本节主要内容 问题描述 解决思路 1 问题描述 不同的网络服务: DNS:用来把人们使用的机器名字(域名)转换为 IP 地址;DHCP:允许一台计算机加入网络和获取 IP 地址,而不用手工配置&#xff1…

回顾丨2023 SpeechHome 第三届语音技术研讨会

下面是整体会议的内容回顾: 18日线上直播回顾 18日上午9:30,AISHELL & SpeechHome CEO卜辉宣布研讨会开始,并简要介绍本次研讨会的筹备情况以及报告内容。随后,CCF语音对话与听觉专委会副主任、清华大学教授郑方&#xff0c…

Spring AOP入门指南:轻松掌握面向切面编程的基础知识

面向切面编程 1,AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2,AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知类配给…

7-1 建立二叉搜索树并查找父结点(PTA - 数据结构)

按输入顺序建立二叉搜索树,并搜索某一结点,输出其父结点。 输入格式: 输入有三行: 第一行是n值,表示有n个结点; 第二行有n个整数,分别代表n个结点的数据值; 第三行是x,表示要搜索值…

【已解决】修改了网站的class样式name值,会影响SEO,搜索引擎抓取网站及排名吗?

问题: 修改了网站的class样式name值,会影响搜索引擎抓取网站及排名吗? 解答: 如果你仅仅修改了网站class样式的名称,而没有改变网站的结构和内容,那么搜索引擎通常不会因此而影响它对网站的抓取和排名。但…

【C++入门到精通】互斥锁 (Mutex) C++11 [ C++入门 ]

阅读导航 引言一、Mutex的简介二、Mutex的种类1. std::mutex (基本互斥锁)2. std::recursive_mutex (递归互斥锁)3. std::timed_mutex (限时等待互斥锁)4. std::recursive_timed_mutex (限时等待…

使用VSC从零开始Vue.js——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务3:数据可视化

使用Visual Studio Code(VSC)进行Vue开发非常方便,下面是一些基本步骤: 一、下载和安装Vue 官网下载地址Download | Node.js Vue.js是基于Node.js的,所以首先需要安装Node.js,官网下载地址:No…

PSP - 结构生物学中的机器学习 (NIPS MLSB Workshop 2023.12)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/135120094 Machine Learning in Structural Biology (机器学习在结构生物学中) 网址:https://www.mlsb.io/ Workshop at the 37th Co…

应用案例 | 汽车行业基于3D机器视觉引导机器人上下料解决方案

Part.1 背景 近年来,汽车行业蓬勃发展,一度出现供不应求的现象。在汽车零配件、整车大规模制造的过程中,为了降本增效,提升产品质量,工厂急需完成自动化升级。随着人工智能的发展,越来越多的生产环节引入机…

Jupyter Notebook修改默认工作目录

1、参考修改Jupyter Notebook的默认工作目录_jupyter文件路径-CSDN博客修改配置文件 2.在上述博客内容的基础上,这里不是删除【%USERPROFILE%】而是把这个地方替换为所要设置的工作目录路径, 3.【起始位置】也可以更改为所要设置的工作目录路径&#x…

【JVM】一、认识JVM

文章目录 1、虚拟机2、Java虚拟机3、JVM的整体结构4、Java代码的执行流程5、JVM的分类6、JVM的生命周期 1、虚拟机 虚拟机,Virtual Machine,一台虚拟的计算机,用来执行虚拟计算机指令。分为: 系统虚拟机:如VMware&am…

我的创作纪念日——成为创作者第1024天

机缘 一、前言 早上收到CSDN的推送信息,今天是我成为创作者的第1024天,回想起自己已经好久没有写博客了,突然间很有感触,想水一篇文章,跟小伙伴们分享一下我的经历。 二、自我介绍 我出生在广东潮汕地区的一个小城…

TypeScript实战——ChatGPT前端自适应手机端,PC端

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 可以在线体验哦:体验地址 文章目录 前言引言先看效果PC端手机端 实现原理解释 包的架构目录 引言 ChatGPT是由OpenAI开发的一种基于语言模型的对话系统。它是GPT(…

ES排错命令

GET _cat/indices?v&healthred GET _cat/indices?v&healthyellow GET _cat/indices?v&healthgreen确定哪些索引有问题,多少索引有问题。_cat API 可以通过返回结果告诉我们这一点 查看有问题的分片以及原因。 这与索引列表有关,但是索引…

【介质】详解NVMe SSD存储性能影响因素

导读: NVMe SSD的性能时常捉摸不定,为此我们需要打开SSD的神秘盒子,从各个视角分析SSD性能影响因素,并思考从存储软件的角度如何最优化使用NVMe SSD,推进数据中心闪存化进程。本文从NVMe SSD的性能影响因素进行分析&am…

Java智慧工地源码 SAAS智慧工地源码 智慧工地管理可视化平台源码 带移动APP

一、系统主要功能介绍 系统功能介绍: 【项目人员管理】 1. 项目管理:项目名称、施工单位名称、项目地址、项目地址、总造价、总面积、施工准可证、开工日期、计划竣工日期、项目状态等。 2. 人员信息管理:支持身份证及人脸信息采集&#…

PLC物联网,实现工厂设备数据采集

随着工业4.0时代的到来,物联网技术在工厂设备管理领域的应用日益普及。作为物联网技术的重要一环,PLC物联网为工厂设备数据采集带来了前所未有的便捷和高效。本文将围绕“PLC物联网,实现工厂设备数据采集”这一主题,探讨PLC物联网…

常见可视化大屏编辑器有哪些?

前言: 在当今数字化时代,可视化大屏编辑器成为了数据展示和决策支持的重要工具。大屏编辑器不仅仅是数据的呈现,更是数据背后的故事的讲述者。它通过图表、图形和实时数据的呈现,为用户提供了全面的信息视图,帮助用户更…

mangokit:golang web项目管理工具,使用proto定义http路由和错误

文章目录 前言1、mangokit介绍1.1 根据proto文件生成http路由1.2 根据proto文件生成响应码1.3 使用wire来管理依赖注入 2、mangokit实现2.1 protobuf插件开发2.2 mangokit工具 3、使用示例3.1 创建新项目3.2 添加新的proto文件3.3 代码生成 前言 在使用gin框架开发web应用时&a…