ゲイン関数
torch.nn.init.calculate_gain(非線形、PARAM =なし)
利得計算値の非線形関数を提供します。
ゲイン値は、入力と出力の大きさとの大小関係を調整するために、パーセント値です。
fan_in和fan_out
ソースとfan_out fan_in pytorch計算
def _calculate_fan_in_and_fan_out(tensor):
dimensions = tensor.ndimension()
if dimensions < 2:
raise ValueError("Fan in and fan out can not be computed
for tensor with fewer than 2 dimensions")
if dimensions == 2: # Linear
fan_in = tensor.size(1)
fan_out = tensor.size(0)
else:
num_input_fmaps = tensor.size(1)
num_output_fmaps = tensor.size(0)
receptive_field_size = 1
if tensor.dim() > 2:
receptive_field_size = tensor[0][0].numel()
fan_in = num_input_fmaps * receptive_field_size
fan_out = num_output_fmaps * receptive_field_size
return fan_in, fan_out
完全接続層、fan_in入力寸法、fan_out出力ディメンションに、畳込み層に寸法で提供されるカーネルサイズです。fan_in市市fan_out、 。
たとえば、次のように入力の数は、同じ大きさの順に設定されています。入力が小さな寸法である場合、より大きな分散、パラメータの比較的大きな初期値を生成した正規分布は、この時間値が得られます。ときに、入力寸法が大きいので、より小さな分散、正規分布生成された初期パラメータが比較的小さい、得られた値は、段階の数は一定です。
ザビエル配布
ザビエル分布解析します。https://prateekvjoshi.com/2016/03/29/understanding-xavier-initialization-in-deep-neural-networks/は
シグモイド機能を有しているものと。重み付け値(絶対値の平均値)が小さすぎると、ネットワーク層入力値は、それぞれの分散を低減し、各層の重みは、シグモイド関数0添付の線形関数、失わDNNに対応する領域に、非常に小さいです非線形性。
量が多すぎると、入力値は、それぞれの層の急速分散を上昇し、それぞれの出力値が大きくなり、この時点でそれが近い0の各勾配になり
ザビエルの初期値は、入力Xことであってもよい
Xネットワーク層の出力yを介して分散値
そのままyの分散。
均等に分散(1)のザビエル
torch.nn.init.xavier_uniform_(tensor, gain=1)
U(-a、A)を使用して、テンソルを記入
またGlorotの初期化として知られています。
>>> w = torch.empty(3, 5)
>>> nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain('relu'))
正常(2)ザビエル
torch.nn.init.xavier_normal_(tensor, gain=1)
N(0、STD)を用いてテンソル埋める
も知らGlorotの初期化。
kaiming分布
ウェル内のザビエルTANH性能が、Relu活性化機能でパフォーマンスの低下、彼Kaimingは中reluの初期化方法を提案しているよう。畳み込みkaiming通常の初期化デフォルトの層のパラメータをpytorch。
均一に分布(1)kaiming
torch.nn.init.kaiming_uniform_
(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')
一様分布を用いて(結合した結合型)Uは
また、彼の初期化として知られています。
-整流器の負の勾配 (デフォルトでReLU 0)は、この層の後に使用される負の勾配活性化機能,.
fan_in選択のいずれか「fan_in」(デフォルト)または「fan_out」 - MODE
ジャムの分散の大きさを重みの中にフォワード
パス。後方での大きさでジャムでfan_outを選択する
パス。前fan_inにfan_inデフォルトモードは、スプレッドの変動の大きさに体重を保つことができ、fan_outは体重バックプロパゲーションの変動の大きさを保つことができます。
>>> w = torch.empty(3, 5)
>>> nn.init.kaiming_uniform_(w, mode='fan_in', nonlinearity='relu')
(2)正常kaiming
torch.nn.init.kaiming_normal_
(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')
正規分布N(0、STD)
また、彼の初期化として知られています。
>>> w = torch.empty(3, 5)
>>> nn.init.kaiming_normal_(w, mode='fan_out', nonlinearity='relu')