第一天:Python元学习——通用人工智能的实现

news/2024/11/30 5:38:20/

文章目录

  • 0 封面
  • 1 第一章:元学习简介
    • 1.1 元学习与少样本学习
    • 1.2 元学习的类型——学习度量空间
    • 1.3 学习初始化
    • 1.4 学习优化器
    • 1.5 通过梯度下降来学习如何通过梯度下降来学习
  • 2 第二章:使用孪生网络进行人脸识别与音频视频
    • 2.1 什么是孪生神经网络
      • 孪生神经网络的架构图
      • 2.1.1 孪生网络的架构
    • 2.2 使用孪生网络进行人脸识别
      • 数据集建立
      • 构建孪生网络
        • 首先定义基网络:用于提取特征的卷积网络
        • 其次定义能量函数,计算距离
        • 选择优化函数,并定义模型
        • 选择损失函数,并编译模型
        • 定义一个函数来计算准确率
    • 2.3 使用孪生网络进行音频识别
      • 构建基网络
      • 使用欧式距离作为能量函数
      • 确定优化函数
      • 确定损失函数

学习前两章内容,主要是围绕孪生网络展开

0 封面

在这里插入图片描述

1 第一章:元学习简介

在这里插入图片描述

  1. 随着生成对抗网络和胶囊网络等优秀算法的出现,深度学习得到了快速的发展。
  2. 但是使用深度学习网络解决A任务时,假设A任务和B任务接近,但是深度神经网络也是要从头开始训练B任务的。
  3. 元学习的目的是:“让机器学会学习”。也就是对于一个新任务,元学习模型可以利用之前从相关任务中获得的知识,也就是说无需从零开始训练。

1.1 元学习与少样本学习

在这里插入图片描述

  1. 少样本学习(few-shot learning)或k 样本学习(k-shot learning)指的是利用较少的数据点进行学习,其中k 表示数据集各个类别中数据点的数量。
  2. 单样本学习:一张猫,一张狗
  3. 10样本学习:十张猫,十张狗

1.2 元学习的类型——学习度量空间

  1. 在基于度量的元学习场景中,学习合适的度量空间。
  2. 基于度量的场景中,使用一个简单的神经网络从两幅图像中提取特征(第一步),并通过计算两幅图像特征之间的距离找到相似性。
  3. 这种方法被广泛应用于数据点较少的少样本学习中。

1.3 学习初始化

  • 一般的:我们首先初始化随机权重,计算损失,并通过梯度下降来最小化损失。因此,我们将通过梯度下降找到最优权重,使损失最小。
  • 元学习:不随机初试化权重,而是使用最优值或者接近最优质的值来初试化权重,那么就可以更快的收敛,并快速学习。

1.4 学习优化器

  • 一般如何优化神经网络呢?——通过基于大数据集的训练来优化升级网络,并使用梯度下降来最小化损失。
  • 在少样本的学习场景中:梯度下降失效了,由于数据集小。所以我们学习优化器本身。

A:试图学习的基网络
B:优化基网络的元网络

1.5 通过梯度下降来学习如何通过梯度下降来学习

  1. 基础知识:元学习是让机器学会学习。
  2. 一般的,我们都是通过梯度下降来计算损失和最小化损失,以训练神经网络。所以是使用梯度下降来优化模型。
  3. 在元学习中,梯度下降失效了,我们能自动学习这个过程吗?

用递归神经网络(RNN)来代替传统的梯度下降优化器。

中心思想:用RNN 代替梯度下降法。
那么如何优化RNN呢?——用梯度下降法。

也就是说,元学习模型用RNN来优化模型,其中RNN的优化需要依靠梯度下降法。
也就解释了通过梯度下降(训练RNN)来学习如何通过梯度下降来学习

称RNN为优化器,基网络为优化对象。


2 第二章:使用孪生网络进行人脸识别与音频视频

在这里插入图片描述

孪生神经网络:基于度量的单样本学习算法,如何从很少数据点中学习,以及如何来解决低数据问题。

2.1 什么是孪生神经网络

  1. 孪生神经网络主要用于各类别数据点较少的应用中。

  2. 孪生神经网络大致上由两个对称的神经网络组成,它们具有相同的权重和架构,最后由能量函数 EEE 连接在一起。

  3. 孪生神经网络的目标是——了解两个输入值是否相似。

