卷积神经网络week4笔记

1.人脸验证和人脸识别

人脸验证是1to1问题,输入图片,名字,ID等,输出是否为正确的人

人脸识别有一个包含K个人的数据库,输入一张图片,输出对应ID

 

人脸识别相对于人脸验证需要更高的精度,因为错误率会被放大K倍(K为数据库包含的人数)

 

2.one short learning

对于一个包含K个人的数据库,输入一张图片,如果输出是一个K维softmax向量的话,那么对于数据库每一次更新,都需要重新训练,而且需要改变输出的维度,因此提出了one short learning,即输出为两个图片的差异,低于一定值即可认为是同一个人。


 

3.Siamese Network

针对上述问题提出了Siamese 网络

上方和下方是完全相同的两个卷积神经网络。该网络去掉最后的softmax层,输出一个N维向量,称为图片的“encoding“”,并定义了similarity函数

4. Triplet loss

对于输出的图片的encoding,定义了 Triplet loss:

选取三元组A,N,P分别代表anchor,negative负样本,和positive正样本。满足:

同时为了使等式左右两边不为0或不相等,这里加上一个\alpha使正负样本之间差距变大:

至于triplet loss定义:

所要做的是最小化总triplet cost:

(末尾小加号表示max(x,0))

对于三元组的选择,要满足

这样算法会尽可能使d(A,P)变小,d(A,N)变大

5.面部验证与二分类

根据之前的网络进一步改进,输出1表示相同的人,0表示不同的人

可将两个向量对应元素之间差值的绝对值输入到逻辑回归单元中

还可以用\chi ^{2}公式代替作为输入:

在实际的人脸识别系统中,会对保存的图片进行预处理,存储图片编码,仅对需要识别的图片进行编码处理,如此可提高效率。

 

6.神经风格迁移

由内容图片C和风格图片S,生成最终图片G

代价函数J定义如下:

J(G)=\alpha J_{content}(C,G)+\beta J_{style}(S,G)

用梯度下降法最小化代价函数G=G-\frac{\partial }{\partial G}J(G)

 

对于内容代价函数,浅层网络趋向于检测简单的低等级特征,深层网络趋向于检测复杂的特征,我们需要使生成图片与内容图片的内容相似,因而选取中间层计算代价函数

作业中定义的内容代价函数:

 

对于风格代价函数,首先介绍gram matrix

# GRADED FUNCTION: compute_layer_style_cost

def compute_layer_style_cost(a_S, a_G):
    """
    Arguments:
    a_S -- tensor of dimension (1, n_H, n_W, n_C), hidden layer activations representing style of the image S 
    a_G -- tensor of dimension (1, n_H, n_W, n_C), hidden layer activations representing style of the image G
    
    Returns: 
    J_style_layer -- tensor representing a scalar value, style cost defined above by equation (2)
    """
    
    ### START CODE HERE ###
    # Retrieve dimensions from a_G (≈1 line)
    m, n_H, n_W, n_C = a_G.get_shape().as_list()
    
    # Reshape the images to have them of shape (n_H*n_W, n_C) (≈2 lines)
    a_S = tf.reshape(a_S, [n_H * n_W, n_C])
    a_G = tf.reshape(a_G, [n_H * n_W, n_C])

    # Computing gram_matrices for both images S and G (≈2 lines)
    GS = gram_matrix(tf.transpose(a_S))
    GG = gram_matrix(tf.transpose(a_G))

    # Computing the loss (≈1 line)
    J_style_layer = (1/(4 * n_C * n_C * n_H * n_W * n_H * n_W))*tf.reduce_sum(tf.square(tf.subtract(GS, GG)))
    
    ### END CODE HERE ###
    
    return J_style_layer

对于gram matrix的理解可见https://blog.csdn.net/tunhuzhuang1836/article/details/78474129

风格损失函数:

其中G^{(S)},G^{(G)}分别表示风格矩阵S,生成矩阵G的gram matrix,L为层数,然后与权重相乘再相加:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值