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

news2024/9/20 22:47:07

一、说明

        在深入研究第 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
do
  for latent_dims in 6 8
  do
    for batch_sizes in 128
    do
      ./scripts/call_experiments.sh $learning_rates $latent_dims $batch_sizes
    done
  done
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/bash

learning_rate=$1
latent_dim=$2
batch_size=$3

PARENT_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 /autoencoders

COPY . .

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
RUN pip install pyyaml

RUN 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: Dockerfile
    ports:
      - "8080:80"
    volumes:
      - ./:/autoencoders
      - type: bind
        source: F:/train_data
        target: /train_data
    command: ./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: Dockerfile
    ports:
      - "8080:80"
    volumes:
      - ./:/autoencoders
      - type: bind
        source: C:/Users/user123/data
        target: /train_data
    command: ./scripts/master.sh

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[c]用指针进行四个数排序

#include<stdio.h> void swap(int*p1,int*p2)//定义函数&#xff0c;实现两个数值交换 {int temp;temp*p1;*p1*p2;*p2temp; } void psort( int *pa, int *pb,int *pc,int *pd) {int i1;for(i1;i<3;i)//对四个数排序&#xff0c;至少3次循环&#xff0c;交换过后是升序…

海康威视IP网络对讲广播系统命令执行漏洞(CVE-2023-6895)

漏洞介绍 海康威视IP网络对讲广播系统采用领先的IPAudio™技术,将音频信号以数据包形式在局域网和广域网上进行传送,是一套纯数字传输系统。 Hikvision Intercom Broadcasting System 3.0.3_20201113_RELEASE(HIK)版本存在操作系统命令注入漏洞&#xff0c;该漏洞源于文件/ph…

跨境电商独立站有哪些优势,要如何做?

跨境电商独立站是指面向海外市场的电商网站&#xff0c;具有以下优势&#xff1a; 自主品牌 搭建跨境电商独立站可以通过自主品牌的打造&#xff0c;提升品牌的知名度和影响力&#xff0c;同时也可以在海外市场建立起更加稳定的品牌形象。 自主掌控 跨境电商独立站可以自主掌…

Python算法例19 创建最大数

1. 问题描述 给定两个长度分别是m和n的数组&#xff0c;数组的每个元素都是数字0~9&#xff0c;从这两个数组当中选出k个数字来创建一个最大数&#xff0c;其中k满足k&#xff1c;mn&#xff0c;选出来的数字在创建最大数里的位置必须与在原数组内的相对位置一致。返回k个元素…

Java第一个程序——Hello,World!

“Hello, world”的由来可以追溯到 The C Programming Language 。在这门编程语言中&#xff0c;它被用作第一个演示程序&#xff0c;向人们展示了在计算机屏幕上输出“Hello world”这行字符串的计算机程序。由于这个演示程序的简洁性和直观性&#xff0c;它成为了许多初学者学…

韩语中的一次多用-柯桥基础韩语学习

1.动词&#xff0c;写 일기를 쓰다 写日记 2.动词&#xff0c;戴&#xff08;帽子&#xff0c;眼镜&#xff0c;口罩&#xff09; 안경을 쓰다 戴眼镜 3.动词&#xff0c;使用&#xff08;材料&#xff0c;道具&#xff0c;手段&#xff09; 세제를 쓰다 使用洗剂 4.动词&am…

Java对接腾讯多人音视频房间回调接口示例

在前面我们已经对接好了腾讯多人音视频房间相关内容&#xff1a;Java对接腾讯多人音视频房间示例 为了完善业务逻辑&#xff0c;我们还需要对接它的一些回调接口 官方文档地址 主要就下面这些 这里因为比较简单直接上代码 里面有些工具类和上一章一样这里就没贴&#xff0c;需要…

机器学习 | 集成学习

团结就是力量&#xff01; Ensemble Learning 兼听则明&#xff0c;偏信则暗。 集成学习既是一种思想也是一类算法&#xff0c;它是建立在其他机器学习的算法之上&#xff0c;研究怎么让不同的算法之间进行协同。 既可以监督学习&#xff0c;也可以无监督学习。 集成学习用机器…

Gemini 1.0:Google推出的全新AI模型,改变生成式人工智能领域的游戏规则!

Gemini 1.0&#xff1a;Google推出的全新AI模型&#xff0c;将改变生成式人工智能领域的游戏规则&#xff01; &#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; IT杂谈 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 …

C/C++与MySQL:多线程、大并发和异步操作的实践

