Keras的初始化Initializers

一、初始化器的概念及其用法
概念:

初始化定义了设置 Keras 各层权重随机初始值的方法。

用法:

用来将初始化器传入 Keras 层(包括不限于Dense层、Conv2D层、等等)的参数名取决于具体的层。通常关键字为 kernel_initializer 和 bias_initializer:

你可以给它们传递初始化器的名字字符串,例如:

model.add(Dense(64,
                kernel_initializer='random_uniform',
                bias_initializer='zeros'))

 也可以给它们传递初始化器的实例,这种方式可以让你更改初始化器的参数,比较自由,例如:

model.add(Dense(64,
                kernel_initializer=keras.initializers.Constant(value=3.0),
                bias_initializer=keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None))

一般来说,kernel_initializer默认值为'glorot_uniform',对应的实例是keras.initializers.glorot_uniform(seed=None)
一般来说,bias_initializer默认值为'zeros',对应的实例是keras.initializers.Zeros()
可用的初始化汇总

import tensorflow.keras as keras

#  ######################可用初始化器汇总########################
keras.initializers.Initializer()  # 初始化器基类:所有初始化器继承这个类。
keras.initializers.Zeros()  # 将张量初始值设为 0 的初始化器。
keras.initializers.Ones()  # 将张量初始值设为 1 的初始化器。将张量初始值设为 1 的初始化器。将张量初始值设为 1 的初始化器。
keras.initializers.Constant(value=0)  # 将张量初始值设为一个常数的初始化器。value: 浮点数,生成的张量的值。
keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None)  # 按照正态分布生成随机张量的初始化器。
keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None)  # 按照均匀分布生成随机张量的初始化器。
keras.initializers.TruncatedNormal(mean=0.0, stddev=0.05, seed=None)  # 按照截尾正态分布生成随机张量的初始化器。
keras.initializers.VarianceScaling(scale=1.0, mode='fan_in', distribution='normal', seed=None)  # 初始化器能够根据权值的尺寸调整其规模。
keras.initializers.Orthogonal(gain=1.0, seed=None)  # 生成一个随机正交矩阵的初始化器。
keras.initializers.Identity(gain=1.0)  # 生成单位矩阵的初始化器。
keras.initializers.lecun_uniform(seed=None)  # LeCun 均匀初始化器。
keras.initializers.glorot_normal(seed=None)  # keras.initializers.glorot_normal(seed=None)
keras.initializers.glorot_uniform(seed=None)  # Glorot 均匀分布初始化器,也称为 Xavier 均匀分布初始化器。
keras.initializers.he_normal(seed=None)  # He 正态分布初始化器。
keras.initializers.lecun_normal(seed=None)  # LeCun 正态分布初始化器。
keras.initializers.he_uniform(seed=None)  # He 均匀方差缩放初始化器。

初始化器对应的名字字符串为类名的小写,例如初始化器keras.initializers.RandomNormal(mean=0.0, stddev=0.05, seed=None)的名字字符串就是'randomnormal'

更改初始化例子

#更改一个Dense层初始化器为keras.initializers.Zeros(),也可以小写'zeros'
from tensorflow.keras.layers import Dense, Input, Conv2D, MaxPooling2D
from tensorflow.keras import Sequential
import tensorflow.keras as keras
import numpy as np

# #建立一个测试模型
model = Sequential([
    Dense(4, input_shape=(5,), name='dense_xiaoming',
          kernel_initializer=keras.initializers.Zeros(),  # 全部初始化为0
          bias_initializer=keras.initializers.Ones()),  # 全部初始化为1
])
x = np.ones(shape=(8, 5))  # 创建测试数据
y = model(x)
layer = model.get_layer('dense_xiaoming')  # 通过层的名字得到层
(k, b) = layer.get_weights()  # 查看层的初始化权重值和偏置项
print(k)
print(b)

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Keras中,VAE(Variational Autoencoder)是一种用于生成数据的生成模型,它结合了自动编码器(Autoencoder)和变分推断(Variational Inference)的概念。在Keras中使用VAE时,可以使用以下方法来初始化权重: 1. 随机初始化:可以使用Keras的默认初始化方法,不需要显式地指定初始化函数。Keras会自动为网络中的每个参数随机选择初始化值。 2. 预训练模型初始化:可以使用预训练的模型来初始化VAE的权重。首先,通过训练一个自动编码器(Autoencoder)来获得优化的权重,然后将这些权重作为VAE的初始权重。 3. 自定义初始化方法:Keras还提供了一些自定义的初始化方法,使用它们可以根据需要自定义权重的初始化方式。例如,可以使用keras.initializers.RandomNormal来从正态分布中随机选择初始化值,或者使用keras.initializers.Constant来指定一个常数初始化值。 无论使用哪种初始化方法,都应该根据具体的问题和数据集的特点进行选择。例如,如果已经有预训练的模型可以使用,并且与VAE的架构相似,则预训练模型初始化可能是一个不错的选择。如果没有预训练的模型,或者数据集非常大、复杂,那么随机初始化可能是更好的选择。 通过适当地调整初始化方法和参数,可以帮助模型更好地学习数据的特征,并提高VAE的生成效果。在初始化权重之后,可以使用Keras提供的优化器和损失函数来训练VAE模型,并根据需要生成新的数据样本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值