吴恩达《深度学习》第四门课(4)特殊应用:人脸识别和神经风格迁移

4.1什么是人脸识别

(1)人脸验证(face verification):1对1,输入一个照片或者名字或者ID,然后判断这个人是否是本人。

(2)人脸识别(face recognition):1对多,判断这个人是否是系统中的某一个人。

4.2One-shot学习

(1)比如一个公司的员工,一般每个人只给一张工作照(如4个人),这时网络输出五个单元,分别代表他们以及都不是。这样设计会有两个明显的问题:第一是每个人只给了一张照片,训练样本太少;第二是如果这时候又来了一个员工,那么网络的输出得重新调整,显然不合理。

(2)实际使用的方法,是训练一个差异度函数(degree of difference between images)的网络,给网络输入两张照片,如果是同一个人则输出很小的值(差异很小),如果不是同一个人则输出很大的值,这时只要将来的人与系统中的照片逐一比较即可。同时如果来了新员工,也只需要将他的照片放入到系统中就可以了。

4.3Siamese网络

(1)Siamese的输出不经过softmax激活函数做分类,直接就是输出一个向量,相当于把每个人映射成一个向量,然后判断两张图片是否是同一个人时只需要,分别输入这同一个网络,然后求输出向量的范数,如下所示:

4.4Triplet损失

(1)首先训练集中必须有相同人的照片(网络应用的时候没这个要求),三张照片为一组(分别叫做Anchor,Positive,Negative),如下图所示:

(2)损失函数如下,将两张相同的图片的距离比两张不同图片的距离的差值(注意此处差值已经是一个负值了)小于某个阈值时,其误差视为0:

4.5面部验证与二分类

(1)可以用二分类的思想来训练上面的Siamese网络,同样是用同一个网络,输出两张照片的向量,这时候在后面将向量对应元素做差的绝对值作为一个特征,再创建一层逻辑回归即可,输出0、1,如下等式所示:

(2)用这种方法训练网络,每次是使用两张照片,而不是三张照片了。

(3)不管是上面提到的两种训练方式的哪一种,当在应用网络的时候,不需要在系统中存储大量的照片,可以提前把照片输入网络计算出来的向量存在系统中即可,这样在实际应用时就非常的快乐。

4.6什么是神经风格转换

(1)下面就是一个风格转换的例子,左边是内容图(C),右边是风格图(S),下面是生成图(G)

4.7什么是深度卷积网络

(1)浅层检测到简单的一些边缘,越到后面,图形越来越复杂。

4.8代价函数

(1)相似度越好,代价函数越小,所以就是最小化下面的代价函数,包括内容相似度和风格相似度,(α,β是调节两者的权重,其实一个就够了):

(2)生成图G一开始就是随机初始化,下面是生成图随着最小化代价函数的变化过程(其中1是内容图,2是风格图):

4.9内容代价函数

(1)用隐含层l来计算内容代价,如果l是一个很小的数,比如说隐含层1,这个代价函数就会使你的生成图片像素上非常接近你的内容图片。如果你用非常深的层,那么如果内容图上有狗,那么它就会确保生成图片里面有一只狗。所以在实际中,这个l既不会选择太浅也不会选择太深。用预训练的VGG网络模型。取中间的l层,这时将内容图与生成图分别输入到VGG中得到第l层的激活值,然后求其相似度,就是按元素对应相减:

4.10风格代价函数

(1)需要着重理解:一个通道是由一个卷积核卷积生成的,假如这个卷积核擅长识别垂直的线段,那么这个通道将会有很多垂直线段,另一个通道的卷积核擅长识别橙色,那么这个通道可能就表现出许多橙色,如下图所示:

(2)那么什么是通道间的相关性呢?如果一个通道出现垂直线的地方,更容易出现橙色,即二者同时出现或者不出现的概率大那么二者就相关了。

(3)说两张图的风格相似,可以看成两张图各自不同通道之间的相关性是相同的,那么这两张图就风格相同(或者类似)。

(4)以下是一种不是很标准(之所以说不标准是因为没有减去各自的均值再相乘)的求相关系数的方法,即两个通道间对应元素相乘,然后求和,最后结果越大说明越相关:

(5)最后只要把风格图和生成图在隐含层l层的各自的相关系数做差再求范数即可(前面的归一化可要可不要,因为还有超参数α、β):

(6)最后就形成了总的代价函数:

4.11一维到三维推广

(1)一维数据,如心电图,这时候的卷积核如下所示,一个14维与一个5维卷积核卷积形成一个10维输出:

(2)三维数据,如CT图,一个3D对象,如14*14*14(这里没有出现通道数,宽度和深度是后面两个),这时候5卷积核比如说5*5*5*1(假设输入照片是1通道的),这时候输出10*10*10*5。需要时刻记住的是卷积核的通道数一定要和输入的通道数相同。

原文地址:https://www.cnblogs.com/ys99/p/9332519.html

时间: 2024-08-20 09:05:11

吴恩达《深度学习》第四门课(4)特殊应用:人脸识别和神经风格迁移的相关文章

吴恩达深度学习课程第二课-改善深层神经网络

