Linear regression


学習目標


線形回帰を理解します.

コアキー


せんけいかいき
へいきんにじゅうごさ
けいしゃこうかほう

テーマ


データ定義:学習データ(torch.tenser)
Hypothesis:学習する関数を実現する
Compute Loss:損失の計算
勾配降下こうばいこうばい:連続モデルの改良れんぞくもでるのこうか
初期設定
! pip install torchvision

import numpy as np
import torch
Data definition
x_train = torch.FloatTensor([[1], [2], [3]])#입력
y_train = torch.FloatTensor([[2], [4], [6]])#출력

Hypothesis(model)


Liner Regressionは、学習データと最も一致する直線を1つの直線で検索します.
#Weight와 Bias 0으로 초기화(항상 출력0예측)

W = torch.zeros(1, requires_grad = True) #학습할 것 명시
b = torch.zeros(1, requires_grad = True) #학습할 것 명시


hypothesis = x_train * W + b

Compute Loss(モデル学習)


Mean Squared Error(MSE)


正解からどれほど近いかを確認することで損失を計算する
平均値に実際のトレーニングデータセットを乗じたy値の違い
cost = torch.mean((hypothesis - y_train) ** 2)

Gradient descent


  • torch.Optimライブラリの使用
  • [W,b]はテンソル
  • を学習する.
  • lr = 0.01

  • いつもくっついている3行(必ず覚えておいてください)
  • zero grad()を使用して勾配
  • を初期化
  • 逆方向()を用いて勾配
  • を計算する.
  • step()を使用して、Weight、Biase、W、およびbをGradient方向に計算します.
  • optimizer = torch.optim.SGD([W, b], lr=0.01)
    
    optimizer.zero_grad()
    cost.backward()
    optimizer.step()

    Full training code(Linear regression)

    ! pip install torchvision
    
    import numpy as np
    import torch
    
    #데이터 정의
    
    x_train = torch.FloatTensor([[1], [2], [3]])
    y_train = torch.FloatTensor([[2], [4], [6]])
    
    
    # Hypothesis초기화
    
    W = torch.zeros(1, requires_grad = True)
    
    b = torch.zeros(1, requires_grad = True)
    
    
    #Optimizer정의
    
    optimizer = torch.optim.SGD([W, b], lr = 0.01)
    
    #Hypothesis 예측
    
    nb_epochs = 1000
    for epoch in range(1, nb_epochs + 1):
        hypothesis = x_train * W + b
        cost = torch.mean((hypothesis - y_train) ** 2)
        
        optimizer.zero_grad()
        cost.backward() #cost계산
        optimizer.step() #Optimizer로 학습