栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

keras 自定义:激活函数,神经网络层,损失函数,正则化器,学习率

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

keras 自定义:激活函数,神经网络层,损失函数,正则化器,学习率

1. 自定义激活函数

首先,您需要使用 backend定义一个函数。 例如,这是我实现swish激活功能的方式

from keras import backend as K
def swish(x, beta=1.0):
    return x * K.sigmoid(beta * x)

如果要将字符串用作自定义函数的别名,则必须向Keras注册自定义对象。 可以这样完成:

from keras.utils.generic_utils import get_custom_objects
get_custom_objects().update({'swish': Activation(swish)})

直接将激活名称应用到网络层:

model.add(Conv2D(64, (3, 3), activation='swish'))
2.自定义神经网络层

MFM是我定义的层函数,要用到了Lambda这个函数。

import os
from keras.layer import Lambda,concatenate
from keras.backend import maximum,expand_dims
import keras.activations as activation
 
def MFM(net):
    n = int(net.get_shape().as_list()[-1]/2)
    tmp = []
    for i in range(n):
        tmp_value = maximum(net[...,i],net[...,-(i+1)])
        tmp.append(expand_dims(tmp_value,axis=-1))
    return concatenate(tmp,axis=-1)
 

应用:

net =Lambda(MFM,name='MFM')(net)
3.自定义损失函数

定义损失函数

def mean_squared_error(y_true, y_pred):
    return K.mean(K.square(y_pred - y_true), axis=-1)

应用:

model.compile(optimizer='rmsprop',loss=mean_squared_error)

再如:

from keras.layers import Input,Embedding,LSTM,Dense
from keras.models import Model
from keras import backend as K
word_size = 128
nb_features = 10000
nb_classes = 10
encode_size = 64
input = Input(shape=(None,))
embedded = Embedding(nb_features,word_size)(input)
encoder = LSTM(encode_size)(embedded)
predict = Dense(nb_classes, activation='softmax')(encoder)

def mycrossentropy(y_true, y_pred, e=0.1):
    loss1 = K.categorical_crossentropy(y_true, y_pred)
    loss2 = K.categorical_crossentropy(K.ones_like(y_pred)/nb_classes, y_pred)
    return (1-e)*loss1 + e*loss2
 
model = Model(inputs=input, outputs=predict)
model.compile(optimizer='adam', loss=mycrossentropy)
4.自定义正则化器

任何输入一个权重矩阵、返回一个损失贡献张量的函数,都可以用作正则化器,例如:

 from keras import backend as K​
 def l1_reg(weight_matrix):
     return 0.01 * K.sum(K.abs(weight_matrix))
 ​
 model.add(Dense(64, input_dim=64,kernel_regularizer=l1_reg))
5.自定义学习率
def lr_scheduler(epoch):
    return learning_rate * (0.5 ** (epoch // lr_drop))
 
reduce_lr = keras.callbacks.LearningRateScheduler(lr_scheduler)
# 该回调函数是用于动态设置学习率
....

....
historytemp = model.fit_generator(datagen.flow(x_train, y_train,
                                                       batch_size=batch_size),
                                          steps_per_epoch=x_train.shape[0] // batch_size,
                                          epochs=maxepoches,
                                          validation_data=(x_test, y_test), callbacks=[reduce_lr], verbose=2)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/580723.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号