[Pytorch系列-24]:神经网络基础 - 单个无激活函数的神经元实现简单线性回归 - 1
作者主頁(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文網址:https://blog.csdn.net/HiWangWenBing/article/details/120597547
目錄
前言 深度學習模型框架
第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 定義網絡模型 # in_features: 輸入數據的size = 1 # out_features: 輸處數據的size = 1 # bias = True: 打開偏置參數B print("定義并初始化模型") model = nn.Linear(in_features=1, out_features=1) print(model)print("\n獲取W,B參數的初始化值(隨機產生)") w,b = model.parameters() print(w) print(b) 定義并初始化模型 Linear(in_features=1, out_features=1, bias=True)獲取W,B參數的初始化值(隨機產生) Parameter containing: tensor([[-0.3860]], requires_grad=True) Parameter containing: tensor([-0.7404], requires_grad=True)備注:
神經網絡中w,b參數的初始值是隨機初始,每次調用nn.Linear創建神經網絡,W, B參數都不一樣。
2.4 步驟2-4:神經網絡輸出
# 2-4 定義網絡預測輸出 y_pred = model.forward(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 loss_fn = nn.MSELoss() print(loss_fn) MSELoss()3.2? 步驟3-2:定義優化器
# 3-2 定義優化器 Learning_rate = 0.01 #學習率# optimizer = SGD: 基本梯度下降法 # parameters:指明要優化的參數列表 # lr:指明學習率 optimizer = torch.optim.SGD(model.parameters(), lr = Learning_rate) print(optimizer) SGD ( Parameter Group 0dampening: 0lr: 0.01momentum: 0nesterov: Falseweight_decay: 0 )備注:優化器需要指明優化的參數列表和學習率
3.3 步驟3-3:模型訓練
# 3-3 模型訓練 # 定義迭代次數 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()#(4) 反向迭代optimizer.step()#(5) 復位優化器的梯度optimizer.zero_grad() w, b = model.parameters() loss_history.append(loss.item()) w_history.append(w.item())b_history.append(b.item())if(i % 100 == 0):print('epoch {} loss {:.4f}'.format(i, loss.item())) print("\n迭代完成") w, b = model.parameters() #parameters()返回的是一個迭代器指向的對象 print("\n訓練后w參數值:", w, w.item()) print("\n訓練后b參數值:", b, b.item()) print("\n最小損失數值 :", loss, loss.item()) 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.forward(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/120597547
總結
以上是生活随笔為你收集整理的[Pytorch系列-24]:神经网络基础 - 单个无激活函数的神经元实现简单线性回归 - 1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详解BindingResult
- 下一篇: 组策略的基本应用