import xlrd #用於讀取excel
import torch
import numpy as np
import random #隨機模組
file_path =
'1.xls'
#這裡的1.xls檔案為11列4000余行的資料。最後一列為標籤,即真值輸出。
data = xlrd.open_workbook(file_path)
table = data.sheets()[
0]row_n = table.nrows
col_n = table.ncols
#建立數列11*n
list1 =[[
]]*11
#轉到數列中去,感覺有些多餘
for i in
range(0
,col_n)
: list1[i]
= table.col_values(i)
data1 = np.array(list1)
data = data1.t
#切片,分離出x與標籤y
x = data[:,
0:10]
y = data[:,
10]#轉到tensor(至於tensor才能利用梯度)
features = torch.from_numpy(x)
labels = torch.from_numpy(y)
num_inputs =
10num_examples =
4177
print
(len
(features)
)#定義資料讀取
defdata_iter
(batch_size, features, labels)
: num_examples =
len(features)
indices =
list
(range
(num_examples)
) random.shuffle(indices)
# 樣本的讀取順序是隨機的
for i in
range(0
, num_examples, batch_size)
: j = torch.longtensor(indices[i:
min(i + batch_size, num_examples)])
# 最後一次可能不足乙個batch
yield features.index_select(
0, j)
, labels.index_select(
0, j)
#一次讀取的資料量
batch_size =
10'''
for x, y in data_iter(batch_size, features, labels):
print(x, '\n', y)
break
'''#係數w與偏置b的設定
w = torch.tensor(np.random.normal(0,
0.01
,(num_inputs,1)
), dtype=torch.float64)
b = torch.zeros(
1, dtype=torch.float64)
#使其可以利用grad
w.requires_grad_(requires_grad=
true
)b.requires_grad_(requires_grad=
true
)def
linreg
(x, w, b)
:# 定義模型
return torch.mm(x, w)
+ b #torch.mm 是矩陣相乘。
defsquared_loss
(y_hat, y)
:# 損失函式
return
(y_hat - y.view(y_hat.size())
)**2/
2def
sgd(params, lr, batch_size)
:# 優化演算法
for param in params:
param.data -= lr * param.grad / batch_size
#相關訓練引數
lr =
0.1num_epochs =
30net = linreg
loss = squared_loss
#開始訓練
for epoch in
range
(num_epochs)
:# 訓練模型一共需要num_epochs個迭代週期
# 在每乙個迭代週期中,會使用訓練資料集中所有樣本一次(假設樣本數能夠被批量大小整除)。x
# 和y分別是小批量樣本的特徵和標籤
for x, y in data_iter(batch_size, features, labels)
: l = loss(net(x, w, b)
, y)
.sum()
# l是有關小批量x和y的損失
l.backward(
)# 小批量的損失對模型引數求梯度
sgd(
[w, b]
, lr, batch_size)
# 使用小批量隨機梯度下降迭代模型引數
# 不要忘了梯度清零
w.grad.data.zero_(
) b.grad.data.zero_(
) train_l = loss(net(features, w, b)
, labels)
print
('epoch %d, loss %f'
%(epoch +
1, train_l.mean(
).item())
)#最後輸出我們想要的相關引數。
print
('\n'
, w)
print
('\n'
, b)
Python基礎學習筆記十(元組)
二 訪問元組 三 元組函式 運算子 三 元組解包 元組 tuple 與列表類似,不同之處在於元組的元素不能修改。元組使用小括號,列表使用方括號。使用 來建立空元組 當元組不是空元組時,括號可以省略 如果元組不是空元組,它裡邊至少要有乙個元素和乙個 建立了乙個5個元素的元組 元組可以使用下標索引來訪問...
python實現線性回歸
定義 線性回歸在假設特徵滿足線性關係,根據給定的訓練資料訓練乙個模型,並用此模型進行 文中只介紹了簡單的概念,不涉及公式的證明等。從最簡單的一元線性關係介紹,假設有一組資料型態為 y theta x,其中 x y 我們根據 x,y 模擬出近似的 theta 引數值,進而得到 y theta x 模型...
python實現線性回歸
線性回歸模型是最簡單的機器學習模型,基礎可以從線性回歸模型開始入手,慢慢地過渡到非線性回歸以及神經網路模型。1.概念 2.線性回歸 簡單回歸 乙個自變數輸入,y x是一對一的關係,對映到幾何上來說就是二維座標系的直線方程,可表示為y 多元回歸 多個自變數,改變維度的大小。即 3.最小二乘法 通過向量...