1. 程式人生 > >CosFace中的cos loss(Large Margin Cosine Loss)實現(tensorflow)

CosFace中的cos loss(Large Margin Cosine Loss)實現(tensorflow)

你要的答案或許都在這裡小鵬的部落格目錄

paper:

CosFace: Large Margin Cosine Loss(MLCL) for Deep Face Recognition

論文中的cos loss:




cos loss 的 TF 實現:

# coding=utf-8

import tensorflow as tf
import numpy as np

def py_func(func, inp, Tout, stateful = True, name=None, grad_func=None):  
    rand_name = 'PyFuncGrad' + str(np.random.randint(0,1E+8))  
    tf.RegisterGradient(rand_name)(grad_func)  
    g = tf.get_default_graph()  
    with g.gradient_override_map({'PyFunc':rand_name}):  
        return tf.py_func(func,inp,Tout,stateful=stateful, name=name)  
  
def coco_forward(xw, y, m, name=None):  
    #pdb.set_trace()  
    xw_copy = xw.copy()  
    num = len(y)  
    orig_ind = range(num)  
    xw_copy[orig_ind,y] -= m  
    return xw_copy  
  
def coco_help(grad,y):  
    grad_copy = grad.copy()  
    return grad_copy  
  
def coco_backward(op, grad):  
      
    y = op.inputs[1]  
    m = op.inputs[2]  
    grad_copy = tf.py_func(coco_help,[grad,y],tf.float32)  
    return grad_copy,y,m  
  
def coco_func(xw,y,m, name=None):  
    with tf.op_scope([xw,y,m],name,"Coco_func") as name:  
        coco_out = py_func(coco_forward,[xw,y,m],tf.float32,name=name,grad_func=coco_backward)  
        return coco_out  
  
def cos_loss(x, y,  num_cls, reuse=False, alpha=0.25, scale=64,name = 'cos_loss'):  
    ''''' 
    x: B x D - features 
    y: B x 1 - labels 
    num_cls: 1 - total class number 
    alpah: 1 - margin 
    scale: 1 - scaling paramter 
    '''  
    # define the classifier weights  
    xs = x.get_shape()  
    y = tf.reshape(tf.cast(y, dtype = tf.int32),[-1])
    with tf.variable_scope('centers_var',reuse=reuse) as center_scope:  
        w = tf.get_variable("centers", [xs[1], num_cls], dtype=tf.float32,   
            initializer=tf.contrib.layers.xavier_initializer(),trainable=True)  
     
    #normalize the feature and weight  
    #(N,D)  
    x_feat_norm = tf.nn.l2_normalize(x,1,1e-10)  
    #(D,C)  
    w_feat_norm = tf.nn.l2_normalize(w,0,1e-10)  
      
    # get the scores after normalization   
    #(N,C)  
    xw_norm = tf.matmul(x_feat_norm, w_feat_norm)    
    #value = tf.identity(xw)  
    #substract the marigin and scale it  
    value = coco_func(xw_norm,y,alpha) * scale  
      
    # compute the loss as softmax loss  
    cos_loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=value))  
  
    return cos_loss


相關推薦

CosFacecos lossLarge Margin Cosine Loss實現tensorflow

你要的答案或許都在這裡:小鵬的部落格目錄paper:CosFace: Large Margin Cosine Loss(MLCL) for Deep Face Recognition論文中的cos loss:cos loss 的 TF 實現:# coding=utf-8 i

Large-Margin Softmax Loss for Convolutional Neural Networks

線性分類 大學 amp ima 困難 訓練 http con network paper url: https://arxiv.org/pdf/1612.02295 year:2017 Introduction 交叉熵損失與softmax一起使用可以說是CNN中最常用的監督

SpringAOP:Proxy動態代理淺解析被代理對象必須實現接口

ima throwable light public RR eth 對象 處理 span 小貼士:以下內容純屬個人觀點,如有不當請指出並諒解 import java.lang.reflect.Proxy; Proxy可以動態代理一個對象 寫一個代理工廠類ProxyFac

在html展示自己設計的字型使用自定義字型庫實現資料加密

在iconfont這麼發達的年代,作為前端設計工程師使用font awesome 是十分頻繁的,而“png圖”樣式圖示現在已經應用的比較少了,追溯其原因還是瀏覽器核心的渲染速度提升和字型庫多瀏覽器(包括手機)的支援,向量字型不會出現模糊的情況等等。從最早html4時代把圖示做

2018.12.24 Spring的aop演示也就是運用aop技術實現代理模式

4.spring中的aop演示 4.1步驟: 1.導包(4+2+2+2+1) 基礎包+日誌包+aop、aspects+test+weaver+aopalliance 下面兩個是spring需要的第三方aop包 com.springsource.org.aspectj.weaver-1.6.8

註冊/找回密碼等功能傳送手機驗證碼後倒計時效果的實現基於vue