孪生神经网络的架构图

  • 网络A 和网络B 具有相同的权重和架构,作用是为输入数据生成嵌入(embedding),即特征向量(feature vector)。因此可以使用任意产生嵌入的网络。【也就是说要提取特征】

  • 能量函数会输出这两个输入的相似程度,可以使用任意相似性度量,如欧式距离或余弦相似度。

在这里插入图片描述

总的来说,孪生网络不仅用于人脸识别,还 广泛用于数据点较少的应用以及需要学习两个输入之间相似性的任务中。

2.1.1 孪生网络的架构

在这里插入图片描述

从上图可以看出,能量函数选择的是欧式距离

欧式距离对应l2范数。
在这里插入图片描述

如何训练孪生神经网络呢?
数据如何组织呢?
特征和标签是什么呢?
我们的目标函数是什么呢?

在这里插入图片描述
在这里插入图片描述

我们的损失函数是什么呢?
由于孪生网络的目标不是执行分类任务,而是理解两个输入值之间的相似性,因此我们使用了对比损失函数。

在这里插入图片描述

2.2 使用孪生网络进行人脸识别

孪生网络的目的是了解两张脸相似与否。

数据集建立

数据格式:输入值成对,并且带有标签

在这里插入图片描述


有了成对的数据以及标签,就可以训练孪生网络了。

  • 第一步:我们将图像对中的一个图像输入网络A,另一个图像输人网络B。这两个网络的作用只是提取特征向量。

  • 第二步:我们使用带有整流线性单元 ( rectified linear unit, ReLU ) 激活函数的两个卷积层提取特征。

  • 第三步:把两个网络输出的特征向量输入能量函数,用于测量相似度(用欧氏距离作为能量函数)。

因此,我们通过输入图像对来训练网络,以学习它们之间的语义相似度。

在这里插入图片描述

至此,训练集和测试集已经成功生成。

构建孪生网络

首先定义基网络:用于提取特征的卷积网络

我们建立两个均带有ReLU 激活函数和最大池化(max pooling)的卷积层与一个扁平化层(flat layer):

def build_base_network(input_shape):seq = Sequential()  # 线性层nb_filter = [6, 12]kernel_size = 3#卷积层1seq.add(Convolution2D(nb_filter[0], kernel_size, kernel_size,input_shape=input_shape,border_mode='valid', dim_ordering='th'))  # 2维卷积,过滤器是6*3*3seq.add(Activation('relu'))  # relu激活seq.add(MaxPooling2D(pool_size=(2, 2)))  # 最大池化seq.add(Dropout(.25)) # dropout层#卷积层2seq.add(Convolution2D(nb_filter[1], kernel_size,kernel_size,border_mode='valid', dim_ordering='th'))  # 2维卷积,过滤器是12*3*3seq.add(Activation('relu'))seq.add(MaxPooling2D(pool_size=(2, 2),dim_ordering='th'))seq.add(Dropout(.25))#扁平化层seq.add(Flatten())seq.add(Dense(128, activation='relu'))seq.add(Dropout(0.1))seq.add(Dense(50, activation='relu'))return seq

把图像输入基网络,基网络返回嵌入,即特征向量。

其次定义能量函数,计算距离

这里选取欧式距离作为能量函数:

def euclidean_distance(vects):x, y = vectsreturn K.sqrt(K.sum(K.square(x - y), axis=1, keepdims=True))

选择优化函数,并定义模型

epochs = 13
rms = RMSprop()
model = Model(input=[input_a, input_b], output=distance)

选择损失函数,并编译模型

def contrastive_loss(y_true, y_pred):margin = 1return K.mean(y_true * K.square(y_pred) + (1 - y_true) *  K.square(K.maximum(margin - y_pred, 0)))model.compile(loss=contrastive_loss, optimizer=rms)

在这里插入图片描述

定义一个函数来计算准确率

def compute_accuracy(predictions, labels):return labels[predictions.ravel() < 0.5].mean()

2.3 使用孪生网络进行音频识别

在这里插入图片描述
在这里插入图片描述

那么如何将这些原始音频输入网络中呢?
如何从原始音频中提取有意义的特征呢?

众所周知,神经网络只接受向量化的输入,因此需要将音频转换为数组输入,再转化为特征向量。

在这里插入图片描述
然后就是打标签的过程了,省略。

