深度學習第一章:最簡單的線性回歸實作
1. 引言
AI領域的線性回歸和其他領域不太一樣,包括了名詞和實作方式,所以必須先認識重要名詞,再把所有步驟熟悉一邊,并建立在之前學習線性回歸的基礎上
2. 學習目的:
- 知道線性回歸是什么
- 知道線性回歸在深度學習領域怎么在python上實作
- 代碼實作,運行結果
- 知道每行代碼怎么來的
- 了解與后面的聯系
3. 線性回歸是什么
略
4. python 實作步驟
- 資料部分
- 資料生成
- 資料處理(小批量提取,生成迭代器)
- 模型初始化
- 模型定義
- 模型初始化
- 損失函式定義
- 更新規則:
- 優化函式定義:SGD 梯度下降
- 訓練(包含求出損失,反向傳遞,梯度下降,梯度清零)
5. 代碼部分+解讀:
import torch as tc
import numpy as np
from torch.utils import data
from LimuAi.Linear_regression import synthetic_data
from torch import nn
#處理資料:
'''
定義實際資料
'''
true_k=tc.tensor([2,-3.4])
true_b=4.2
feature,lable=synthetic_data(true_k,true_b,1000) #資料初始化
'''
定義讀取資料的方法
'''
def read_data(sample,batch_size,is_train=True):#python是一個縮進控制組塊的語言
dataset=data.TensorDataset(*sample) #將sample變成元組之后,經過TensorDataset變成dataset物件,方便傳入dataloader函式進行小批量的抽取(我猜的,還沒求證)
return data.DataLoader(dataset,batch_size,shuffle=is_train) #回傳一個迭代器,小批量的回傳樣本資料
batch_size=10
item=read_data((feature,lable),batch_size) #生成item作為下方訓練用的迭代器,進行小批量隨機梯度下降
print(next(iter(item))) # 使用next得出第一個小批次
'''
定義模型
'''
net = nn.Sequential(nn.Linear(2, 1)) #搭建一個單層神經網路,并且神經元使用的是線性結構,且有兩個輸入,一個輸出
'''
初始化模型引數
'''
net[0].weight.data.normal_(0, 0.01)#對net實力初始化模型即使用[0]來定位,weight/bias .data來初始化,
net[0].bias.data.fill_(0)
'''
定義損失函式
'''
loss = nn.MSELoss() #使用nn底下的包即可實作計算MSE
'''
定義優化演算法
'''
trainer = tc.optim.SGD(net.parameters(), lr=0.03)
#把優化演算法也定義成物件,通過torch的optim包的SGD來實體化,SGD實體化需要模型引數和學習率(也是梯度下降所必須的)
#引數通過net的parameter可直接輸入
'''
訓練
'''
num_epochs = 3 #把資料集遍歷三遍
for epoch in range(num_epochs): #迭代器必須是一個list/元組之類的
for X, y in item: #取出隨機小批次,用來梯度下降
l=loss(net(X),y)#比較計算出的yhat和真實的y的RMSE
trainer.zero_grad() #用來清除模型的累計梯度
l.backward() #反向傳遞,回呼
trainer.step() #更新模型引數
l=loss(net(feature),lable)
print(f'epoch {epoch + 1}, loss {l:f}')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/502850.html
標籤:其他
