原文towardsdatascience.com/track-computer-vision-experiments-with-mlflow-3852f557b27a训练和微调各种模型是每位计算机视觉研究者的基本任务。即使是简单的任务我们也会进行超参数搜索以找到在自定义数据集上训练模型的最佳方式。数据增强技术包括许多不同的选项优化器的选择学习率以及模型本身。这是否是我案例的最佳架构我应该添加更多层改变架构还有更多问题等待被提出和搜索在寻找所有这些问题的答案时我通常会在本地不同文件夹中保存模型训练过程日志文件和输出检查点每次运行训练时都更改输出目录名称并手动逐个比较最终指标。以这种方式手动处理实验跟踪过程有许多缺点这是老式的方法耗时耗力且容易出错。在这篇博客文章中我将向您展示如何使用 MLflow这是跟踪实验的最佳工具之一它允许您记录所需的所有信息可视化并比较您已完成的不同训练实验并在用户和眼睛友好的环境中决定哪个训练是最优选择设置 MLflow与许多其他东西一样我使用 conda 创建了一个隔离的环境在本地使用以下命令设置 MLflowconda create--name mlflow python3.8#create the environmentconda activate mlflow#activate the conda environmentpip install mlflow#install mlflow运行 MLflow在刚刚设置的 conda 环境中我们运行以下命令以在本地主机上启动 MLflow 服务器端口号为 9090。如果此端口已被占用只需将其修改为任何其他端口号。此外在您的本地创建一个名为 MLflow 的文件夹并且每次您启动服务器时都应从该文件夹启动。如果您不确定一个固定的文件夹并从随机位置运行 MLflow 服务器则服务器每次都会创建一个空的mlruns文件夹而不是带您回到之前完成的实验。因此请记住从您的固定位置运行以下命令对我而言是 _/home/yca/_MLflowcd MLFLOW mlflow server--host127.0.0.1--port9090访问127.0.0.1:9090并与 MLflow 界面会面https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/25679dbeeaba194138afc29a04e87d24.png图片由作者提供训练并记录现在 MLflow 服务器正在运行我们需要以这种方式安排我们的训练代码以便每次运行训练时它都会自动将所有信息记录到我们的 MLflow 用户界面中。点击访问我为这个博客准备的关于分类项目的完整代码。该存储库包含主程序train.py、数据集管理脚本utils/data.py、辅助脚本utils/augmentation.py根据config.yaml自动化数据增强并便于在 MLflow 界面中记录以及utils/trainer.py这是一个用于训练的对象类具有可读性和可移植的结构。让我们开始讨论我在train.py和trainer.py脚本中使用的某些 MLflow 特定函数以便我的训练过程可以通过 MLflow 进行跟踪。正确设置 MLflow 服务器 IPmlflow.set_tracking_uri(urihttp://127.0.0.1:9090)设置实验名称只要它是同一个项目名称就应该相同。因此不同的实验将累积在同一个项目下我们将能够跟踪和比较它们。mlflow.set_experiment(config[logging][experiment_name])如果之前的实验已经完成并处于活动状态请关闭它以便可以在相同的实验名称下启动新的实验ifmlflow.active_run():mlflow.end_run()告诉 MLflow 自动跟踪系统指标这包括 GPU、CPU、内存使用等。默认值是 “false”所以如果你不希望包含这些指标只需不要在代码中包含以下行即可。os.environ[MLFLOW_ENABLE_SYSTEM_METRICS_LOGGING]true启动 MLflow 引擎——从现在起我们将记录任何指标或参数。我还喜欢通过打印来检查运行 ID、实验 ID 和实验名称。withmlflow.start_run()asrun:run_idrun.info.run_id experiment_idrun.info.experiment_id experiment_namemlflow.get_experiment(experiment_id).nameprint(fExperiment Name:{experiment_name})print(fExperiment ID:{experiment_id})print(fRun ID:{run_id})设置数据集名称和版本在我的情况下它自动从配置文件中设置mlflow.set_tag(Dataset Name,dataset_name)mlflow.set_tag(Dataset Version,dataset_version)将配置文件(config.yaml)中的所有内容记录为工件。mlflow.log_dict(config,config.yaml)当训练完成时我们会看到如下所示的结果。它也可以再次下载为 .yaml 文件。所以想象一下如果你每次通过更改配置文件来修改超参数进行数十次训练你不需要手动找到正确的参数并修改本地环境中的config.yaml文件。只需下载所选模型的配置文件即可https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/50965bbcbd0de7b30fd8567f527a8182.png此外我还想将此配置文件中的所有参数记录为单独的参数而不仅仅是整个 .yaml 文件的一个工件。因此当比较时间到来时我可以直接使用这些参数。log_dict_as_params(config)#Its a user defined function built in helpers.py我们准备好初始化我们的训练器类对象并在两行代码中开始训练trainerTrainer(config,class_names,dataloaders,dataset_sizes)model_finetunedtrainer.train_model()如您所见在trainer.py文件中我们也有一些针对 MLflow 特定的函数。在trainmodel()* 函数中我们可以看到一个常见的训练过程为每个来自训练数据集的批次提供网络前向计算计算损失和准确率并更新模型参数。如果是验证模式则从验证数据集中提供批次并计算损失和准确率。这里我们有四个重要的指标训练准确率、验证准确率、训练损失和验证损失我们按照以下方式记录它们ifphasetrain:self.scheduler.step()self.train_loss.append(epoch_loss)self.train_accuracy.append(epoch_acc.cpu())mlflow.log_metric(train_loss,epoch_loss,stepepoch)mlflow.log_metric(train_accuracy,epoch_acc,stepepoch)else:self.val_loss.append(epoch_loss)self.val_accuracy.append(epoch_acc.cpu())mlflow.log_metric(val_loss,epoch_loss,stepepoch)mlflow.log_metric(val_accuracy,epoch_acc,stepepoch)记录指标会在 MLflow 界面中始终生成图表https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d24e554c107dffa6ba700ebeb7f08cdb.png图片由作者提供仍然你可以创建自己的图表并使用 mlflow.log_figure 函数在 MLflow 实验下保存它们。# Plot and saveplt.figure(figsize(5,5),num1)plt.clf()plt.plot(self.epochs,self.train_loss,labelTrain)plt.plot(self.epochs,self.val_loss,labelTest)plt.legend()plt.grid()plt.title(Cross entropy loss)plt.xlabel(Epoch)plt.ylabel(Loss)mlflow.log_figure(plt.gcf(),loss.png)plt.figure(figsize(5,5),num2)plt.clf()plt.plot(self.epochs,self.train_accuracy,labelTrain)plt.plot(self.epochs,self.val_accuracy,labelTest)plt.legend()plt.grid()plt.title(Accuracy)plt.xlabel(Epoch)plt.ylabel(Accuracy)mlflow.log_figure(plt.gcf(),accuracy.png)这在训练结束时给我以下图表https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ad0fc5b5ac50bfdd5b87ea70125a2ac7.png图片由作者提供我喜欢记录一个提前停止的参数以检查我的训练是否通过提前停止完成或者它继续到最后一轮如果是这样我可能需要用更多的轮数重新训练。我在trainer.py脚本中的 _train*model()*函数中用以下代码片段来完成它。# Early stopping checkifearly_stopping_counterearly_stopping_patience:print(fEarly stopping at epoch{epoch}due to no improvement in validation loss for{early_stopping_patience}consecutive epochs.)self.early_stoppedTrue# Hypothetical attribute; framework-dependentbreak........ifself.early_stopped:mlflow.log_param(early_stopping,True)mlflow.log_param(stopped_epoch,epoch)else:mlflow.log_param(early_stopping,False)我喜欢在训练后立即应用测试数据集并记录测试准确率和混淆矩阵。trainer.test_model()#inside of test_model() function......mlflow.log_metric(test_accuracy,test_accuracy) Create confisuion matrix and save it as artifacts # Handle confusion matrix with all classescf_matrixconfusion_matrix(y_true,y_pred,labelslist(range(len(self.class_names))))panda_matrixpd.DataFrame(cf_matrix,indexself.class_names,# Rows: True Labelscolumnsself.class_names# Columns: Predicted Labels)plt.figure(figsize(12,7))sn.heatmap(panda_matrix,annotTrue)plt.xlabel(Predicted Label)plt.ylabel(True Label)mlflow.log_figure(plt.gcf(),confusion_matrix.png)这将保存混淆矩阵图表如下所示https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f696806dc644588403a77fc09c60c06b.png图片由作者提供我喜欢创建模型签名并记录它。快速查看以记住模型输入期望和示例输出形状是有用的。# Create input signature for Mlflowsample_inputtorch.randn(1,3,config[input][input_size][0],config[input][input_size][1])model_finetunedmodel_finetuned.to(cpu)model_signatureinfer_signature(sample_input.numpy(),model_finetuned(sample_input).detach().numpy())作为最后一步我们将最佳模型在训练期间具有最高验证准确率的模型保存为工件。mlflow.pytorch.log_model(model_finetuned,models/best_model,signaturemodel_signature)当我运行 3 次“python train.py”命令配置文件只有少量变化时我在 MLflow 界面中看到以下 3 个实验记录https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0b4aa3321e5a5dd9166821901ada0491.png图片由作者提供我们可以自定义指标、参数和标签列以决定我们想在这个主表中看到什么。例如“创建时间”、“持续时间”、“来源”和“模型”等特征是由 MLflow 自动记录的。通过点击最后一个实验美丽鳄鱼-936这些名称由 MLflow 随机生成在你的情况下它们将是不同的我们可以开始更多地探索界面。概述部分包括所有参数、系统和模型指标https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f3e511c17836cde524f6e9ff0336ea8a.png图片由作者提供模型指标为我们提供了我们记录的指标的自动生成图表https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/48dbd682ce100dfb7970e9de313ab80c.png图片由作者提供系统指标部分显示了系统指标的自动生成图表以及包含手动记录图表的工件、我们保存的最佳模型等。通过 MLflow 和推理比较实验在最后一部分我们将发现比较和加载用于推理的最佳模型有哪些选项。通过查看一般表格的第一眼我们就能快速比较但通过选择所有实验并点击顶部的“比较”按钮我们可以比较和可视化任何指标和参数。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/da3fb8a2a8fc733b70a48cc263d9075c.png图片由作者提供当我们完成选择用于推理的模型后它不过是将其从 MLflow 服务器加载并开始使用model_urifruns:/{args.run_id}/models/best_modelprint(fLoading model from:{model_uri})modelmlflow.pytorch.load_model(model_uri)我还喜欢记录推理输出带有预测标签的输入图像作为图表这样我就可以在未来的选定的模型中比较推理结果并确保我部署的新模型与之前的类别/之前的推理集仍然相同。由于我想在相同实验的相关模型训练下查看推理结果我提供了实验 _id 作为终端参数并将推理结果记录到相同的 MLflow 实验中如下所示withmlflow.start_run(run_idargs.run_id):剩下的内容没有什么特别之处加载推理数据集获取模型的预测结果绘制结果并将它们作为 artifacts 保存到 inference_torch/文件夹下。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1797951765f51636f3188170b74dff3f.pngImage yb Author查看此部分的inference.py您现在可以检查和使用为 MLflow 实验跟踪创建的示例GitHub 仓库用于分类任务并修改它以适应您需要的任何数据集。如果您想检查其他模型而非 InceptionV3的性能可以添加不同的模型结构。要正确运行 GitHub 仓库创建另一个 conda 环境安装 requirements.txt并从这个环境中运行 train.py 程序根据您的数据集修改配置文件。注意MLflow 不仅适用于分类只需更改几行代码就可以用于您定制的案例如检测、分割等以及更多收获记录参数注册您用于构建模型的任何超参数。记录图表将指标保存为图表。记录指标注册训练过程中随时间变化的数据。总是从同一个文件夹初始化 MLflow 服务器这样就可以加载之前的实验而不是在本地启动一个新的空存储。保持联系以了解剩余的MLOPS 教程因为我们将会发现完成计算机视觉项目所需的下一个步骤使用完整的 MLOPS 周期
使用 MLflow 跟踪计算机视觉实验
原文towardsdatascience.com/track-computer-vision-experiments-with-mlflow-3852f557b27a训练和微调各种模型是每位计算机视觉研究者的基本任务。即使是简单的任务我们也会进行超参数搜索以找到在自定义数据集上训练模型的最佳方式。数据增强技术包括许多不同的选项优化器的选择学习率以及模型本身。这是否是我案例的最佳架构我应该添加更多层改变架构还有更多问题等待被提出和搜索在寻找所有这些问题的答案时我通常会在本地不同文件夹中保存模型训练过程日志文件和输出检查点每次运行训练时都更改输出目录名称并手动逐个比较最终指标。以这种方式手动处理实验跟踪过程有许多缺点这是老式的方法耗时耗力且容易出错。在这篇博客文章中我将向您展示如何使用 MLflow这是跟踪实验的最佳工具之一它允许您记录所需的所有信息可视化并比较您已完成的不同训练实验并在用户和眼睛友好的环境中决定哪个训练是最优选择设置 MLflow与许多其他东西一样我使用 conda 创建了一个隔离的环境在本地使用以下命令设置 MLflowconda create--name mlflow python3.8#create the environmentconda activate mlflow#activate the conda environmentpip install mlflow#install mlflow运行 MLflow在刚刚设置的 conda 环境中我们运行以下命令以在本地主机上启动 MLflow 服务器端口号为 9090。如果此端口已被占用只需将其修改为任何其他端口号。此外在您的本地创建一个名为 MLflow 的文件夹并且每次您启动服务器时都应从该文件夹启动。如果您不确定一个固定的文件夹并从随机位置运行 MLflow 服务器则服务器每次都会创建一个空的mlruns文件夹而不是带您回到之前完成的实验。因此请记住从您的固定位置运行以下命令对我而言是 _/home/yca/_MLflowcd MLFLOW mlflow server--host127.0.0.1--port9090访问127.0.0.1:9090并与 MLflow 界面会面https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/25679dbeeaba194138afc29a04e87d24.png图片由作者提供训练并记录现在 MLflow 服务器正在运行我们需要以这种方式安排我们的训练代码以便每次运行训练时它都会自动将所有信息记录到我们的 MLflow 用户界面中。点击访问我为这个博客准备的关于分类项目的完整代码。该存储库包含主程序train.py、数据集管理脚本utils/data.py、辅助脚本utils/augmentation.py根据config.yaml自动化数据增强并便于在 MLflow 界面中记录以及utils/trainer.py这是一个用于训练的对象类具有可读性和可移植的结构。让我们开始讨论我在train.py和trainer.py脚本中使用的某些 MLflow 特定函数以便我的训练过程可以通过 MLflow 进行跟踪。正确设置 MLflow 服务器 IPmlflow.set_tracking_uri(urihttp://127.0.0.1:9090)设置实验名称只要它是同一个项目名称就应该相同。因此不同的实验将累积在同一个项目下我们将能够跟踪和比较它们。mlflow.set_experiment(config[logging][experiment_name])如果之前的实验已经完成并处于活动状态请关闭它以便可以在相同的实验名称下启动新的实验ifmlflow.active_run():mlflow.end_run()告诉 MLflow 自动跟踪系统指标这包括 GPU、CPU、内存使用等。默认值是 “false”所以如果你不希望包含这些指标只需不要在代码中包含以下行即可。os.environ[MLFLOW_ENABLE_SYSTEM_METRICS_LOGGING]true启动 MLflow 引擎——从现在起我们将记录任何指标或参数。我还喜欢通过打印来检查运行 ID、实验 ID 和实验名称。withmlflow.start_run()asrun:run_idrun.info.run_id experiment_idrun.info.experiment_id experiment_namemlflow.get_experiment(experiment_id).nameprint(fExperiment Name:{experiment_name})print(fExperiment ID:{experiment_id})print(fRun ID:{run_id})设置数据集名称和版本在我的情况下它自动从配置文件中设置mlflow.set_tag(Dataset Name,dataset_name)mlflow.set_tag(Dataset Version,dataset_version)将配置文件(config.yaml)中的所有内容记录为工件。mlflow.log_dict(config,config.yaml)当训练完成时我们会看到如下所示的结果。它也可以再次下载为 .yaml 文件。所以想象一下如果你每次通过更改配置文件来修改超参数进行数十次训练你不需要手动找到正确的参数并修改本地环境中的config.yaml文件。只需下载所选模型的配置文件即可https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/50965bbcbd0de7b30fd8567f527a8182.png此外我还想将此配置文件中的所有参数记录为单独的参数而不仅仅是整个 .yaml 文件的一个工件。因此当比较时间到来时我可以直接使用这些参数。log_dict_as_params(config)#Its a user defined function built in helpers.py我们准备好初始化我们的训练器类对象并在两行代码中开始训练trainerTrainer(config,class_names,dataloaders,dataset_sizes)model_finetunedtrainer.train_model()如您所见在trainer.py文件中我们也有一些针对 MLflow 特定的函数。在trainmodel()* 函数中我们可以看到一个常见的训练过程为每个来自训练数据集的批次提供网络前向计算计算损失和准确率并更新模型参数。如果是验证模式则从验证数据集中提供批次并计算损失和准确率。这里我们有四个重要的指标训练准确率、验证准确率、训练损失和验证损失我们按照以下方式记录它们ifphasetrain:self.scheduler.step()self.train_loss.append(epoch_loss)self.train_accuracy.append(epoch_acc.cpu())mlflow.log_metric(train_loss,epoch_loss,stepepoch)mlflow.log_metric(train_accuracy,epoch_acc,stepepoch)else:self.val_loss.append(epoch_loss)self.val_accuracy.append(epoch_acc.cpu())mlflow.log_metric(val_loss,epoch_loss,stepepoch)mlflow.log_metric(val_accuracy,epoch_acc,stepepoch)记录指标会在 MLflow 界面中始终生成图表https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d24e554c107dffa6ba700ebeb7f08cdb.png图片由作者提供仍然你可以创建自己的图表并使用 mlflow.log_figure 函数在 MLflow 实验下保存它们。# Plot and saveplt.figure(figsize(5,5),num1)plt.clf()plt.plot(self.epochs,self.train_loss,labelTrain)plt.plot(self.epochs,self.val_loss,labelTest)plt.legend()plt.grid()plt.title(Cross entropy loss)plt.xlabel(Epoch)plt.ylabel(Loss)mlflow.log_figure(plt.gcf(),loss.png)plt.figure(figsize(5,5),num2)plt.clf()plt.plot(self.epochs,self.train_accuracy,labelTrain)plt.plot(self.epochs,self.val_accuracy,labelTest)plt.legend()plt.grid()plt.title(Accuracy)plt.xlabel(Epoch)plt.ylabel(Accuracy)mlflow.log_figure(plt.gcf(),accuracy.png)这在训练结束时给我以下图表https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ad0fc5b5ac50bfdd5b87ea70125a2ac7.png图片由作者提供我喜欢记录一个提前停止的参数以检查我的训练是否通过提前停止完成或者它继续到最后一轮如果是这样我可能需要用更多的轮数重新训练。我在trainer.py脚本中的 _train*model()*函数中用以下代码片段来完成它。# Early stopping checkifearly_stopping_counterearly_stopping_patience:print(fEarly stopping at epoch{epoch}due to no improvement in validation loss for{early_stopping_patience}consecutive epochs.)self.early_stoppedTrue# Hypothetical attribute; framework-dependentbreak........ifself.early_stopped:mlflow.log_param(early_stopping,True)mlflow.log_param(stopped_epoch,epoch)else:mlflow.log_param(early_stopping,False)我喜欢在训练后立即应用测试数据集并记录测试准确率和混淆矩阵。trainer.test_model()#inside of test_model() function......mlflow.log_metric(test_accuracy,test_accuracy) Create confisuion matrix and save it as artifacts # Handle confusion matrix with all classescf_matrixconfusion_matrix(y_true,y_pred,labelslist(range(len(self.class_names))))panda_matrixpd.DataFrame(cf_matrix,indexself.class_names,# Rows: True Labelscolumnsself.class_names# Columns: Predicted Labels)plt.figure(figsize(12,7))sn.heatmap(panda_matrix,annotTrue)plt.xlabel(Predicted Label)plt.ylabel(True Label)mlflow.log_figure(plt.gcf(),confusion_matrix.png)这将保存混淆矩阵图表如下所示https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f696806dc644588403a77fc09c60c06b.png图片由作者提供我喜欢创建模型签名并记录它。快速查看以记住模型输入期望和示例输出形状是有用的。# Create input signature for Mlflowsample_inputtorch.randn(1,3,config[input][input_size][0],config[input][input_size][1])model_finetunedmodel_finetuned.to(cpu)model_signatureinfer_signature(sample_input.numpy(),model_finetuned(sample_input).detach().numpy())作为最后一步我们将最佳模型在训练期间具有最高验证准确率的模型保存为工件。mlflow.pytorch.log_model(model_finetuned,models/best_model,signaturemodel_signature)当我运行 3 次“python train.py”命令配置文件只有少量变化时我在 MLflow 界面中看到以下 3 个实验记录https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0b4aa3321e5a5dd9166821901ada0491.png图片由作者提供我们可以自定义指标、参数和标签列以决定我们想在这个主表中看到什么。例如“创建时间”、“持续时间”、“来源”和“模型”等特征是由 MLflow 自动记录的。通过点击最后一个实验美丽鳄鱼-936这些名称由 MLflow 随机生成在你的情况下它们将是不同的我们可以开始更多地探索界面。概述部分包括所有参数、系统和模型指标https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f3e511c17836cde524f6e9ff0336ea8a.png图片由作者提供模型指标为我们提供了我们记录的指标的自动生成图表https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/48dbd682ce100dfb7970e9de313ab80c.png图片由作者提供系统指标部分显示了系统指标的自动生成图表以及包含手动记录图表的工件、我们保存的最佳模型等。通过 MLflow 和推理比较实验在最后一部分我们将发现比较和加载用于推理的最佳模型有哪些选项。通过查看一般表格的第一眼我们就能快速比较但通过选择所有实验并点击顶部的“比较”按钮我们可以比较和可视化任何指标和参数。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/da3fb8a2a8fc733b70a48cc263d9075c.png图片由作者提供当我们完成选择用于推理的模型后它不过是将其从 MLflow 服务器加载并开始使用model_urifruns:/{args.run_id}/models/best_modelprint(fLoading model from:{model_uri})modelmlflow.pytorch.load_model(model_uri)我还喜欢记录推理输出带有预测标签的输入图像作为图表这样我就可以在未来的选定的模型中比较推理结果并确保我部署的新模型与之前的类别/之前的推理集仍然相同。由于我想在相同实验的相关模型训练下查看推理结果我提供了实验 _id 作为终端参数并将推理结果记录到相同的 MLflow 实验中如下所示withmlflow.start_run(run_idargs.run_id):剩下的内容没有什么特别之处加载推理数据集获取模型的预测结果绘制结果并将它们作为 artifacts 保存到 inference_torch/文件夹下。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1797951765f51636f3188170b74dff3f.pngImage yb Author查看此部分的inference.py您现在可以检查和使用为 MLflow 实验跟踪创建的示例GitHub 仓库用于分类任务并修改它以适应您需要的任何数据集。如果您想检查其他模型而非 InceptionV3的性能可以添加不同的模型结构。要正确运行 GitHub 仓库创建另一个 conda 环境安装 requirements.txt并从这个环境中运行 train.py 程序根据您的数据集修改配置文件。注意MLflow 不仅适用于分类只需更改几行代码就可以用于您定制的案例如检测、分割等以及更多收获记录参数注册您用于构建模型的任何超参数。记录图表将指标保存为图表。记录指标注册训练过程中随时间变化的数据。总是从同一个文件夹初始化 MLflow 服务器这样就可以加载之前的实验而不是在本地启动一个新的空存储。保持联系以了解剩余的MLOPS 教程因为我们将会发现完成计算机视觉项目所需的下一个步骤使用完整的 MLOPS 周期