第一周 深度学习的实用层面 1.1 训练,配置,测试训练集 学习完如何构建神经网络,接下来学习如何高效运行神经网络 数据集划分: train,dev,test: 在train中训练模型,利用dev选择最佳模型,利用test测试最终模型 1.2 偏差Bias,方差Variance 欠拟合(高偏差),过拟合(高方差) 1.3 处理欠拟合,过拟合方案 1.4 正则化Regularization 原文地址:https://www.cnblogs.com/nrocky/p/12114269.html

吴恩达深度学习课程第一课 — 神经网络与深度学习 — 第一周练习

课程一 - 神经网络和深度学习 第一周 - 深度学习简介 第 1 题 “人工智能是新电力”这个比喻指的是什么? A.人工智能为我们的家庭和办公室的个人设备供电,类似于电力. B.通过“智能电网”,人工智能正在传递新一波的电力. C.人工智能在计算机上运行,因此由电力驱动,但它让计算机做以前不可能做的事情. D.与100年前开始的电力类似,人工智能正在改变多个行业. 第 2 题 以下哪些是最近深度学习开始崛起的原因?(选2个答案) A.我们拥有了更多的计算能力 B.神经网络是一个崭新的领域. C.

吴恩达深度学习:1.2什么是神经网络

写在开头的话,本博客内容全部来自吴恩达深度学习教学课程,插图均来自吴恩达课件,在此说明来处,不喜勿喷! 一.什么是神经网络 1.我们从一个房屋加个预测的例子开始,假设有一个6间房间的数据集,已知房屋的面积单位是平方米或者平方英尺,已知房屋加个,现在想要找到一个函数,根据房屋面积来预测房屋价格的函数.如果有机器学习的只是,可以用线性回归得到这样的一条直线: 但是我们知道,价格永远不可能为一个负值,所以用一个直线的线性回归进行预测不太合适,我们可以在size轴将预测线弯曲一点,让他结束于0,我们所要

吴恩达-深度学习-课程笔记-6: 深度学习的实用层面( Week 1 )

1 训练/验证/测试集( Train/Dev/test sets ) 构建神经网络的时候有些参数需要选择,比如层数,单元数,学习率,激活函数.这些参数可以通过在验证集上的表现好坏来进行选择. 前几年机器学习普遍的做法: 把数据分成60%训练集,20%验证集,20%测试集.如果有指明的测试集,那就用把数据分成70%训练集,30%验证集. 现在数据量大了,那么验证集和数据集的比例会变小.比如我们有100w的数据,取1w条数据来评估就可以了,取1w做验证集,1w做测试集,剩下的用来训练,即98%的训练

吴恩达-深度学习-课程笔记-7: 优化算法( Week 2 )

1 Mini-batch梯度下降 在做梯度下降的时候,不选取训练集的所有样本计算损失函数,而是切分成很多个相等的部分,每个部分称为一个mini-batch,我们对一个mini-batch的数据计算代价,做完梯度下降,再对下一个mini-batch做梯度下降.比如500w个数据,一个mini-batch设为1000的话,我们就做5000次梯度下降(5000个mini-batch,每个mini-batch样本数为1000,总共500w个样本). 对于batch梯度下降(每次计算所有的样本),随着迭代

吴恩达-深度学习-课程笔记-8: 超参数调试、Batch正则化和softmax( Week 3 )

1 调试处理( tuning process ) 如下图所示,ng认为学习速率α是需要调试的最重要的超参数. 其次重要的是momentum算法的β参数(一般设为0.9),隐藏单元数和mini-batch的大小. 第三重要的是神经网络的层数和学习率衰减 adam算法的三个参数一般不调整,设定为0.9, 0.999, 10^-8. 注意这些直觉是ng的经验,ng自己说了,可能其它的深度学习研究者是不这么认为的. 那么如何选择参数呢?下面介绍两个策略,随机搜索和精细搜索. 早一代的机器学习算法中,如下

吴恩达 深度学习笔记+作业 (一)

1.1.2 Building basic functions with numpy 1.1.2.2 numpy.exp, sigmoid, sigmoid gradient import numpy as np def sigmoid(x): s = 1/(1+np.exp(-x)) return s # 设sigmoid为s, s' = s*(1-s) def sigmoid_derivative(x): s = 1/(1+np.exp(-x)) ds = s*(1-s) return ds

吴恩达深度学习专项课程3学习笔记/week1/Setting up ML Application

应用ML是一个高度迭代的过程 Idea->Code->Experment->... 去不断地调整超参数. Train/Dev/Test sets 通常将数据集划分为Train/Dev/Test集. Training set: 用于模型的训练 Hold-out cross validation set/Developmet set: 用于测试,调整模型超参数 Test set: 用于最终评估 以前的ML问题:数据规模在w级,通常70/30划分Train/Test集或者60/20/20比例划

吴恩达深度学习笔记(deeplearning.ai)之卷积神经网络(二)

经典网络 LeNet-5 AlexNet VGG Ng介绍了上述三个在计算机视觉中的经典网络.网络深度逐渐增加,训练的参数数量也骤增.AlexNet大约6000万参数,VGG大约上亿参数. 从中我们可以学习到: 随着网络深度增加,模型的效果能够提升. 另外,VGG网络虽然很深,但是其结构比较规整.每经过一次池化层(过滤器大小为2,步长为2),图像的长度和宽度折半:每经过一次卷积层,输出数据的channel数量加倍,即卷积层中过滤器(filter)的数量. 残差网络(ResNet) 由于存在梯度消