怎么免费从网站上做宣传,android显示wordpress,win7系统做asp网站,网站怎么屏蔽ip一、说明 在深入研究第 1 部分中的介绍和实现#xff0c;并在第 2 部分中探索训练过程之后#xff0c;我们现在将重点转向在第 3 部分中通过超参数调整来优化模型的性能。要访问本系列的完整代码#xff0c;请访问我们的 GitHub 存储库在GitHub - asokraju/ImageAutoEncoder… 一、说明 在深入研究第 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使用提供的超参数执行每个实验。 我们来分解一下步骤
#!/bin/bash -l这一行通常称为 shebang告诉系统该文件是一个 bash 脚本应该这样执行。for learning_rates in 0.001这将开始一个循环迭代不同的学习率。在本例中它仅包含一个值 0.001。您可以添加更多由空格分隔的值例如for learning_rates in 0.001 0.01 0.1。for latent_dims in 6 8和for batch_sizes in 128这些是其他超参数的附加循环 - 潜在维度和批量大小。./scripts/call_experiments.sh $learning_rates $latent_dims $batch_sizescall_experiments.sh这是使用当前选择的超参数调用脚本的关键步骤。这些值作为参数传递给worker.sh脚本。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_dirlogs/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} 下面对其步骤进行详细说明
#!/bin/bash就像在master.sh脚本中一样这个 shebang 将文件声明为 bash 脚本。learning_rate$1、latent_dim$2、batch_size$3这些行捕获 提供的输入参数master.sh并将它们分配给相应的变量。PARENT_DIR$(dirname $PWD), EXEC_DIR$PWD: 在这里我们将父目录路径和当前目录路径保存到变量中以供将来使用。log_dirlogs/lr${learning_rate}_latentdim${latent_dim}_batchsize${batch_size}, mkdir -p $log_dir这一对行创建一个唯一的目录来存储当前超参数集的日志。-p命令中的标志确保mkdir它创建整个目录路径如果不存在。echo Current working directory is: $(pwd)此行只是将当前工作目录打印到终端以进行调试。最后一行使用所选的超参数运行 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 中的每个步骤
FROM tensorflow/tensorflow:latest此行指定要使用的基础映像这是官方 TensorFlow 运行时映像的最新版本。WORKDIR /autoencoders将容器内的工作目录设置为/autoencoders. 这是后续命令将被执行的地方。COPY . .将当前目录Dockerfile所在目录中的所有文件复制到/autoencoders容器内的目录中。RUN pip install --no-cache-dir -r requirements.txt安装文件中指定的Python包requirements.txt。该--no-cache-dir标志用于避免在容器上缓存包索引。RUN pip install pyyamlpyyaml使用 pip 安装软件包。某些 YAML 相关功能可能需要此包。RUN chmod x scripts/master.sh和RUN chmod x scripts/worker.sh更改 shell 脚本的权限master.sh并使worker.sh它们可执行。CMD [python, train.py]指定容器启动时运行的默认命令。train.py在本例中它使用 Python 解释器运行Python 脚本。
# contents of requirements.txt
pandas1.3.3
numpy1.21.2
matplotlib3.4.3
argparse1.4.0
protobuf3.20.*
tensorflow2.7.0
pyyaml
现在让我们继续讨论 docker-compose 文件
version: 3指定正在使用的 docker-compose 文件格式的版本。services定义组成应用程序的服务容器。autoencoders服务的名称。build指定如何构建该服务的镜像。context: .将构建上下文设置为当前目录docker-compose 文件所在的位置。dockerfile: Dockerfile指定用于构建映像的 Dockerfile。ports: - 8080:80将主机上的8080端口映射到容器上的80端口。这允许通过访问容器内运行的服务localhost:8080。volumes: - ./:/autoencoders将主机上的当前目录挂载到/autoencoders容器内的目录确保主机上文件的更改反映在容器内。- type: bind source: F:/train_data target: /train_data将F:/train_data主机上的目录与/train_data容器内的目录绑定允许从容器内访问训练数据。command: ./scripts/master.sh指定启动容器时运行的命令。在这种情况下它运行master.sh位于scripts目录中的脚本。
# Contents of docker-compose.yml
version: 3
services:autoencoders:build:context: .dockerfile: Dockerfileports:- 8080:80volumes:- ./:/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:80volumes:- ./:/autoencoders- type: bindsource: C:/Users/user123/datatarget: /train_datacommand: ./scripts/master.sh 这些步骤共同定义了用于构建映像并运行关联容器的 Dockerfile 和 docker-compose 文件从而能够在容器化环境中训练自动编码器。