PyTorchを使用した線形回帰

| | | | | | | | | | | | | | | | | | | |

まず、Python環境にPyTorchをインストールする必要があります。これを行う最も簡単な方法は—です。 pipまたはcondaツールを使用します。 pytorch.org にアクセスし、使用するPythonインタープリターとパッケージマネージャーのバージョンをインストールします。


#このPythonコードをJupyterノートブックで実行できます
#正しいバージョンを自動的にインストールします
#PyTorch。


http://pytorch.org / from os import path

from Wheel.pep425tags import get_abbr_impl、get_impl_ver、get_abi_tag

プラットフォーム = `{} {}-{}` format (get_abbr_impl()、get_impl_ver()、get_abi_tag())

アクセラレータ = `cu80` if path.exists( `/ opt / bin / nvidia-smi` else `cpu`


! pip install - q http: / / download.pytorch.org / whl / {accelerator} / トーチ- 0.3 0.post4 - {platform} - linux_x86_64.whl torchvision

PyTorchをインストールしたら、今すぐ始めましょうコードを見てください。
必要なライブラリ関数とオブジェクトをインポートするには、以下の2行を記述してください。


import torch

from torch.autograd import 変数

また、いくつかのデータを定義し、それを変数 x_datay_data次のように:


x_data = 変数(torch.Tensor([[ 1.0 ]、[ 2.0 ]、 [ 3.0 ]]))

y_data = Variable(torch.Tensor([[ 2.0 ]、[ 4.0 ]、[ 6.0 ]]))

ここにx_data& #8212;独立変数、および y_data —従属変数。これが今のところ私たちのデータセットになります。次に、モデルを定義する必要があります。モデルの定義には、主に2つのステップがあります。それらは次のとおりです。

  1. モデルを初期化します。
  2. フォワードパスを宣言します。
  3. 以下のクラスを使用します:

    class LinearRegressionModel(torch.nn.Module):


    def __ init __( self ):

    super (LinearRegressionModel、 self ).__ init __()

    self 。線形 = torch.nn.Linear( 1 1 #1つの入力と1つの出口


    def forward( self 、x):

    y_pred = 自己。線形(x)

    return y_pred

    ご覧のとおり、 Modelクラスはtorch.nn.moduleのサブクラスです。さらに、ここでは入力と出力が1つしかないため、入力と出力のサイズが1の線形モデルを使用します。

    次に、このモデルのオブジェクトを作成します。

    #モデル

    our_model = LinearRegressionModel()

    その後、オプティマイザーを選択し、損失基準。ここでは、損失関数として平均二乗誤差(MSE)を使用し、オプティマイザーとして確率的勾配降下法(SGD)を使用します。また、学習率を任意に0.01に固定します。


    <コードクラス="プレーン">基準<コードクラス="キーワード">=<コードクラス="プレーン">torch.nn.MSELoss(size_average = False

    オプティマイザー = torch.optim.SGD(our_model.parameters()、lr = 0.01

    これで、学習段階になりました。トレーニング中に次のタスクを500回実行します。

    1. データを渡し、予測されたy値を計算することにより、ライブ転送を実行します。
    2. MSEを使用して損失を計算します。
    3. すべてのグラデーションを0にリセットし、逆伝播してから重みを更新します。

    4. for エポック in 範囲 500 ):


      #フォワードパス:

      #xからモデルへ

      pred_y = our_model(x_data)


      #計算して印刷を失う

      損失 = 基準(pred_y、y_data)


      #ゼロ勾配、バックトラック

      #そして重みを更新します。

      optimizer.zero_grad()

      loss.backward()

      optimizer.step()

      print `epoch {}、loss {}` フォーマット(epoch、loss.data [ 0 ]))

      トレーニングを完了した後、定義したモデル。そのため、不明な x_data 値、この場合は4.0をチェックします。


      new_var = Variable(torch.Tensor([[[ 4.0 ]]))

      pred_y = our_model(new_var)

      print "predict(トレーニング後)" 4 、our_model( new_var).data [ 0 ] [ 0 ])

      すべての手順を正しく実行すると、エントリ4.0で次のように表示されます。以下に示すように、値は8.0に非常に近い値です。したがって、このモデルは基本的に、明示的なプログラミングなしで入力と出力の関係を学習します。

      予測(トレーニング後)4 7.966438293457031

      参考として、以下のこの記事のすべてのコード:


      import torch

      from torch.autograd import 変数

      x_data = Variable(torch.Tensor([[ 1.0 ]、[ 2.0 ]、[ 3.0 ]]))

      y_data = V ariable(torch.Tensor([[ 2.0 ]、[ 4.0 ]、[ 6.0 ]]))



      class LinearRegressionModel(torch.nn.Module):


      def __ init __( self ):

      super (LinearRegressionModel、 self ).__ init __()

      self 。線形 = torch.nn.Linear( 1 1 #1つの入力と1つの出力


      def forward( self 、x):

      y_pred = 自己。線形(x)

      return y_pred


      #モデル

      our_model = LinearRegressionModel()

      基準 = torch.nn.MSELoss(size_average = False

      オプティマイザー = torch.optim。 SGD(our_model.parameters()、lr = 0.01


      for エポック in range 500 ):

      #フォワードパス:パスして予測yを計算します

      #—モデルへのÖ

      pred_y = our_model(x_data)


      #計算して印刷を失う

      損失 = 基準(pred_y、y_data)


      #ゼロ勾配、バックパス、

      #そして重みを更新します。

      optimizer.zero_grad()

      loss.backward()

      optimizer.step()

      印刷 `エポック{}、損失{}` format (epoch、loss.data [ 0 ]))


      new_var = Variable(torch.Tensor([[ 4.0 ]])) < / p>

      pred_y = our_model(new_var)

      print "predict(トレーニング後)" 4 、our_model(new_var).data [ 0 ] [ 0 ])

      リンク