注意:由于不同音频的音频嵌入长度各不相同,假设最大程度为400,小于400则使用0来填充。

构建基网络

使用3个dense层,中间有一个dropout层。

def build_base_network(input_shape):input = Input(shape=input_shape)x = Flatten()(input)x = Dense(128, activation='relu')(x)x = Dropout(0.1)(x)x = Dense(128, activation='relu')(x)x = Dropout(0.1)(x)x = Dense(128, activation='relu')(x)return Model(input, x)

使用欧式距离作为能量函数

def euclidean_distance(vects):x, y = vectsreturn K.sqrt(K.sum(K.square(x - y), axis=1, keepdims=True))

确定优化函数

epochs = 13
rms = RMSprop()
model = Model(input=[audio_a, audio_b], output=distance)

确定损失函数

def contrastive_loss(y_true, y_pred):margin = 1return K.mean(y_true * K.square(y_pred) + (1 - y_true) * K.square(K.maximum(margin - y_pred, 0)))model.compile(loss=contrastive_loss, optimizer=rms)

http://www.ppmy.cn/news/866.html

相关文章

云小课|基于华为云WAF的日志运维分析,构筑设备安全的城墙

阅识风云是华为云信息大咖&#xff0c;擅长将复杂信息多元化呈现&#xff0c;其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。 摘要&#xff1a;云日志服务用于收集来自主机和云服务的日志数据&#x…

五、【React-Router6】路由表 useRoutes() + Outlet

文章目录1、useRoutes() 介绍2、简单 CODING2.1、项目结构2.2、routes.js2.3、App.js2.4、Result3、嵌套 Outlet CODING3.1、项目结构3.2、routes.js3.3、Home.js3.4、App.js3.5、Result1、useRoutes() 介绍 原来写的路由管理如下 <Routes><Route path/about elemen…

设备发现:通向全面网络可见性的途径

想实现企业网络安全防护&#xff0c;它首先需要完全了解其网络中发生的所有事件。有了这种可见性&#xff0c;企业网络安全管理员可以分析用户在网络环境中进行了哪些危险的操作&#xff0c;并采取必要的应对措施来主动保护企业网络免受攻击。 日志取证 但是&#xff0c;如果攻…

C#教务管理大数据平台系统源码

校务管理系统是专门针对幼儿园、培训学校的业务应用而设计研发的一款行业应用软件。校管家校务管理系统融入先进的协同管理理念&#xff0c;运用领先的信息化、网络化处理技术&#xff0c;结合丰富的教育培训行业经验&#xff0c;切实有效的解决幼儿园、培训学校日常工作中的关…

基于x86架构的CentOS7虚拟机通过qemu安装ARM架构OpenEuler虚拟机

【原文链接】基于x86架构的CentOS7虚拟机通过qemu安装ARM架构OpenEuler虚拟机 &#xff08;1&#xff09;首先需要有一台CentOS虚拟机&#xff0c;如没有可参考 VMWare安装CentOS7操作系统的虚拟机 安装一台CentOS虚拟机 &#xff08;2&#xff09;安装基础命令 yum install…

嵌入式复习题

最后一次考试了 小海螺预祝大家都能过&#xff01; 简答题&#xff08;7题考4题&#xff09; 嵌入式系统的开发流程 系统需求分析体系结构设计硬件/软件协同设计系统集成完成测试并形成产品 中断处理的6个步骤 禁止其他中断保存上下文中断处理程序中断服务程序恢复上下文允许…

单视频播放量超20万的公开课配套教材,猫书来了~

吹爆、强推、比刷剧还爽、一生推、传疯了&#xff01; 很难想象&#xff0c;网友们会用这些词来形容一个纯分享深度强化学习基础知识的视频课。 在 B 站上搜索 “深度强化学习”&#xff0c;在排名 TOP 10 的相关课程中&#xff0c;有 4 个是王树森老师的 Reinforcement Learni…

计算机视觉之目标检测训练数据集(皮卡丘)《2》

在做目标检测&#xff0c;训练数据集的时候&#xff0c;可以先看前段时间的一篇基础文章&#xff1a;计算机视觉之目标检测(object detection)《1》https://blog.csdn.net/weixin_41896770/article/details/128062645先熟悉一些基本知识&#xff0c;如&#xff1a;锚框&#xf…