原答案在对输入进行归一化时有错误,另外m应该是一个固定的超参数不需要训练,已改正
论文地址:Additive Margin Softmax for Face Verification
和L-Softmax、A-Softmax比简单很多,在minist上测试通过,两个500节点的全连接层 + 10个节点的分类层,训练两轮验证集的acc达到97+%。
运行环境:
keras:2.1.5
tensorflow:1.4.0
python:3.6
OS:win7
# -*- coding: utf-8 -*-
from keras import backend as K
from keras.engine.topology import Layer
from keras.layers import Dense, Activation,BatchNormalization
from keras.layers import activations, initializers, regularizers, constraints, Lambda
from keras.engine import InputSpec
import tensorflow as tf
import numpy as np
class AMSoftmax(Layer):
def __init__(self, units, s, m,
kernel_initializer='glorot_uniform',
kernel_regularizer=None,
kernel_constraint=None,
**kwargs
):
if 'input_shape'