amazon sagemaker 自定义代码增量训练
incremental training on custom code in amazon sagemaker
我正在 amazon sagemaker
迈出第一步。我正在使用脚本模式来训练分类算法。训练很好,但是我无法进行增量训练。我想用新数据再次训练同一个模型。这是我所做的。这是我的脚本:
import sagemaker
from sagemaker.tensorflow import TensorFlow
from sagemaker import get_execution_role
bucket = 'sagemaker-blablabla'
train_data = 's3://{}/{}'.format(bucket,'train')
validation_data = 's3://{}/{}'.format(bucket,'test')
s3_output_location = 's3://{}'.format(bucket)
tf_estimator = TensorFlow(entry_point='main.py',
role=get_execution_role(),
train_instance_count=1,
train_instance_type='ml.p2.xlarge',
framework_version='1.12',
py_version='py3',
output_path=s3_output_location)
inputs = {'train': train_data, 'test': validation_data}
tf_estimator.fit(inputs)
入口点是我的自定义 keras 代码,我对其进行了调整以接收来自脚本的参数。
现在培训已成功完成,我的 s3 存储桶中有 model.tar.gz。我想再次训练,但我不清楚该怎么做。我试过这个
trained_model = 's3://sagemaker-blablabla/sagemaker-tensorflow-scriptmode-2019-11-27-12-01-42-300/output/model.tar.gz'
tf_estimator = sagemaker.estimator.Estimator(image_name='blablabla-west-1.amazonaws.com/sagemaker-tensorflow-scriptmode:1.12-gpu-py3',
role=get_execution_role(),
train_instance_count=1,
train_instance_type='ml.p2.xlarge',
output_path=s3_output_location,
model_uri = trained_model)
inputs = {'train': train_data, 'test': validation_data}
tf_estimator.fit(inputs)
无效。首先,我不知道如何检索训练图像名称(为此我在 aws
控制台中查找它,但我想应该有一个更聪明的解决方案),其次这段代码抛出一个关于条目的异常点,但据我了解,当我使用现成的图像进行增量学习时,我不需要它。
我肯定错过了一些重要的东西,有什么帮助吗?谢谢!
增量训练是内置 Image Classifier and Object Detector 的原生功能。对于自定义代码,开发人员有责任编写增量训练逻辑并验证其有效性。这是一个可能的路径:
- 使用
fit
中传递的数据通道之一加载模型状态(工件微调)
- 在您的代码中,检查模型状态通道是否已填充
与文物。如果是,则从该状态实例化一个模型
并继续训练。这是特定于框架的,您可以采取
必要的预防措施,以避免忘记以前的知识。
一些框架为增量学习提供了比其他框架更好的支持。例如,某些 sklearn 模型提供了 incremental_fit 方法。对于 DL 框架,从检查点继续训练在技术上非常容易,但如果新数据与以前看到的数据有很大不同,这可能会导致您的模型忘记以前的学习。
我正在 amazon sagemaker
迈出第一步。我正在使用脚本模式来训练分类算法。训练很好,但是我无法进行增量训练。我想用新数据再次训练同一个模型。这是我所做的。这是我的脚本:
import sagemaker
from sagemaker.tensorflow import TensorFlow
from sagemaker import get_execution_role
bucket = 'sagemaker-blablabla'
train_data = 's3://{}/{}'.format(bucket,'train')
validation_data = 's3://{}/{}'.format(bucket,'test')
s3_output_location = 's3://{}'.format(bucket)
tf_estimator = TensorFlow(entry_point='main.py',
role=get_execution_role(),
train_instance_count=1,
train_instance_type='ml.p2.xlarge',
framework_version='1.12',
py_version='py3',
output_path=s3_output_location)
inputs = {'train': train_data, 'test': validation_data}
tf_estimator.fit(inputs)
入口点是我的自定义 keras 代码,我对其进行了调整以接收来自脚本的参数。 现在培训已成功完成,我的 s3 存储桶中有 model.tar.gz。我想再次训练,但我不清楚该怎么做。我试过这个
trained_model = 's3://sagemaker-blablabla/sagemaker-tensorflow-scriptmode-2019-11-27-12-01-42-300/output/model.tar.gz'
tf_estimator = sagemaker.estimator.Estimator(image_name='blablabla-west-1.amazonaws.com/sagemaker-tensorflow-scriptmode:1.12-gpu-py3',
role=get_execution_role(),
train_instance_count=1,
train_instance_type='ml.p2.xlarge',
output_path=s3_output_location,
model_uri = trained_model)
inputs = {'train': train_data, 'test': validation_data}
tf_estimator.fit(inputs)
无效。首先,我不知道如何检索训练图像名称(为此我在 aws
控制台中查找它,但我想应该有一个更聪明的解决方案),其次这段代码抛出一个关于条目的异常点,但据我了解,当我使用现成的图像进行增量学习时,我不需要它。
我肯定错过了一些重要的东西,有什么帮助吗?谢谢!
增量训练是内置 Image Classifier and Object Detector 的原生功能。对于自定义代码,开发人员有责任编写增量训练逻辑并验证其有效性。这是一个可能的路径:
- 使用
fit
中传递的数据通道之一加载模型状态(工件微调) - 在您的代码中,检查模型状态通道是否已填充 与文物。如果是,则从该状态实例化一个模型 并继续训练。这是特定于框架的,您可以采取 必要的预防措施,以避免忘记以前的知识。
一些框架为增量学习提供了比其他框架更好的支持。例如,某些 sklearn 模型提供了 incremental_fit 方法。对于 DL 框架,从检查点继续训练在技术上非常容易,但如果新数据与以前看到的数据有很大不同,这可能会导致您的模型忘记以前的学习。