NetInitialize[net]
给出一个网络,其中,net 的所有未被初始化的可习得参数已被赋予初始值.
NetInitialize[net,All]
给出一个网络,其中,所有可习得参数已被赋予初始值.
NetInitialize
NetInitialize[net]
给出一个网络,其中,net 的所有未被初始化的可习得参数已被赋予初始值.
NetInitialize[net,All]
给出一个网络,其中,所有可习得参数已被赋予初始值.
更多信息和选项
- NetInitialize[net,All] 覆盖 net 中任何已存在的训练或预设可习得参数.
- NetInitialize 通常为表示权重的参数分配随机值,对表示偏置的参数赋予零值.
- 可以包括下列可选参数:
-
Method "Kaiming" 使用何种初始化方法 RandomSeeding 1234 伪随机生成器的种子 - Method 的可能设置包括:
-
"Kaiming" 选择权重以保留通过层传播时数组的方差,该方法由 Kaiming He 等推出 (2015) "Xavier" 选择权重以保留通过层传播时数组的方差,该方法由 Xavier Glorot 等推出 (2014) "Orthogonal" 选择成为正交矩阵的权重 "Random" 从给定单变量分布中选择权重 "Identity" 选择权重以在仿射层之间传播时保留数组的分量 - 可以用 Method{"method",opt1val1,…} 指定特定方法的子选项.
- 对于方法 "Kaiming" 和 "Xavier",支持下列子选项:
-
"Distribution" "Normal" "Normal" 或 "Uniform" - 对于方法 "Random",支持下列子选项:
-
"Weights" NormalDistribution[0,1] 初始化权重矩阵要使用的随机分布 "Biases" None 初始化偏置向量要使用的随机分布 - 对于方法 "Identity",支持下列子选项:
-
"Distribution" NormalDistribution[0,0.01] 为打破对称向初始单位矩阵添加噪声用的随机分布 - 对于应赋予一个分布的子选项,可以指定数值 stddev ,然后视其为 NormalDistribution[0,stddev].
- 缺省情况下,所有的方法都将偏置向量初始化为零.
- RandomSeeding 的可能设置包括:
-
Automatic 每次调用函数时自动重新播种 Inherited 使用外部播种的随机数 seed 使用明确的整数或字符串作为种子
范例
打开所有单元 关闭所有单元基本范例 (1)
范围 (1)
指定 "Random" 初始化,对权重和偏置矩阵使用标准差为 2 的正态分布:
net = NetInitialize[LinearLayer[200, "Input" -> 2], Method -> {"Random", "Weights" -> 2, "Biases" -> 2}]Histogram[Flatten@NetExtract[net, "Weights"]]Histogram[Flatten@NetExtract[net, "Biases"]]选项 (1)
Method (1)
net = NetChain[{LinearLayer[200], ElementwiseLayer[Ramp], LinearLayer[200]}, "Input" -> 50]net2 = NetInitialize[net, Method -> "Xavier"]net3 = NetInitialize[net, Method -> {"Xavier", "Distribution" -> "Uniform"}];Histogram[Flatten@NetExtract[net3, {1, "Weights"}]]net3 = NetInitialize[net, Method -> {"Xavier", "Distribution" -> "Normal"}];Histogram[Flatten@NetExtract[net3, {1, "Weights"}]]属性和关系 (2)
在训练开始前 NetTrain 会自动调用 NetInitialize. 在训练前将一个简单网络层的权重和偏置初始化:
net = LinearLayer[1, "Input" -> 1]NetExtract[net, "Weights"]NetExtract[net, "Biases"]net = NetTrain[net, {{1} -> {2}, {2} -> {3}}]NetExtract[net, "Weights"]NetExtract[net, "Biases"]net = NetChain[{5, 100, 5, 1}, "Input" -> 1];用 "Identity" 方法初始化网络,这样在所得网络中,会在穿过各个线性层时试图保留数组的分量:
net1 = NetInitialize[net, Method -> "Identity"]Plot[net1[x]//Normal, {x, -1, 1}, PlotRange -> {-1, 1}]net2 = NetInitialize[net, Method -> "Xavier"];
Plot[net2[x]//Normal, {x, -1, 1}, PlotRange -> {-1, 1}]可能存在的问题 (2)
属于特定层的参数有固定的初始化方法,与 NetInitialize 中 Method 选项的设置无关:
batch = BatchNormalizationLayer["Input" -> {2, 3, 3}];AssociationMap[Normal@NetExtract[NetInitialize[batch, Method -> #], "MovingVariance"]&, {"Xavier", "Orthogonal", "Identity"}]默认情况下,NetInitialize 使用 RandomSeeding1234,当重复调用 NetInitialize,它会使用随机种子初始化网络:
Normal@NetExtract[NetInitialize[LinearLayer[1, "Input" -> 1]], "Weights"]Normal@NetExtract[NetInitialize[LinearLayer[1, "Input" -> 1]], "Weights"]使用 RandomSeedingAutomatic 确保重复调用产生不同的初始化:
Normal@NetExtract[NetInitialize[LinearLayer[1, "Input" -> 1], RandomSeeding -> Automatic], "Weights"]Normal@NetExtract[NetInitialize[LinearLayer[1, "Input" -> 1], RandomSeeding -> Automatic], "Weights"]巧妙范例 (1)
研究权重和偏置值的大小怎样影响一个简单的把单个值映射到长度为 8 的向量的非线性网络:
Manipulate[Dynamic@Module[{net = NetChain[{30, Tanh, 8, Tanh}, "Input" -> "Real"], initNet},
initNet = NetInitialize[net, Method -> {"Random", "Weights" -> weights, "Biases" -> biases}];
ListLinePlot[
Transpose @ initNet @ Range[-2, 2, .01],
PlotRange -> {-1, 1}, Ticks -> {None, Automatic},
ImageSize -> Medium]
],
{{weights, 1}, 0, 4},
{{biases, 0}, 0, 4}]技术笔记
文本
Wolfram Research (2016),NetInitialize,Wolfram 语言函数,https://reference.wolfram.com/language/ref/NetInitialize.html (更新于 2022 年).
CMS
Wolfram 语言. 2016. "NetInitialize." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2022. https://reference.wolfram.com/language/ref/NetInitialize.html.
APA
Wolfram 语言. (2016). NetInitialize. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/NetInitialize.html 年
BibTeX
@misc{reference.wolfram_2026_netinitialize, author="Wolfram Research", title="{NetInitialize}", year="2022", howpublished="\url{https://reference.wolfram.com/language/ref/NetInitialize.html}", note=[Accessed: 23-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_netinitialize, organization={Wolfram Research}, title={NetInitialize}, year={2022}, url={https://reference.wolfram.com/language/ref/NetInitialize.html}, note=[Accessed: 23-June-2026]}