註冊/找回密碼等功能中傳送手機驗證碼後倒計時效果的實現,基於vue、element-ui<template> <el-button size="small" type="prima

支援向量機演算法的實現和應用Python3超詳細的原始碼實現+圖介紹

支援向量機演算法的實現和應用,因為自己推到過SVM,建議自己推到一遍, 這裡不對SVM原理做詳細的說明。 原理公式推到推薦看:https://blog.csdn.net/jcjx0315/article/details/61929439 #!/usr/bin/env python # enc

webpack 最簡單的入門教程基礎的檔案打包以及實現熱載入

webpack安裝 我們可以用npm安裝webpack,要用npm我們就需要安裝node.js環境,作為我們的平臺。 下載node.js 下載好之後安裝,我們在cmd或者GitBashHere中輸入 npm -v node -v 如果出現版本號

Android 本地歷史記錄、及產品標籤支援單選、多選實現附原始碼使用鴻洋大神的FlowLayout開源庫

        最近的專案需要做本地歷史記錄功能,以前寫的有些過時了,就在網上查了查較好的開源庫、實現方式等。最終選擇了鴻洋大神的FlowLayout流式佈局,再搭配SharedPreferencesUtil工具類來實現本地歷史記錄功能。同時FlowLayout開源庫還非常適

keras面向小資料集的影象分類VGG-16基礎上fine-tune實現附程式碼

參考譯文地址:http://keras-cn.readthedocs.io/en/latest/blog/image_classification_using_very_little_data/ 本文作者:Francois Chollet 概述 在本文中,將使用VGG-16模型提供一種面向小資料集(幾百

HDU 2647 Reward拓撲排序,vector實現鄰接表

Reward Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13509    Accepted Submission(s): 4314 Prob

Node.js 基於 ursa 模組的 RSA 加密解密已與IOS,Android實現加密通訊

前幾天除錯一個RSA加密,遇到一些問題,在網上找了好久好久,與Node.js相關的資源少得非常可憐,最後還是靠自己一步一步解決了,今天把程式碼和一些心得拿出來分享一下: cnode連結地址:https://cnodejs.org/topic/54d2de4cf

損失函式:Hinge Lossmax margin

Hinge Loss簡介 Hinge Loss是一種目標函式(或者說損失函式)的名稱,有的時候又叫做max-margin objective。其最著名的應用是作為SVM的目標函式。 其二分類情況下,公式如下:  l(y)=max(0,1−t⋅y) 其中,y是預測值(-1到1之間),t為目標值(±1)。

Unity3d修煉之路:遊戲開發,3d數學知識的練習【1】不斷更新.......

turn tor rdo pre 長度 scrip 縮放 unity3d float #pragma strict public var m_pA : Vector3 = new Vector3(2.0f, 4.0f, 0.0f); public var m_pB :

WPF查看PDF文件 - 基於開源的MoonPdfPanel 無需安裝任何PDF閱讀器問題匯總

報錯 博客 mil iss 用法 責任 位置 通過 連接 致敬Yang-Fei—有一個簡單的用法示例: http://www.cnblogs.com/yang-fei/p/4885570.html。 寫MoonPdfPanel的哥們關於這個開源軟件的實現介紹

電音DJ/Producer/MC/EDM/Remix/Mix的名詞解釋

技術 賽事 兩把刷子 傳播 世界 曾經 cer ckey pro DJ DJ是Disc Jockey的縮寫,是電音圈子裏的一種熱門職業,一般大家在夜店或者酒吧看到的站在臺上甩著膀子擰著按鈕或者使勁兒搓碟的就是DJ啦。 DJ的主要工作一般就是在現場用打碟機和混音臺把許多適

jquery 的回調函數,回調函數callback是什麽?

ack www spa userdata cti data back func 回調 知乎上果然大牛比較多 大神解釋如下: 你到一個商店買東西,剛好你要的東西沒有貨,於是你在店員那裏留下了你的電話,過了幾天店裏有貨了,店員就打了你的電話,然後你接到電話後就到店裏去取了貨

Java實現二叉樹的前序、序、後序、層序遍歷遞歸方法

pos clas print main 二叉 extend xtend left input public class Tree<AnyType extends Comparable<? super AnyType>> { private stati

Java的會話管理——HttpServlet,Cookies,URL Rewriting

資源 gets where pre 點擊 相關 商品 另一個 格林尼治 參考谷歌翻譯,關鍵字直接使用英文,原文地址:http://www.journaldev.com/1907/java-session-management-servlet-httpsession-url-

css margin負邊距之列布局列表、聖杯、雙飛翼

door ont oct class containe resp 固定寬度 單元 自適應 技術服務於應用,技術來源於應用。 應用1:當接到設計師給的設計圖時(如下圖),發現每列左右和上下文保持一致,頓時整個心情就不好了。因為要兼顧響應式,即沒辦法保證每個列表單元的具體位置,