経済統計の使い方
統計初心者の社会人向けに、経済データの解説をしています。「まとめページ」をご覧くだされば、全体的な内容がわかると思います。
python

【python】 深層学習:予測モデルの作り方

初心者向けにPyTorchの予測モデルの作成方法を解説します。深層学習は、入力層からデータを入力し、隠れ層にデータを持っていきます。入力データ各変数に重みをつけ、定数を加えます(線形関数)。隠れ層では、データを非線形に変換します。ReLU関数では負の場合はゼロ、ゼロ以上の場合はそのままのデータとします。それぞれのデータに重みをつけて定数を加えたものを出力データとします。

予測モデルについてのクラス(設計図)として、まず出力データの数入力データの数隠れ層の変数の数隠れ層で使う活性化関数の種類などを決めます。

次に、入力データを、隠れ層から出力層へと次々と渡していく作業をメソッドの形で記述します。

深層学習に関する基本的なクラスであるnn.Moduleにさまざまな属性、メソッド、クラスがあらかじめ用意してあるので、比較的簡単な記述でモデルを書くことができます。

【python】pythonのまとめ 経済統計の使い方では、統計データの入手法から分析法まで解説しています。 https://officekaisuiyoku.com...

深層学習とは

深層学習の仕組みを簡単に説明します。左側にあるので入力データ(PyTorchでは多次元配列=テンソルとして扱います)で、隠れ層を通って、出力データになります。

この例では、入力層のデータは、線形関数で変換されて中間データ1に送られます。そのデータは、ReLU関数で変換されて、中間データ2となります。中間データ2から線形変換されて、出力データが出てきます。

データとデータを結ぶ関数のことをレイヤー関数と呼びます。単に関数と呼ぶこともありますが、入力層から出力層へと層状に並んでいるので、レイヤー関数と呼びます。

pyTorchで予測モデルを作る

Netというクラスを作成する

pyTorchでは、この仕組みをクラスとして表現します。クラスとは、設計図のことですが、これができれば、予測モデルが完成することになります。簡単なクラスは以下のように示されます。

#予測モデルのクラス定義 隠れ層1つの場合

class Net(nn.Module):
    def __init__(self, n_input, n_output):
        super().__init__()
        self.hidden1 = nn.Linear(n_input, 10)   # 1つ目の隠れ層(入力→10)
      self.activation = nn.ReLU()             # ReLU活性化関数(共通で使う)
        self.output = nn.Linear(10, n_output)   # 出力層(10→出力)

    def forward(self, x):
        x = self.hidden1(x)
        x = self.activation(x)
        x = self.output(x)
        return x

クラスの名前はNetにしています。また、nn.Moduleという親のクラスがあります。属性として指定するのは線形関数の入力数と出力数(nn.Linear(入力数、出力数))、隠れ層でどの活性化関数を使うか(この場合はnn.ReLU)だけです。隠れ層が2つの場合は、線形関数をもう一つ加えることになります。

forwardメソッドについて

メソッドとしては、nn.Moduleのメソッドであるforwardを使います。forward メソッドはユーザーが定義するもので、model(X)と描けば自動的に計算されます。まず、入力層から隠れ層にxが渡されます。そのxをReLU関数に適用します(self.activation(x))、さらに、隠れ層から出力層へとxが渡されます。それぞれの関数に次々と受け渡すような記述されており、順伝播を表します。

nn.Moduleが重要

クラスの名前はNetですが、親クラスのnn.Moduleの設計図を受け継いでいるので、nn.Moduleの属性やメソッドが使えます。親クラスの属性やメソッドを受け継ぐためのコマンドが、super().__init__()です。

super().__init__()

nn.Moduleは、深層学習を行うためのモデル構造やパラメータを一元管理できる基礎となるクラスです

nn.Moduleの主な属性

以下がnn.Moduleの主要な属性です。実際に使う場面はないですが、さまざまな変数が格納されています。

属性名説明
_parametersパラメーターを格納する辞書OrderedDict
_buffers固定値を格納する辞書OrderedDict
_modulesレイヤー関数を格納する辞書OrderedDict

nn.Moduleの主なメソッド

nn.Moduleのメソッド(クラス内の関数)には以下のものがあります。

メソッド名説明
forward()予測値を作成
__call__(input)forward() を呼び出す(model(x) が可能に)
named_parameters()名前付きでパラメータを取得
modules()全てのサブモジュール(自身含む)を再帰的に取得
state_dict()モデルの状態(パラメータやバッファ)を辞書で取得
load_state_dict(state_dict)state_dict を読み込んでモデルの状態を復元
to(device)指定したデバイス(CPU/GPU)に移動
cuda()GPU に移動

nn.Moduleの主な子クラス

nn.Moduleの下にはさまざまなクラスが定義されています。上のプログラムでは、nn.Linearnn.ReLUを使っています。

カテゴリ主なクラス
線形層(全結合)nn.Linear, nn.Bilinear
畳み込み層(CNN系)nn.Conv1d, nn.Conv2d, nn.Conv3d, nn.ConvTranspose2d
再帰層(RNN系)nn.RNN, nn.LSTM, nn.GRU
正則化層nn.Dropout, nn.BatchNorm1d, nn.LayerNorm, nn.GroupNorm
活性化関数nn.ReLU, nn.Sigmoid, nn.Tanh, nn.Softmax, nn.LeakyReLU
プーリング層nn.MaxPool2d, nn.AvgPool2d, nn.AdaptiveAvgPool2d
損失関数nn.MSELoss, nn.CrossEntropyLoss, nn.BCELoss, nn.NLLLoss, nn.L1Loss
構造補助系nn.Sequential, nn.ModuleList, nn.ModuleDict

【経済学】【e-Stat】上級財、下級財の例:バターは上級財?|家計調査の品目分類データで検証 上級財と下級財の例として、バターは上級財、マーガリンは下級財と説明すると、バターとマーガリンは代替財じゃないですか?という声がいつ...

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA