資料處理 =
> 建立模型 =
> 選擇損失函式 =
> 選擇優化器 =
> 迭代訓練
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 輸出依賴於晶元的不可轉殖...