> 文章作者:Dream
![image.png](https://dev-media.amazoncloud.cn/b8c0dd69d8684b3282730369ed0dbd14_image.png "image.png")
> **[Hello大家好,我是 Dream。](https://blog.csdn.net/weixin\\_51390582?spm=1011.2415.3001.5343?trk=cndc-detail)** 最近受邀参与了 **亚马逊云科技【云上探索实验室】** 活动,基于他们的 Sagemaker 实现了[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)中一个非常经典的案例:**猫狗分类**。最让我惊喜的是的模型训速度比想象中 **效果要好得多,而且速度十分迅速,而且总体感觉下来整个过程十分便利,使用起来也是得心应手。** 那接下来跟随我的视角,来一起复盘一下整体做的过程,来感受一下其强大便利之处。
在我们的日常生活和学习中,尤其是针对人工智能专业的学生以及工作者而言,[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)、神经网络是我们每天都要接触的工作,复杂多样的环境配置以及高要求的运行配置总让我们十分头疼,正因此我推荐大家去使用 AmazonSageMaker,轻松解决你的烦恼。**[Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 是亚马逊云计算(Amazon Web Service)的一项完全托管的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)平台服务**,算法工程师和数据科学家可以基于此平台快速构建、训练和部署[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail) (ML) 模型,而无需关注底层资源的管理和运维工作。它作为一个工具集,提供了用于[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)的端到端的所有组件,包括数据标记、数据处理、算法设计、模型训练、训练调试、超参调优、模型部署、模型监控等,**使得[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)变得更为简单和轻松**;同时,它依托于 Amazon 强大的底层资源,提供了高性能 CPU、GPU、弹性推理加速卡等丰富的计算资源和充足的算力,使得模型研发和部署更为轻松和高效。
**[Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 由以下三大主要部分组成:**
**创作:** 无需进行任何设置,使用`Jupyter Notebook IDE`就能进行数据探索、清洁与预处理。我们可以在常规实例类型或 GPU 驱动型实例当中运行此类工作负载。
**模型训练:** 一项分布式模型构建、训练与验证服务。我们可以利用其中的内置常规监督与无监督学习算法及框架,或者利用`Docker 容器`创建属于自己的训练机制。其模型训练规模可囊括数十个实例,以支持模型构建加速。训练数据读取自 S3,训练后的模型成果亦可存放在 S3 存储桶内。最终得出的模型结果为数据相关模型参数,而非模型当中进行推理的代码。
**模型托管:** 模型托管服务可配合`HTTP 端点`以调用模型进行实时推理。这些端点可进行规模扩展,从而支持实际流量;我们也可以同时对多套模型进行 A/B 测试。此外,我们也可以使用内置的SDK构建这些端点,或者选择 Docker 镜像提供自己的配置选项。
上述组成部分皆可独立使用,这意味着 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 将能够轻松填补现有流程中的空白环节。换句话来说,当开发人员以端到端方式使用该服务时,将能够享受到由其提供的强大功能。**那本文我们就来使用 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 快速实现高精度猫狗分类问题。**
# 一、环境准备
## 1. 登录 Amazon SageMaker 控制台,选择“笔记本实例”。
[Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 提供了一个完全集成的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)开发环境,能有效提高我们构建模型的效率和能力。我们可以在一键式 Jupyter notebooks 帮助下,以闪电般的速度进行构建和协作。Sagemaker 还为这些 notebooks 提供了一键式共享工具。整个编程的结构都会被自动捕获,同时我们可以**毫无障碍地与其他人协同工作**,分享我们的训练效果和新心得。
![image.png](https://dev-media.amazoncloud.cn/ade6cee967b2483bae9eb29fa0554f93_image.png "image.png")
## 2. 在“笔记本实例”页面上,单击“创建笔记本实例”。
在“创建笔记本实例”页面中,输入名称、选择实例类型和计算资源等配置信息,并新建安全组。
![image.png](https://dev-media.amazoncloud.cn/98e693c56a8c482fa32090f8591d2ddf_image.png "image.png")
在新的界面下,输入该 Notebook 实例的名称,并在 **Notebook instance type** 处选择实例的类型。同时,设置该实例的存储磁盘大小,默认是 5GB,截图中我们手动改为 30GB,该容量后期同样可以调大。
![image.png](https://dev-media.amazoncloud.cn/82ff19a9db1f475a857d4bbc21e31580_image.png "image.png")
最后选择创建笔记本实例,SageMaker 就将创建该 Notebook 实例。在 笔记本实例 界面可以看当前的实例列表及其状态,如果状态为 **InService**,在操作列有 打开 **Jupyter |打开 JupyterLab** 的选项。
在[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)中,Notebook 已经是常见的形式了,很多云平台都采用了这种编辑形式。因为可以与代码交互,用它来开发[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)代码实在是再合适不过了。在 SageMaker Studio 中,除了 Notebook 传统擅长可视化,还额外加了一些可视化组件管理模型的实验过程。
本来用 Notebook 写轻量代码就非常方便,再加上 SageMaker 自己提供的大量精炼 API,它们之间的配合特别融洽。对于那些费时费力的底层资源管理繁杂过程,交给 SageMaker API 就行了,剩下的只要在 Notebook 写下算法逻辑,这才是[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)开发者最高效的姿势。
![image.png](https://dev-media.amazoncloud.cn/d5609f1ae7c64859947be36a3182ea02_image.png "image.png")
点击 **Open Jupyter**,将自动弹出一个新的页面,加载完成后,出现我们熟悉的 **Jupyter Notebook** 界面。
![image.png](https://dev-media.amazoncloud.cn/37b6e4fa0a6b4710a1fdd41bdc6ffae7_image.png "image.png")
其中在 **SageMaker Examples** 页面下,在右侧 **New** 下拉菜单中,您可以选择创建的开发环境,此处我们选择 **conda_python3** 以进行后面的内容。
![image.png](https://dev-media.amazoncloud.cn/4939160ad08c430e9dc3fd323514a1da_image.png "image.png")
## 3.创建存储桶用来存放本次实验数据
**猫狗数据集介绍:**
猫狗数据集包括**25000张训练图片,12500张测试图片**,包括猫和狗两种图片。在此次实验中为了训练方便,我们取了一个较小的数据集。 数据解压之后会有两个文件夹,一个是 **“train”**,一个是 **“test”**,顾名思义一个是用来训练的,另一个是作为检验正确性的数据。
![image.png](https://dev-media.amazoncloud.cn/e54854485c044867b482f632bd9e0f5d_image.png "image.png")
在`train`文件夹里边是一些已经命名好的图像,有猫也有狗。而在`test`文件夹中是只有编号名的图像。
![image.png](https://dev-media.amazoncloud.cn/c8bd59c51c6340ffabcb808d2b7fabc0_image.png "image.png")
**图片展示**
下面是数据集中的图片展示:
```js
class_names = ['cats', 'dogs']
plt.figure(figsize=(10, 10))
for images, labels in train_dataset.take(1):
for i in range(9):
ax = plt.subplot(3, 3, i + 1)
plt.imshow(images[i].numpy().astype("uint8"))
plt.title(class_names[labels[i]])
plt.axis("off")
```
**🌟🌟🌟 这里是输出的结果:✨✨✨**
![image.png](https://dev-media.amazoncloud.cn/0a35642f944e4148b3edd6b9451232d5_image.png "image.png")
# 二、下载数据集并将其进行数据预处理
数据集加载,数据是通过这个网站下载的猫狗数据集:http://aimaksen.bslience.cn/cats_and_dogs_filtered.zip?trk=cndc-detail ,实验中为了训练方便,我们取了一个较小的数据集。
```js
path_to_zip = tf.keras.utils.get_file(
'data.zip',
origin='http://aimaksen.bslience.cn/cats_and_dogs_filtered.zip',
extract=True,
)
PATH = os.path.join(os.path.dirname(path_to_zip), 'cats_and_dogs_filtered')
train_dir = os.path.join(PATH, 'train')
validation_dir = os.path.join(PATH, 'validation')
BATCH_SIZE = 32
IMG_SIZE = (160, 160)
```
## 数据集管理
使用 **image_dataset_from_director** 进行数据集管理。
```js
train_dataset = image_dataset_from_directory(train_dir,
shuffle=True,
batch_size=BATCH_SIZE,
image_size=IMG_SIZE)
validation_dataset = image_dataset_from_directory(validation_dir,
shuffle=True,
batch_size=BATCH_SIZE,
image_size=IMG_SIZE)
```
## 加载预训练模型
```js
val_batches = tf.data.experimental.cardinality(validation_dataset)
test_dataset = validation_dataset.take(val_batches // 5)
validation_dataset = validation_dataset.skip(val_batches // 5)
```
# 三、构建、训练和部署您的模型。
在Jupyter Notebook中使用SageMaker Python SDK来构建、训练和部署模型。
## 1.Stable Diffusion 模型介绍
在此次训练中,我们用到了亚马逊用于预测产品的需求和销售趋势的一种模型—**Stable Diffusion 模型。**
它基于随机漫步和稳定性假设,能够描述价格波动的实际情况。该模型认为价格变化由两个部分组成:一个稳定的长期趋势和一个随机的短期波动。
该模型有四个主要参数:稳定指数`alpha`、漂移参数`beta`、标准差`sigma`和时间间隔`delta`。其中 alpha 表示价格波动的稳定程度,越大则波动越不稳定;beta表示价格的长期趋势;sigma表示价格离散度或者说波动大小,越大则价格波动越大;delta 表示时间间隔。
**总体体验下来,该模型给我以下的感觉:**
1. **可以处理缺失值:** Stable Diffusion 模型可以有效地处理数据中的缺失值,这使其在面对现实中的不完整数据时更加可靠。
2. **考虑市场饱和度:** 该模型能够考虑市场饱和度对产品需求的影响,从而预测产品在市场上的销售情况。
3. **能够灵活应用:** 该模型十分灵活,可以根据不同类型的产品和市场需求进行调整和改进,因此适用范围广泛。
Stable Diffusion 模型在预测产品销售趋势方面具有较高的准确度和可靠性,**是亚马逊在产品销售策略制定中的重要工具之一。**
## 2.训练
做[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)的朋友应该都了解,ML 中的数据预处理是最麻烦的,而在 IDE 处理数据需要特别好用的可视化,从而给我们关于数据最直观的理解。与此同时,手动调参也需要特别好的可视化,来帮助我们**对比不同算法和超参训练出来的模型效果。**
而 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 正好可以为我们提供很好的可视化效果,为我们的训练以及调参带俩极大的便利。作为一个完全托管的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)平台,SageMaker 把软件技能抽象化,能让我们通过一组直观并且易于使用的工具,就能构建、训练想要的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)模型。
```js
inital_input = tf.keras.applications.mobilenet_v2.preprocess_input
```
```js
IMG_SHAPE = IMG_SIZE + (3,)
base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
include_top=False,
weights='imagenet')
```
```js
base_model.trainable = False
base_model.summary()
```
🌟🌟🌟 这里是输出的结果:✨✨✨
![image.png](https://dev-media.amazoncloud.cn/b994deb1ad9b4ca2ba71a9083cc8dee1_image.png "image.png")
## 3.训练结果可视化
用图表显示准确率和损失函数
```js
# 训练结果可视化,用图表显示准确率和损失函数
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs_range=range(initial_epochs)
plt.figure(figsize=(8,8))
plt.subplot(2,1,1)
plt.plot(epochs_range, acc, label="Training Accuracy")
plt.plot(epochs_range, val_acc,label="Validation Accuracy")
plt.legend()
plt.title("Training and Validation Accuracy")
plt.subplot(2,1,2)
plt.plot(epochs_range, loss, label="Training Loss")
plt.plot(epochs_range, val_loss,label="Validation Loss")
plt.legend()
plt.title("Training and Validation Loss")
plt.show()
```
🌟🌟🌟 这里是输出的结果:✨✨✨\
![image.png](https://dev-media.amazoncloud.cn/d146bd3789bf4d39a0f75add8e0298cf_image.png "image.png")
托管与实时推断现在我们的模型已经完成了训练,并可用于进行实际预测!利用之前提到的代码,这里创建并启动一个端点。
```js
predictor = m.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge')
```
而后运行以下命令调用该端点: **predictor.predict(img_input)!**
就这么简单,只需要不足100行代码,我们的端到端[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)流程即构建完成。
# 四、 运行文件,查看模型的训练和评估结果
Amazon Tensorflow optimization 通过其庞大的256 GPU,可以提高最多90%的扩展性。这样,在很短的时间内,我们就可以体验到精确、复杂的训练模型。而且,Amazon Sagemaker 附带的 Managed Spot Training,还可以降低培训成本的90%。因为在本地总会因为配置问题使的运行速度非常缓慢甚至中途报废,所以说对运行的结果以及速度我还是非常期待的。
## 1.输出训练的准确率
```js
# 输出训练的准确率
test_loss, test_accuracy = model.evaluate(test_dataset)
print('test accuracy: {:.2f}'.format(test_accuracy))
```
🌟🌟🌟 这里是输出的结果:✨✨✨
![image.png](https://dev-media.amazoncloud.cn/2bd95581ec1c4da888eccd96a74a59ad_image.png "image.png")
然后我们借用 cnn 工具可视化一批数据的预测结果
```js
label_dict = {
0: 'cat',
1: 'dog'
}
test_image_batch, test_label_batch = test_dataset.as_numpy_iterator().next()
# 编码成uint8 以图片形式输出
test_image_batch = test_image_batch.astype('uint8')
cnn_utils.plot_predictions(model, test_image_batch, test_label_batch, label_dict, 32, 5, 5)
```
🌟🌟🌟 **这里是输出的结果:** ✨✨✨
![image.png](https://dev-media.amazoncloud.cn/aa5ba4f0bbc849e58b84297898ef6c47_image.png "image.png")
## 2.数据输出
```js
# 数据输出,数字化特征图
test_image_batch, test_label_batch = train_dataset.as_numpy_iterator().next()
img_idx = 0
random_batch = np.random.permutation(np.arange(0,len(test_image_batch)))[:BATCH_SIZE]
image_activation = test_image_batch[random_batch[img_idx]:random_batch[img_idx]+1]
cnn_utils.get_activations(base_model, image_activation[0])
```
![image.png](https://dev-media.amazoncloud.cn/8024dbf655d140a5956d895150812e08_image.png "image.png")
[Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 在数据导入,输出方面具有明显优势,易用性方面国内部分厂商也同样优秀。同时对于 TensorFlow 和 PyTorch 的支持度都比较好。
## 3.图像结果输出
🌟🌟🌟 **这里是输出的结果**:✨✨✨
![image.png](https://dev-media.amazoncloud.cn/089e6b366ddf4797855ae8f3c220ecdf_image.png "image.png")
![image.png](https://dev-media.amazoncloud.cn/eef5d5385790469283561b3787deb303_image.png "image.png")
运行之后,我们发现计算结果准确性高达了`0.97`,可以说是准确度相当之高了,经过可视化之后输出的图像也是肉眼可见的准确!而且相比于在本地运行其简便性十分突出,这次技术体验比我想象的好太多,**技术体验耗时不到 10 分钟,解决了最头疼的配置和调优问题,简化了开发流程,提升了开发效率,可以快速帮助我们构建、训练和评估模型**。并且训练速度极快,0.1s内就可以将所有项目输出结果全盘脱出!
# 五、使用体验总结
[Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 的优势在于不必安装,也不需要手动扩展,只要保证网络畅通,有兼容的浏览器保证运行即可。它提供了一个完整的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)套件,其中包括 IDE,API,调试、监控工具等,可以在[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)建模的各个流程环节处理好关键事项。
![image.png](https://dev-media.amazoncloud.cn/dd984f03bac94eabbabf436949471b42_image.png "image.png")
相对于传统的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)开发,使用 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 可以带来以下几个方面的优势:
1. **快速构建和测试:** [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 提供了内置算法和模型模板,可以快速构建、训练和评估模型。此外,您还可以使用 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) Studio 和 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) Notebook Instance 进行交互式开发和调试。
2. **易于部署和扩展:** 使用 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail),您可以轻松地将训练好的模型部署到实时终端节点或批处理推理作业中。您还可以根据需要自动缩放模型推理容量。
3. **成本效益:** [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 提供了灵活的定价模型,使您的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)应用程序能够按需缩放,从而节约成本。
4. **安全性和合规性:** [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 采用多层安全措施来保护您的数据和模型。此外,[Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 还符合多种合规标准,如 HIPAA、PCI、SOC 1/2/3 等。
5. **强大的生态系统:** [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 集成了许多其他亚马逊云科技服务,例如 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail)、[Amazon Redshift](https://aws.amazon.com/cn/redshift/?trk=cndc-detail)、[Amazon Athena](https: //aws.amazon.com/cn/athena/?trk=cndc-detail) 等,让您的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)工作流程更加无缝。
6. **按使用量付费:** [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail)的付费方式是按使用量付费,您只需支付您使用的资源和服务,这使得使用[Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail)非常灵活和经济。
总之,[Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 为您提供了一个全面的、高度托管的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)平台, 可以使用大规模分布式计算集群,使得我们的模型训练速度更快,能够应对大规模数据和复杂模型训练,对于那些想要利用[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)技术但不想花费大量时间和资源来构建自己的环境的用户来说,是一个非常有价值的工具。而且 **SageMaker 提供了自动模型调优工具**,根据我们提供的数据和模型类型,自动找到最佳的超参数组合,从而提高模型的准确率,使得[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)建模变得更加简单和高效。
SageMaker 的强大不仅来自于亚马逊云科技多年积累的技术,也源于这家公司与众多使用者、合作伙伴共同建立起的生态。通过云上探索实验室,开发者可以学习实践云上技术,同时将自己的技术心得分享给其他开发者小伙伴。一同创造分享,互助启发,玩转云上技术。云上探索实验室不仅是体验的空间,更是分享的平台!
**欢迎大家一起参与云上探索实验室**,用技术实验、产品体验、案例应用等方式,亲身感受最新、最热门的亚马逊云科技开发者工具与服务。发挥您的想象和创造,以文章、视频、代码 Demo 等形式分享见解。
让我们一起分享,帮助更多开发者进行学习与开发,为技术实践提供更多的可能性:https://dev.amazoncloud.cn/experience?trk=cndc-detail
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
![image.png](https://dev-media.amazoncloud.cn/bc7168b699a040c59667e3d45c34437f_image.png "image.png")