当前位置: 首页 > 知识库问答 >
问题:

如何在亚马逊SageMaker与TensorFlow估计得到可复制的结果?

杜曜灿
2023-03-14

我目前正在使用AWS SageMaker Python SDK来训练EfficientNet模型(https://github.com/qubvel/efficientnet)我的数据。具体来说,我使用张量流估计器如下。此代码位于SageMaker笔记本实例中

import sagemaker
from sagemaker.tensorflow.estimator import TensorFlow
### sagemaker version = 1.50.17, python version = 3.6

estimator = TensorFlow("train.py", py_version = "py3", framework_version = "2.1.0",
                       role = sagemaker.get_execution_role(), 
                       train_instance_type = "ml.m5.xlarge", 
                       train_instance_count = 1,
                       image_name = 'xxx.dkr.ecr.xxx.amazonaws.com/xxx',
                       hyperparameters = {list of hyperparameters here: epochs, batch size},
                       subnets = [xxx], 
                       security_group_ids = [xxx]
estimator.fit({
   'class_1': 's3_path_class_1',
   'class_2': 's3_path_class_2'
})

火车的代码。py包含通常的训练过程,从S3中获取图像和标签,将它们转换为正确的数组形状以进行EfficientNet输入,并拆分为训练集、验证集和测试集。为了得到可再现的结果,我使用了以下重置随机种子函数(如果Keras结果不可再现,比较模型和选择超参数的最佳实践是什么?)在调用EfficientNet模型本身之前。

### code of train.py

import os
os.environ['PYTHONHASHSEED']=str(1)
import numpy as np
import tensorflow as tf
import efficientnet.tfkeras as efn
import random

### tensorflow version = 2.1.0
### tf.keras version = 2.2.4-tf
### efficientnet version = 1.1.0

def reset_random_seeds():
   os.environ['PYTHONHASHSEED']=str(1)
   tf.random.set_seed(1)
   np.random.seed(1)
   random.seed(1)

if __name__ == "__main__":

   ### code for getting training data
   ### ... (I have made sure that the training input is the same every time i re-run the code)
   ### end of code

   reset_random_seeds()
   model = efn.EfficientNetB5(include_top = False, 
      weights = 'imagenet', 
      input_shape = (80, 80, 3),
      pooling = 'avg',
      classes = 3)
   model.compile(optimizer = 'Adam', loss = 'categorical_crossentropy')
   model.fit(X_train, Y_train, batch_size = 64, epochs = 30, shuffle = True, verbose = 2)

   ### Prediction section here

但是,每次运行notebook实例时,都会得到与上次运行不同的结果。当我将train_instance_type切换为“local”时,每次运行笔记本时都会得到相同的结果。因此,不可再现的结果是由我选择的训练实例类型引起的吗?这个实例(ml.m5.xlarge)有4个vCPU、16个Mem(GiB)并且没有GPU。如果是这样,如何在这种培训情况下获得可重复的结果?

共有1个答案

董弘新
2023-03-14

有没有可能你不一致的结果是从

tf。随机的设定种子()

在这里遇到了一个帖子: Tensorflow:同一个随机种子的不同结果

 类似资料:
  • 我试图运行一个培训工作,在亚马逊sagemaker使用python-sagemaker-sdk,估计类。 我有以下几点 角色和output_path隐藏隐私。 我得到以下错误,“没有名为training_scripts\train_MSCOCO的模块”。 当我运行python-m训练脚本时。训练MSCOCO脚本运行良好。但是当我通过它不会作为“无文件名”培训脚本运行。火车站。py“在目录中找到”/

  • 我有一个很大的数据库(~250GB)在极光得到很多插入。只有一个实例,所以我想创建一个副本以备冗余。当我们进行夜间快照时,我们更希望有一个更容错的系统,而且使用aurora副本似乎可以提供自动故障转移。 我的问题:当我使用控制台并创建副本时,具体会发生什么?是否会出现一个新实例并开始从主实例中提取数据?这会影响数据库性能吗?我敢肯定,要等一段时间,副本才会“迎头赶上”,加载250GB;我怎么知道什

  • 亚马逊云 图 1.20.2.1 - AWS AWS,即 Amazon Web Services,是亚马逊(Amazon)公司的 IaaS 和 PaaS 平台服务。AWS 提供了一整套基础设施和应用程序服务,使用户几乎能够在云中运行一切应用程序:从企业应用程序和大数据项目,到社交游戏和移动应用程序。AWS 面向用户提供包括弹性计算、存储、数据库、应用程序在内的一整套云计算服务,能够帮助企业降低 IT

  • 我在amazon sagemaker上使用aws blazingtext算法训练了一个模型,并且我能够使用sagemaker部署一个endpoint。然而,在我的情况下,这是不符合成本效益的,我想在本地运行它。我发现这方面的文档很混乱。 我拥有的是一个经过训练的模型,它被保存为一个“model.tar.gz”文件,我从s3 bucket下载了这个文件。我在网上读到,您可以使用tensorflow和

  • 我能够从EC2实例连接到VPC中的ElastiCache Redis实例。但我想知道是否有办法连接到Amazon EC2实例之外的ElastiCache Redis节点,例如从我的本地开发设置或其他供应商提供的VPS实例。 当前在我的本地设置中尝试时: 我只在一段时间后才会暂停。

  • 我想问alexa各种各样的问题,最后我想让它问“你还有什么想知道的吗?”当我说“是”(yes是工作建议)时,它应该根据我的意图来建议我。就像我在