Pytorch分散型ニューラルネットワークの初期化kaiming

ゲイン関数

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、 [C_ {うち}、C_ {で}、H、W]H \回W時間C_ {における} \ W H \回時間C_ {うち} \ W H \回
 

たとえば、次のように入力の数は、同じ大きさの順に設定されています。入力が小さな寸法である場合X = [1,1] ^ T、より大きな分散、パラメータの比較的大きな初期値を生成した正規分布は、この時間W = [0.5,0.5] ^ T値が得られます^のTx = 1ワットときに、入力寸法が大きいX = [1,1,1,1] ^ Tので、より小さな分散、正規分布生成された初期パラメータが比較的小さい= W [0.25,0.25,0.25,0.25] ^ T、得られた値は^のTx = 1ワット、段階の数は一定です。


ザビエル配布

ザビエル分布解析します。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')

 

公開された888元の記事 ウォン称賛93 ビュー180 000 +

おすすめ

転載: blog.csdn.net/weixin_36670529/article/details/104031247