吴恩达深度学习复盘(14)迁移学习|项目基本周期

news2025/4/15 9:01:40

迁移学习

迁移学习是一种机器学习技术,它允许我们将从一个任务中学习到的知识应用到另一个相关的任务中。其核心思想在于,很多情况下,从头开始训练一个模型需要大量的数据和计算资源,而迁移学习能够复用在已有数据上训练好的模型的部分或全部,从而减少新任务的训练成本,加快模型收敛速度,提升模型在新任务上的性能,尤其是当新任务的数据量有限时,迁移学习的优势更为明显。

迁移学习的常见场景和方法

  • 特征提取:使用预训练模型作为特征提取器,去除原模型的最后几层(通常是全连接层),保留前面的卷积层或特征提取层。将新数据输入到这些层中,提取特征,然后将这些特征输入到一个新的简单模型(如全连接层)中进行训练。
  • 微调:在特征提取的基础上,不仅使用预训练模型的特征,还对预训练模型的部分或全部参数进行微调。通常会冻结预训练模型的前几层(因为这些层学习到的是通用特征),只对后面的几层进行训练。
  • 多任务学习:同时在多个相关任务上训练模型,使得模型能够学习到不同任务之间的共同特征和模式。

简单代码示例

下面是一个使用 Python 和 Keras 库进行迁移学习的简单例子,使用预训练的 VGG16 模型(也可以从hf上找一个其它模型代替)对猫狗图像进行分类。

import os
import numpy as np
from tensorflow.keras.applications.vgg16 import VGG16
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam

# 数据路径
train_data_dir = 'path/to/train_data'
validation_data_dir = 'path/to/validation_data'

# 图像尺寸
img_width, img_height = 224, 224
batch_size = 32
epochs = 10

# 加载预训练的VGG16模型,不包含顶部的全连接层
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(img_width, img_height, 3))

# 冻结预训练模型的所有层
for layer in base_model.layers:
    layer.trainable = False

# 添加自定义层
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(128, activation='relu')(x)
predictions = Dense(1, activation='sigmoid')(x)

# 构建新的模型
model = Model(inputs=base_model.input, outputs=predictions)

# 编译模型
model.compile(optimizer=Adam(lr=0.001), loss='binary_crossentropy', metrics=['accuracy'])

# 数据增强
train_datagen = ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1. / 255)

# 加载训练数据和验证数据
train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='binary')

