Pytorch チュートリアル入門シリーズ 7----ネットワーク構造

シリーズ記事ディレクトリ



序文

今日は、Pytorch のもう 1 つの重要なコンテンツ ネットワーク構造を紹介します.これは、自分でネットワークを構築するための前提条件、つまり、ネットワークがどのような基本構造で構成されているかを理解し、各ネットワークを識別することです.


1. ネットワーク構造とは?

ネットワーク構造は、ニューラルネットワーク、特にディープニューラルネットワークの基本構造であり、さまざまなネットワーク構造を有機的に組み合わせることで、ニューラルネットワークの構築を完成させることができます。

2. ネットワーク構造とは?

一般的なネットワーク構造は、一般に、入力から出力まで次の構造を持っています:
入力層、畳み込み層、改良層、全結合層など。以下、Pytorchの実装を順を追って説明します

1. 入力層はデータセット準備層

#构建batch数据
data = torch.utils.data.DataLoader 
module.train() 
#数据放入模型中                            
output = module(data)

2.畳み込み層

输出维度是自定义的,每个维度的图尺寸是需要计算的公式如下W2 = [(W1-K+2P)/S]+1
小さなコア、グループ化、および穴はすべてパラメーター削減の効果があります.
コードは次のとおりです (例):

假定输入为 (32, 28, 28),32通道,28*28大小
nn.Conv2d(
                in_channels=32,             # 输入维度
                out_channels=64,            # 输出要多少个特征图,可自己设定
                kernel_size=5,              # 卷积核大小,一般357。奇数为了能中心对齐
                stride=1,                   # 步长即滑动窗口
                padding=2,                  # 边缘填充,如果希望卷积后大小跟原来一样,需要设置padding=(kernel_size-1)/2 前提 stride=1
            	dilation=1,					# 空洞卷积默认为1,即不进行空洞
            	groups=1,					# 分组卷积,默认为1,即只分1组,不进行拆分
            	bias= True					# 偏置,默认添加偏置
            ),                              # 输出的特征图为 (64, 28, 28

3.改善層

改良層とは演算の略ではなく、畳み込み後のデメリットを改善する各種演算の総称であり、必須ではなく、状況に応じて使い分けることができます。

次の操作に分けられます:
非線形化、パラメーター削減、オーバーフィッティングの軽減、勾配消失または非収束の軽減

以下の状況について話し合う

1.非線形化(活性化関数)ReLU

目的は: 物事は線形に発展しない、つまり最後まで行くことができない. ニューラル ネットワークのインテリジェントなフィッティングは非線形でなければならない. 畳み込み演算は線形の加算、減算、乗算、および除算である. したがって、畳み込み後に非線形変化を加えて Pytorch にもなる必要がある激活函数
活性化関数の API はたくさんありますが、主なものを紹介します

import torch.nn as nn
	nn.Conv2d()#在卷积之后紧跟激活函数
 	nn.ReLU()#最常用,以下三选一
 	nn.Sigmod()
 	nn.LeakyReLU()
 	

2. MaxPoolを減らす

提示:如果在卷积的操作中使用了减参手段,那么卷积之后可以省略再减参
その目的は: パラメータが多すぎるとニューラル ネットワークのトレーニングが難しくなるため、トレーニングの精度を確保する前提で、Pooling (c プーリング) のパラメータを減らすことができるようになりました
。もの

import torch.nn as nn
	nn.Conv2d()#在卷积之后紧跟激活函数
 	nn.ReLU()#最常用
 	nn.MaxPool2d()#以下2选一
 	nn.AvgPool2d()

3. オーバーフィッティングドロップアウトの軽減

目標は、ニューラル ネットワークがトレーニング データセットで適切に機能し、テスト セットでパフォーマンスが低下し、モデルがトレーニング セットでオーバーフィットし、テスト セットで外れ値が発生するのに苦労することです。もちろん、モデル構築レベルでの過適合を緩和する方法についてのみ議論しています。
Pytorch での過適合を緩和する API は、主にドロップアウトを導入します

import torch.nn as nn
	nn.Dropout2d(0.5)#以0.5的概率关闭神经元,以期使其它神经元能挑更多担子

4.勾配飽和BNを緩和する

目的は: ニューラル ネットワークの層の数が深まり続けており、訓練プロセス中に訓練が収束しない. 浅い層のパラメータの弱い変化は、多層の線形変換および活性化関数の後に増幅され、結果として得られるディープ ネットワークは、これらの分布の変化に適応するために常に調整する必要があり、最終的にはモデルのトレーニングと収束が困難になります。畳み込み層の入力分布を正規化してそんな問題を解決する
勾配消失を緩和するPytorchのAPI、主なものを紹介

    >>> from torch import nn
    # 使用BN层需要传入一个参数为num_features,即特征的通道数
    >>> bn = nn.BatchNorm2d(64)
    # eps为公式中的 є, momentum为均值方差的动量,affine为添加可学习参数
    >>> bn
    BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)

4. 全結合層

このレイヤーは主に、完全接続法により、畳み込みデータをターゲット データにマッピングおよび変換します.顕著な特徴は、結合が密であり、すべてのパラメーターの 3 ~ 60% を占める多くのパラメーターがあることです.
tensor转为1维向量,也就固定了其上下游通道数,不利于图像尺度的扩展,基本不在加该层。

torch.nn.Linear(in, out)

要約する

以上が今日のお話になります. この記事ではニューラルネットワークのさまざまな構造層の使い方を簡単に紹介します. 皆さんがさまざまなモデルの各層を正確に識別できることを願っています. 次に、さまざまなレイヤーを組み合わせてモデルを構築する方法を見てみましょう。

おすすめ

転載: blog.csdn.net/weixin_46417939/article/details/128214209