[Pytorch系列-25]:神经网络基础 - 单个无激活函数的神经元实现简单线性回归 - 2
?作者主頁(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文網址:https://blog.csdn.net/HiWangWenBing/article/details/120600611
目錄
前言 深度學習模型框架
第1章 業務領域分析
1.1? 步驟1-1:業務領域分析
1.2 步驟1-2:業務建模
1.3 代碼實例前置條件
第2章 前向運算模型定義
2.1?步驟2-1:數據集選擇
2.2?步驟2-2:數據預處理
2.3 步驟2-3:神經網絡建模
2.4 步驟2-4:神經網絡輸出
第3章 后向運算模型定義
3.1 步驟3-1:定義loss函數
3.2? 步驟3-2:定義優化器
3.3 步驟3-3:模型訓練
3.4 步驟3-4:模型驗證
3.5 步驟3-5:模型可視化
第4章 模型部署
4.1 步驟4-1:模型部署
前言 深度學習模型框架
[人工智能-深度學習-8]:神經網絡基礎 - 機器學習、深度學習模型、模型訓練_文火冰糖(王文兵)的博客-CSDN博客_神經網絡與深度學習第1章 白話機器學習[人工智能-綜述-4]:白話深度學習-- 無基礎小白都能理解機器學習的核心概念_文火冰糖(王文兵)的博客-CSDN博客[人工智能-深度學習-7]:神經網絡基礎 - 人工神經網絡ANN_文火冰糖(王文兵)的博客-CSDN博客第2章 機器學習的模型與步驟2.1深度學習與機器學習上述三個概念中:人工智能的概念最廣泛,所以有能機器具有類”人“一樣智能的技術、非技術(如倫理)的領域,都是人工智能。機器獲取“智能”的一個重要手段是,機器具備“自我學習”的能力,...https://blog.csdn.net/HiWangWenBing/article/details/120462734
第1章 業務領域分析
1.1? 步驟1-1:業務領域分析
1.2 步驟1-2:業務建模
1.3 代碼實例前置條件
#環境準備 import numpy as np # numpy數組庫 import math # 數學運算庫 import matplotlib.pyplot as plt # 畫圖庫import torch # torch基礎庫 import torch.nn as nn # torch神經網絡庫print("Hello World") print(torch.__version__) print(torch.cuda.is_available()) Hello World 1.8.0 False第2章 前向運算模型定義
2.1?步驟2-1:數據集選擇
這里不需要采用已有的開源數據集,只需要自己構建數據集即可。
#2-1 準備數據集 x_sample = np.linspace(0, 5, 64)noise = np.random.randn(64) y_sample = 2 * x_sample + 1 + noisey_line = 2 * x_sample + 1#可視化數據 plt.scatter(x_sample, y_sample) plt.plot(x_sample, y_line,'red')2.2?步驟2-2:數據預處理
(1)把numpy一維數據轉換成二維樣本數據
(2)把numpy樣本數據轉換成torch樣本數據
# 2-2 對數據預處理 print("Numpy原始樣本的形狀") print(x_sample.shape) print(y_sample.shape)# 把一維線性數據轉換成二維樣本數據,每個樣本數據為一維 print("\nNumpy訓練樣本的形狀") x_numpy = x_sample.reshape(-1, 1).astype('float32') y_numpy = y_sample.reshape(-1, 1).astype('float32') print(x_numpy.shape) print(y_numpy.shape)# numpy樣本數據轉換成pytorch樣本數據 print("\ntorch訓練樣本的形狀") x_train = torch.from_numpy(x_numpy) y_train = torch.from_numpy(y_numpy)print(x_train.shape) print(y_train.shape)plt.scatter(x_train, y_train) Numpy原始樣本的形狀 (64,) (64,)Numpy訓練樣本的形狀 (64, 1) (64, 1)torch訓練樣本的形狀 torch.Size([64, 1]) torch.Size([64, 1])Out[3]:
<matplotlib.collections.PathCollection at 0x1fdc56524f0>2.3 步驟2-3:神經網絡建模
這里的神經網絡模型是單輸入(size=1)、單輸出(size=1)、無激活函數的線性神經元。
# 2-3 定義網絡模型 print("定義并初始化模型") w = Variable(torch.randn(1), requires_grad=True) b = Variable(torch.randn(1), requires_grad=True) print(w, w.data) print(b, b.data)def linear_mode(x):return (w * x + b)model = linear_mode 定義并初始化模型 tensor([0.1358], requires_grad=True) tensor([0.1358]) tensor([0.4257], requires_grad=True) tensor([0.4257])2.4 步驟2-4:神經網絡輸出
# 2-4 定義網絡預測輸出 y_pred = linear_mode(x_train) print(y_pred.shape) torch.Size([64, 1])備注:輸出是64個樣本的一維數據
第3章 后向運算模型定義
3.1 步驟3-1:定義loss函數
這里采用的MSE loss函數
# 3-1 定義loss函數: # loss_fn= MSE loss def MSELoss(y_, y):return (torch.mean((y_ - y)**2))loss_fn = MSELossprint(loss_fn) <function MSELoss at 0x00000197671FD0D0>3.2? 步驟3-2:定義優化器
# 3-2 定義優化器 Learning_rate = 0.01 #學習率# lr:指明學習率 def optimizer_SGD_step(lr):w.data = w.data - lr * w.grad.datab.data = b.data - lr * b.grad.dataoptimizer = optimizer_SGD_stepprint(optimizer) <function optimizer_SGD_step at 0x00000197671FD430>3.3 步驟3-3:模型訓練
# 3-3 模型訓練 w = Variable(torch.randn(1), requires_grad=True) b = Variable(torch.randn(1), requires_grad=True)# 定義迭代次數 epochs = 500loss_history = [] #訓練過程中的loss數據 w_history = [] #訓練過程中的w參數值 b_history = [] #訓練過程中的b參數值for i in range(0, epochs):#(1) 前向計算y_pred = model(x_train)#(2) 計算lossloss = loss_fn(y_pred, y_train)#(3) 反向求導loss.backward(retain_graph=True)#(4) 反向迭代optimizer_SGD_step(Learning_rate)#(5) 復位優化器的梯度#optimizer.zero_grad()w.grad.zero_()b.grad.zero_()#記錄迭代數據loss_history.append(loss.data) w_history.append(w.data)b_history.append(b.data)if(i % 100 == 0):print('epoch {} loss {:.4f}'.format(i, loss.item())) print("\n迭代完成") print("\n訓練后w參數值:", w) print("\n訓練后b參數值:", b) print("\n最小損失數值 :", loss) print(len(loss_history)) print(len(w_history)) print(len(b_history)) epoch 0 loss 42.0689 epoch 100 loss 1.0441 epoch 200 loss 1.0440 epoch 300 loss 1.0439 epoch 400 loss 1.0439迭代完成訓練后w參數值: Parameter containing: tensor([[1.8530]], requires_grad=True) 1.8529784679412842訓練后b參數值: Parameter containing: tensor([1.2702], requires_grad=True) 1.2701895236968994最小損失數值 : tensor(1.0439, grad_fn=<MseLossBackward>) 1.0438624620437622 500 500 5003.4 步驟3-4:模型驗證
NA
3.5 步驟3-5:模型可視化
# 3-4 可視化模型數據 #model返回的是總tensor,包含grad_fn,用data提取出的tensor是純tensor y_pred = model(x_train).data.numpy().squeeze() print(x_train.shape) print(y_pred.shape) print(y_line.shape)plt.scatter(x_train, y_train, label='SampleLabel') plt.plot(x_train, y_pred, label='Predicted') plt.plot(x_train, y_line, label='Line')plt.legend() plt.show() torch.Size([64, 1]) (64,) (64,) #顯示loss的歷史數據 plt.plot(loss_history, "r+") plt.title("loss value") #顯示w參數的歷史數據 plt.plot(w_history, "r+") plt.title("w value") #顯示b參數的歷史數據 plt.plot(b_history, "r+") plt.title("b value")第4章 模型部署
4.1 步驟4-1:模型部署
NA
作者主頁(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文網址:https://blog.csdn.net/HiWangWenBing/article/details/120600611
總結
以上是生活随笔為你收集整理的[Pytorch系列-25]:神经网络基础 - 单个无激活函数的神经元实现简单线性回归 - 2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [人工智能-深度学习-32]:卷积神经网
- 下一篇: springboot 整合谷歌 gRPC