# 训练模型
model.fit(
    train_generator,
    steps_per_epoch=train_generator.samples // batch_size,
    epochs=epochs,
    validation_data=validation_generator,
    validation_steps=validation_generator.samples // batch_size)
    

项目周期

到目前为止,已经讨论了很多关于如何训练模型以及如何为机器学习应用程序处理数据的问题。但在构建机器学习系统时,训练模型只是其中一部分。这一小节会总结机器学习项目的完整周期。

项目执行步骤

  • 项目范围界定:机器学习项目的第一步是确定项目内容,即决定要做什么。例如,决定研究用于语音搜索的语音识别,也就是通过对手机说话进行网络搜索,而非打字。
  • 数据收集:确定项目后,要决定需要哪些数据来训练机器学习系统,并着手获取音频数据以及相应标签的文本,这就是数据收集过程。
  • 模型训练与分析:收集初始数据后,开始训练模型,如训练语音识别系统并进行相关分析以改进模型。在训练模型并进行分析后,常常会发现可能需要返回去收集更多数据,可能是更多所有类型的数据,也可能是特定类型的数据,以提高学习算法的性能。比如,曾发现语音系统在有汽车噪音的背景下表现不佳,于是决定通过数据增强获取更多类似有车背景噪音的语音数据来提升算法性能。
  • 多次循环与部署:需要多次重复训练模型、进行分析以及收集更多数据这个循环过程,直到认为模型足够好,可以部署到生产环境中供用户使用。
  • 系统部署与维护:部署系统后,要持续监控系统性能,当性能变差时进行维护以恢复性能。有时部署后会发现模型效果不如预期,就需要回去重新训练模型或获取更多数据。而且,如果有权使用生产部署中的数据,这些数据可能会为进一步改进系统提供更多资源,有助于持续提高系统性能。

模型部署的

  • 以语音识别模型为例,常见的部署方式是将机器学习模型实现在服务器(推理服务器)上,其作用是调用训练好的模型进行预测。
  • 如果团队实现了一个移动应用程序,当用户与移动应用程序交谈时,移动应用程序可以通过 API 调用将录制的音频片段传递给推理服务器,推理服务器再将模型的预测结果,返回给移动应用程序。
  • 这种实现方式需要一定的软件工程来编写相关代码,根据应用程序服务用户数量的不同(从少数用户到数百万用户),所需的软件工作量和资源也会有很大差异。为大量用户服务可能需要使用特定技术来优化,管理计算成本和确保服务器可靠、高效地进行预测,同时通常需要记录输入数据 X 和预测结果,在用户隐私和同意的前提下,这些数据对系统监控非常有用。例如,曾建立的语音识别系统在遇到新名人或新政治家名字不在训练集里时表现不佳,通过监控系统发现数据变化和模型准确性下降,从而能够重新训练模型并进行更新。

笔者注:这篇其实讲的是机器学习的一个领域,叫做 MLOps,它涉及如何系统地构建、部署和维护机器学习系统,以确保模型可靠、性能良好、受到监控,并能适时进行更新以保持良好运行。当系统要部署给数百万人时,需要确保实现高度优化,以降低服务成本。软件要部署,归根到底还是必须考虑成本问题,这种优化是无止尽的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2334398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【STM32】STemWin库,使用template API

目录 CubeMX配置 工程文件配置 Keil配置 STemwin配置 GUIConf.c LCDConf.c 打点函数 修改屏幕分辨率 GUI_X.c 主函数 添加区域填充函数 移植过程中需要一些参考手册,如下 STemwin使用指南 emWin User Guide & Reference Manual CubeMX配置 参考驱…

Matlab Add Legend To Graph-图例添加到图

Add Legeng To Graph: Matlab的legend()函数-图例添加到图 将图例添加到图 ,图例是标记绘制在图上的数据序列的有用方法。 下列示例说明如何创建图例并进行一些常见修改,例如更改位置、设置字体大小以及添加标题。您还可以创建具有多列的图…

2025年七星棋牌跨平台完整源码解析(200+地方子游戏+APP+H5+小程序支持,附服务器镜像导入思路)

目前市面上成熟的棋牌游戏源码很多,但能做到平台全覆盖、地方玩法丰富、交付方式标准化的系统却不多。今天这套七星棋牌2023完整源码具备安卓/iOS/H5/微信小程序端四端互通能力,附带200多款地方子游戏,还配备了后台管理与自动热更系统&#x…

Go语言--语法基础4--基本数据类型--整数类型

整型是所有编程语言里最基础的数据类型。 Go 语言支持如下所示的这些整型类型。 需要注意的是, int 和 int32 在 Go 语言里被认为是两种不同的类型,编译器也不会帮你自动做类型转换, 比如以下的例子会有编译错误: var value2 in…

智慧乡村数字化农业全产业链服务平台建设方案PPT(99页)

1. 农业全产业链概念 农业全产业链是依托数字化、电子商务、云计算等技术,整合规划咨询、应用软件设计与开发等服务,推动农业产业升级和价值重塑,构建IT产业融合新生态。 2. 产业链技术支撑 利用云计算、大数据、区块链等技术,为…

信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(二)

个人笔记整理---仅供参考 第二章信息技术发展 2.1信息技术及其发展 2.1.1计算机软硬件 2.1.2计算机网络 2.1.3存储和数据库 2.1.4信息安全 公钥公开,私钥保密 2.1.5信息技术的发展 2.2新一代信息技术及应用 2.2.1物联网 2.2.2云计算 2.2.3大数据 2.2.4区块链 2.2.5…

基于Springboot+Mysql的闲一品(含LW+PPT+源码+系统演示视频+安装说明)

系统功能 管理员功能:首页、个人中心、用户管理、零食分类管理、零食信息管理、订单评价管理、系统管理、订单管理。用户功能:首页、个人中心、订单评价管理、我的收藏管理、订单管理。前台首页功能:首页、零食信息、零食资讯、个人中心、后…

stm32week11

stm32学习 八.stm32基础 2.stm32内核和芯片 F1系统架构:4个主动单元和4个被动单元 AHB是内核高性能总线,APB是外围总线 总线矩阵将总线和各个主动被动单元连到一起 ICode总线直接连接Flash接口,不需要经过总线矩阵 AHB:72MHz&am…

从三次方程到复平面:复数概念的奇妙演进(二)

注:本文为 “复数 | 历史 / 演进” 相关文章合辑。 因 csdn 篇幅限制分篇连载,此为第二篇。 生料,不同的文章不同的点。 机翻,未校。 History of Complex Numbers 复数的历史 The problem of complex numbers dates back to …

基于视觉语言模型的机器人实时探索系统!ClipRover:移动机器人零样本视觉语言探索和目标发现

作者:Yuxuan Zhang 1 ^{1} 1, Adnan Abdullah 2 ^{2} 2, Sanjeev J. Koppal 3 ^{3} 3, and Md Jahidul Islam 4 ^{4} 4单位: 2 , 4 ^{2,4} 2,4佛罗里达大学电气与计算机工程系RoboPI实验室, 1 , 3 ^{1,3} 1,3佛罗里达大学电气与计算机工程系F…

LabVIEW往复式压缩机管路故障诊断系统

往复式压缩机作为工业领域的关键设备,广泛应用于石油化工、能源等行业,承担着气体压缩的重要任务。然而,其管路故障频发,不仅降低设备性能、造成能源浪费,还可能引发严重安全事故。因此,开发精准高效的管路…

springboot 项目 jmeter简单测试流程

测试内容为 主机地址随机数 package com.hainiu.example;import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotat…

算法思想之位运算(二)

欢迎拜访:雾里看山-CSDN博客 本篇主题:算法思想之位运算(二) 发布时间:2025.4.13 隶属专栏:算法 目录 滑动窗口算法介绍六大基础位运算符常用模板总结 例题判定字符是否唯一题目链接题目描述算法思路代码实现 汉明距离题目链接题目…

【计网】网络交换技术之报文交换(复习自用,了解,重要3)

复习自用的,处理得比较草率,复习的同学或者想看基础的同学可以看看,大佬的话可以不用浪费时间在我的水文上了 另外两种交换技术可以直接点击链接访问相关笔记: 电路交换 分组交换 一、报文交换的定义 报文交换(Me…

【动态规划】深入动态规划:背包问题

文章目录 前言01背包例题一、01背包二、分割等和子集三、目标和四、最后一块石头的重量|| 完全背包例题一、完全背包二、 零钱兑换三、零钱兑换||四、完全平方数 前言 什么是背包问题,怎么解决算法中的背包问题呢? 背包问题 (Knapsack problem) 是⼀种组…

BUUCTF-web刷题篇(25)

34.the mystery of ip 给出链接,输入得到首页: 有三个按钮,flag点击后发现页面窃取客户端的IP地址,通过给出的github代码中的php文件发现可以通过XFF或Client-IP传入值。使用hackbar或BP 使用XSS,通过github给出的目录…

StringBuilder类基本使用

文章目录 1. 基本介绍2. StringBuilder常用方法3. String、StringBuffer 和 StringBuilder 的比较4. String、StringBuffer 和 StringBuilder 的效率测试5. String、StringBuffer 和 StringBuilder 的选择 1. 基本介绍 一个可变的字符序列。此类提供一个与StringBuffer兼容的A…

设计模式 --- 访问者模式

访问者模式是一种行为设计模式,它允许在不改变对象结构的前提下,定义作用于这些对象元素的新操作。 优点: 1.​​符合开闭原则:新增操作只需添加新的访问者类,无需修改现有对象结构。 ​​2.操作逻辑集中管理​​&am…

HashTable,HashMap,ConcurrentHashMap之间的区别

文章目录 线程安全方面性能方面总结 线程安全方面 HashMap线程不安全,HashMap的方法没有进行同步,多个线程同时访问HashMap,并至少有一个线程修改了其内容,则必须手动同步。 HashTable是线程安全的,在HashMap的基础上…

LeetCode.225. 用队列实现栈

用队列实现栈 题目解题思路1. push2. pop3. empty CodeQueue.hQueue.cStack.c 题目 225. 用队列实现栈 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现…