C/C与MySQL&#xff1a;多线程、大并发和异步操作的实践 在前面的文章中&#xff0c;我们介绍了如何使用C/C调用MYSQL API进行基本的数据库操作。然而&#xff0c;在实际应用中&#xff0c;特别是面对大量用户请求和高并发场景时&#xff0c;单线程的数据库操作往往显得力不从…

降本不增“笑”的正确打开方式

引言: 在当前行业形势下&#xff0c;降本增效已经是公认的命题&#xff0c;粗放扩张的时代已经过去&#xff0c;接下来是在从业务到技术都需要精细化管理的时代。但在这个命题下&#xff0c;往往未被提及的一点是用户价值。如果为了降本增效&#xff0c;而牺牲了用户价值&…

GeoTrust SSL证书详细介绍

GeoTrust是著名的证书颁发CA机构DigiCert的品牌。GeoTrustSSL产品在Internet上提供从基本域名验证到扩展验证SSL标准支持的最高级验证的安全性。 GeoTrust OV&#xff08;组织验证&#xff09;证书验证域所有权和组织的存在。在颁发证书之前&#xff0c;会检查该组织在公共数据…

Linux学习(2)——基本命令

目录 1、pwd&#xff08;print work directory&#xff09;: 显示当前路径 2、cd&#xff08;change directory&#xff09; &#xff1a;切换目录 2.1路径的分类 2.1.1 绝对路径&#xff1a;以 根&#xff08;/&#xff09; 开头的路径 2.1.2 相对路径&#xff1a;…

CVE-2023-33246 RocketMQ RCE漏洞

一、RocketMQ简介 RocketMQ是一款纯java、分布式、队列模型的开源消息中间件&#xff0c;主要用于在分布式系统中进行异步消息传递&#xff0c;支持事务消息、顺序消息、批量消息、定时消息、消息回溯等功能。 RocketMQ有四个核心组成部分&#xff1a; NameServer&#xff1…

【UML】第8篇 用例图(3/3)

目录 一、用例的关系 1.1 泛化&#xff08;Generalization&#xff09;关系 1.2 包含&#xff08;include&#xff09;关系 1.3 扩展关系 二、用例表示例 不是非要把电影改成连续剧&#xff0c;给大家播&#xff0c;确实是时间和精力有限。 用例图&#xff0c;虽然简单&…

【Python/网络安全】 Git漏洞之Githack工具基本安装及使用详析

[Python/网络安全] Git漏洞之Githack工具基本安装及使用详析 前言安装步骤工具使用实战总结 前言 Git是一个非常流行的开源分布式版本控制系统&#xff0c;它被广泛用于协同开发和代码管理。许多网站和应用程序都使用Git作为其代码管理系统&#xff0c;并将其部署到生产环境中…

Stable-diffusion-webui本地部署和简要介绍

Stable Diffusion 是一款基于人工智能技术开发的绘画软件&#xff0c;它可以帮助艺术家和设计师快速创建高品质的数字艺术作品。是2022年发布的深度学习文本到图像生成模型。它主要用于根据文本的描述产生详细图像&#xff0c;同时也可以应用于其他任务&#xff0c;如内补绘制、…

WPF Halcon机器视觉和运动控制软件通用框架,插件式开发,开箱即用 仅供学习!

点我下载&#xff0c;仅供个人学习使用 参考easyvision开发&#xff0c;集成几十个软件算子此版本以添加ui设计器。具体功能如上所示&#xff0c;可以自定义变量&#xff0c;写c#脚本&#xff0c;自定义流程&#xff0c;包含了halcon脚本和封装的算子&#xff0c;可自定义ui&a…

交叉熵损失(Cross-Entropy loss)

在处理机器学习或深度学习问题时&#xff0c;损失/成本函数用于在训练期间优化模型。目标几乎总是最小化损失函数。损失越低&#xff0c;模型越好。交叉熵损失是最重要的成本函数。它用于优化分类。对交叉熵的理解取决于对 Softmax 激活函数的理解。 一、softmax激活函数 激活…

手机上怎么合成gif?手机图片合成gif分享

手机上的功能越来越丰富&#xff0c;很多电脑上能制作的东西手机上也能制作。那么当我们想要在手机上制作gif动画的时候要怎么操作呢&#xff1f;非常的简单&#xff0c;使用在线制作动画gif&#xff08;https://www.gif.cn/&#xff09;网站-GIF中文网&#xff0c;手机自带浏览…