Serverless架构下的AI应用开发:入门、实战与性能优化_刘宇;田初东;卢萌凯;王仁达_AZW3_MOBI_EPUB_PDF_电子书(无页码)_刘宇;田初东;卢萌凯;王仁达
内容节选
5.2.2猫狗识别项目训练 Kaggle是由联合创始人、首席执行官安东尼·高德布卢姆(Anthony Goldbloom)于2010年在墨尔本创立的,为开发商和数据科学家提供了举办机器学习竞赛、托管数据库、编写和分享代码的平台。 如图5-2所示,多年前,Kaggle平台上线了一个名为Dogs vs. Cats的比赛项目。时至今日,该项目成为人工智能学习过程中非常经典的案例之一。该项目使用的猫狗分类图像共25000张,猫、狗均有12500张。 如图5-3所示,可以发现猫狗的姿态不一,有的站着,有的眯着眼睛,有的和其他可识别物体比如桶、人混在一起。同时,图像尺寸也不一致。因此,数据预处理变得非常重要。 ▲图5-2 Kaggle上的猫狗识别项目 图5-3 猫狗识别案例的数据集预览 1.数据预处理 原数据的命名规则是“类别.编号.格式”,例如cat.73.jpg。为了便于数据的后期处理,我们可以将猫与狗的图像进行归类:import osimport shutilimport baseroot_path = base.SOURCE_ROOTtrain_path = base.SOURCE_ROOT + '/train'def copyFile(srcfile, dstfile): if os.path.isfile(srcfile): path, name = os.path.split(dstfile) # 分离文件名和路径 if not os.path.exists(path): os.makedirs(path) # 创建路径 shutil.copyfile(srcfile, dstfile) # 复制文件 print("copy %s -> %s" % (srcfile, dstfile)) for root, dirs, files in os.walk(train_path, True, None, False): # 遍历目录 for f in files: if os.path.isfile(os.path.join(root, f)): lable, label_id = os.path.splitext(f)[0].split('.') base_path = './strengthen' if int(label_id) > 5000 else './train' img_path = os.path.join(root, f) target_path = base_path + ("/cat" if lable == 'cat' else "/dog") if not os.path.exists(target_path): os.makedirs(target_path) # 创建路径 copyFile(img_path, os.path.join(target_path, f)) 图5-4 猫狗识别案例项目数据集目录结构 由于猫和狗的图像数据均为12500份,而我们不仅要通过这些数据进行初始模型的训练,还要模拟测试后期进行模型的完善,所以在进行数据归类时,只把id小于5000的图像用于训练,id大于5000的图像用于后期的模型完善,结果如图5-4所示。 完成上述的简单归类之后,为了有效使用内存资源,我们使用tfrecord对图像进行存储:_float_feature = lambda value: tf.train.Feature(float_list=tf.train.Float-List(value=[value] if not isinstance(value, list) else value))_int_feature = lambda value: tf.train.Feature(int64_list=tf.train.Int64- List(value=[value] if not isinstance(value, list) else value))_bytes_feature = lambda value: tf.train.Feature(bytes_list=tf.train.Bytes-List(value=[value] if not isinstance(value, list) else value))getFolderName = lambda folder: sorted([x for x in os.listdir(folder) if os.path.isdir(os.path.join(folder, x))])get_file_name = lambda folder: [x for x in map(lambda x: os.path.join(folder,......
- 信息
- 作者简介
- 序一
- 序二
- 序三
- 序四
- 序五
- 前言
- 第1章 初识Serverless架构
- 1.1 Serverless架构的概念
- 1.2 Serverless架构的特点
- 1.2.1 优势与价值
- 1.2.2 面临的挑战
- 1.3 Serverless架构的应用场景
- 第2章 Serverless架构下的应用开发
- 2.1 Serverless架构下的应用开发流程
- 2.2 与ServerFul应用开发流程对比
- 2.3 传统Web框架部署与迁移
- 2.3.1 请求集成方案
- 2.3.2 其他方案
- 2.4 Serverless应用的开发和部署
- 2.4.1 如何开发、部署Serverless应用
- 2.4.2 如何对Serverless应用进行调试
- 2.4.3 通过开发者工具进行依赖安装和项目构建
- 2.4.4 Serverless架构与CI/CD工具的结合
- 2.5 Serverless应用的可观测性
- 第3章 机器学习入门
- 3.1 什么是人工智能
- 3.1.2 人工智能的发展
- 3.1.3 人工智能的典型应用场景
- 3.2 常用的机器学习算法
- 3.2.1 常见的监督学习算法
- 3.2.2 常见的无监督学习算法
- 3.2.3 其他常见的深度学习模型
- 第4章 主流机器学习框架与Serverless架构结合
- 4.1 scikit-learn与Serverless架构结合
- 4.1.2 scikit-learn实践:鸢尾花数据分类
- 4.1.3 与Serverless架构结合:文本分类
- 4.2 TensorFlow与Serverless架构结合
- 4.2.2 TensorFlow实践:基于人工智能的衣物区分
- 4.2.3 与Serverless架构结合:目标检测系统
- 4.3 PyTorch与Serverless架构结合
- 4.3.2 PyTorch实践:图像分类系统
- 4.3.3 与Serverless架构结合:对姓氏进行分类
- 4.4 PaddlePaddle与Serverless架构结合
- 4.4.2 PaddlePaddle实践:手写数字识别任务
- 4.4.3 与Serverless架构结合:PaddleOCR项目开发与部署
- 第5章 Serverless架构下的AI项目实战
- 5.1 Serverless架构下的AI应用
- 5.1.1 项目的开发与部署
- 5.1.2 冷启动优化
- 5.1.3 训练与推理性能优化
- 5.1.4 模型更新迭代方案
- 5.2 模型升级在Serverless架构下的实现与应用
- 5.2.2 猫狗识别项目训练
- 5.2.3 将模型部署到Serverless架构
- 5.2.4 用户反馈与模型迭代
- 5.2.5 项目总结
- 5.3 人脸识别在Serverless架构下的应用
- 5.3.2 人脸识别模型训练
- 5.3.3 人脸识别模型的应用
- 5.3.4 项目Serverless化
- 5.3.5 项目总结
- 5.4 文本情感分析在Serverless架构下的应用
- 5.4.2 情感分析模型的训练
- 5.4.3 部署到Serverless架构
- 5.4.4 项目Serverless化
- 5.4.5 项目总结
- 第6章 基于Serverless架构的智能问答系统
- 6.1 需求分析
- 6.2 整体设计
- 6.2.1 数据库设计
- 6.2.2 原型图设计
- 6.2.3 接口设计
- 6.2.4 架构设计
- 6.3 项目开发
- 6.3.1 项目初始化
- 6.3.2 数据库与表的建设
- 6.3.3 管理后台相关能力的配置
- 6.3.4 业务逻辑开发
- 6.4 项目部署与运维
- 6.5 项目预览
- 6.6 项目总结
- 第7章 基于Serverless架构的人工智能相册小程序
- 7.1 需求分析
- 7.2 整体设计
- 7.2.1 数据库设计
- 7.2.2 原型图设计
- 7.2.3 细节设计
- 7.2.4 架构设计
- 7.3 项目开发
- 7.3.2 小程序开发
- 7.3.3 服务端开发
- 7.3.4 管理系统开发
- 7.4 项目预览
- 7.5 经验积累
- 7.5.2 如何进行本地调试
- 第8章 Serverless应用的优化与注意事项
- 8.1 函数基础与资源编排
- 8.1.2 对无状态性的认识
- 8.1.3 资源评估的重要性
- 8.1.4 工作流的加持
- 8.2 警惕冷启动
- 8.2.1 云厂商侧的冷启动优化方案
- 8.2.2 开发者侧降低冷启动影响的方案
- 8.3 应用开发注意事项
- 8.3.1 如何上传文件
- 8.3.2 文件读写与持久化方法
- 8.3.3 慎用部分Web框架的特性
- 8.3.4 应用组成结构注意事项
- 8.3.5 如何实现WebSocket
- 8.3.6 善于利用平台特性