Pytorch學習之旅 4 邏輯回歸實戰

2021-10-05 22:31:15 字數 3341 閱讀 7472

資料處理 =

> 建立模型 =

> 選擇損失函式 =

> 選擇優化器 =

> 迭代訓練

import torch

import torch.nn as nn

import matplotlib.pyplot as plt

import numpy as np

torch.manual_seed(10)

# *************************=== step 1/5 生成資料 *************************===

sample_nums =

100mean_value =

1.7bias =

1n_data = torch.ones(sample_nums,2)

x0 = torch.normal(mean_value * n_data,1)

+ bias # 類別0 資料 shape=(100, 2)

y0 = torch.zeros(sample_nums)

# 類別0 標籤 shape=(100, 1)

x1 = torch.normal(

-mean_value * n_data,1)

+ bias # 類別1 資料 shape=(100, 2)

y1 = torch.ones(sample_nums)

# 類別1 標籤 shape=(100, 1)

train_x = torch.cat(

(x0, x1),0

)train_y = torch.cat(

(y0, y1),0

)# *************************=== step 2/5 選擇模型 *************************===

class

lr(nn.module)

:def

__init__

(self)

:super

(lr, self)

.__init__(

) self.features = nn.linear(2,

1)self.sigmoid = nn.sigmoid(

)def

forward

(self, x)

: x = self.features(x)

x = self.sigmoid(x)

return x

lr_net = lr(

)# 例項化邏輯回歸模型

# *************************=== step 3/5 選擇損失函式 *************************===

loss_fn = nn.bceloss(

)# *************************=== step 4/5 選擇優化器 *************************===

lr =

0.01

# 學習率

optimizer = torch.optim.sgd(lr_net.parameters(

), lr=lr, momentum=

0.9)

# *************************=== step 5/5 模型訓練 *************************===

for iteration in

range

(1000):

# 前向傳播

y_pred = lr_net(train_x)

# 計算 loss

loss = loss_fn(y_pred.squeeze(

), train_y)

# 反向傳播

loss.backward(

)# 更新引數

optimizer.step(

)# 清空梯度

optimizer.zero_grad(

)# 繪圖

if iteration %

20==0:

mask = y_pred.ge(

0.5)

.float()

.squeeze(

)# 以0.5為閾值進行分類

correct =

(mask == train_y)

.sum()

# 計算正確**的樣本個數

acc = correct.item(

)/ train_y.size(0)

# 計算分類準確率

plt.scatter(x0.data.numpy()[

:,0]

, x0.data.numpy()[

:,1]

, c=

'r', label=

'class 0'

) plt.scatter(x1.data.numpy()[

:,0]

, x1.data.numpy()[

:,1]

, c=

'b', label=

'class 1'

) w0, w1 = lr_net.features.weight[0]

w0, w1 =

float

(w0.item())

,float

(w1.item())

plot_b =

float

(lr_net.features.bias[0]

.item())

plot_x = np.arange(-6

,6,0.1

) plot_y =

(-w0 * plot_x - plot_b)

/ w1

plt.xlim(-5

,7) plt.ylim(-7

,7) plt.plot(plot_x, plot_y)

plt.text(-5

,5,'loss=%.4f'

% loss.data.numpy(

), fontdict=

) plt.title(

"iteration: {}\nw0: w1: b: accuracy:"

.format

(iteration, w0, w1, plot_b, acc)

) plt.legend(

) plt.show(

) plt.pause(

0.5)

if acc >

0.99

:break

pytorch學習之旅 1

torch.tensor是torch.tensor與torch.empty的一種混合。當傳入資料時,torch.tensor使用全域性預設的dtype floattensor,而torch.tensor從資料中推斷資料型別。import torch t1 torch.tensor 2 3 t2 to...

Pytorch學習之旅 2 線性回歸實戰

回歸分析中,只包括乙個自變數和乙個因變數,且二者的關係可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析,即 y w x b m od el y w x bmodel y w x b model y w x b採用最小平方法求解一元線性模型最優引數 w b。m se 1m i 1m ype rd...

機器學習 pytorch(4)

基於機器學習的物理不可轉殖函式 puf 建模攻擊 2.2 puf 物理不可轉殖函式 physical unclonable function,puf 是一種新的輕量級硬體安全原語。當輸入乙個激勵時,puf利用晶元製造過程中難以 的工藝偏差 process variation 輸出依賴於晶元的不可轉殖...