【深度學習】深度學習的四個核心步驟:從房價預測看機器學習本質

文章目錄

  • 基礎概念與原理
  • 第一步:準備數據 - 構建學習的基礎
    • 數據生成與特征工程(選擇對預測有用的特征)
    • 數據集劃分的重要性
  • 第二步:設計模型 - 建立數學表達
    • 線性回歸模型的數學表達
      • 損失函數的設計哲學
  • 第三步:訓練優化 - 自動參數學習
    • 梯度下降的直觀理解
    • 學習率的重要性
    • 梯度清零的必要性
  • 第四步:預測評估 - 驗證學習效果
    • 模型預測與可視化
    • 泛化能力的評估
  • 核心概念總結與延伸
    • 關鍵術語的深層含義
    • 從線性回歸到深度學習的演進

深度學習本質上是一個數據驅動的參數優化過程,通過"準備數據→設計模型→訓練優化→預測評估"四個步驟,讓機器從歷史數據中學習規律,從而對未來進行預測。

這個過程就像人類學習一樣:我們先觀察大量歷史現象(數據準備),建立對世界的理解模型(模型設計),通過不斷試錯和調整來完善認知(訓練優化),最終能夠對新情況做出合理判斷(預測評估)。房價預測這個經典問題完美詮釋了這一過程。

?

基礎概念與原理

在深入四個步驟之前,我們需要理解幾個核心概念。機器學習與傳統編程的根本區別在于:傳統編程是"規則驅動",我們告訴計算機具體的計算步驟;而機器學習是"數據驅動",我們讓計算機從數據中自動發現規律。

具體來說,我們定義了一個參數化的模型(如線性函數 y = ax + b),然后通過優化算法自動找到最優的參數組合,使得模型能夠最好地擬合歷史數據。這個過程的核心是損失函數梯度下降:損失函數衡量模型預測與真實值的差距,梯度下降則通過計算損失函數對參數的導數,指導參數向減小損失的方向更新,逐漸求出最佳參數

?
完整代碼見:【初識pytorch】從房價預測來學習深度學習的四個步驟

第一步:準備數據 - 構建學習的基礎

數據是機器學習的燃料,沒有高質量的數據,再先進的算法也無法發揮作用。 在房價預測問題中,我們需要收集時間序列的房價數據,這些數據構成了模型學習的"經驗"。

數據生成與特征工程(選擇對預測有用的特征)

import torch
import matplotlib.pyplot as plt
import numpy as np# 生成時間特征:0-100個月
# torch.linspace(start, end, steps) 生成從start到end的steps個均勻分布的數字
# start=0: 起始時間(第0個月)
# end=100: 結束時間(第100個月)  
# steps=100: 生成100個時間點
x = torch.linspace(0, 100, 100).type(torch.FloatTensor)# 生成房價數據:y = x + 噪聲(模擬真實房價趨勢)
# torch.randn(size) 生成服從標準正態分布N(0,1)的隨機數
# size=100: 生成100個隨機數
# * 10: 將標準差從1放大到10,模擬房價的波動性
rand = torch.randn(100) * 10  # 添加隨機噪聲
y = x + rand  # 房價 = 時間趨勢 + 隨機波動

特征工程的基本原理: 特征工程是機器學習中的關鍵步驟,它涉及從原始數據中提取、轉換和選擇對預測任務有用的特征。在房價預測中,我們選擇時間作為特征,這基于以下假設:

  1. 時間趨勢假設:房價通常隨時間呈現某種趨勢(上漲、下跌或平穩)
  2. 連續性假設:相鄰時間點的房價變化是連續的,不會出現劇烈跳躍
  3. 可預測性假設:歷史房價模式對未來房價有預測價值

數學表達式: 我們假設房價與時間的關系為:
yi=xi+?iy_i = x_i + \epsilon_iyi?=xi?+?i?
其中:

  • yiy_iyi? 是第i個月的房價
  • xix_ixi? 是第i個月的時間點
  • ?i~N(0,102)\epsilon_i \sim N(0, 10^2)?i?N(0,102) 是隨機噪聲項

這個模型假設房價隨時間線性增長,但受到隨機因素影響。

?

數據集劃分的重要性

# 訓練集:用于模型學習(前90個月)
# x[: -10] 表示從開始到倒數第11個元素(包含)
# 即索引0到89,共90個數據點
x_train = x[: -10]
y_train = y[: -10]# 測試集:用于評估泛化能力(后10個月)
# x[-10 :] 表示從倒數第10個元素到末尾
# 即索引90到99,共10個數據點
x_test = x[-10 :]
y_test = y[-10 :]

數據集劃分的核心目的是模擬真實預測場景。 訓練集相當于歷史經驗,測試集相當于未來情況。模型只能看到訓練數據,在測試集上的表現才能真正反映其預測能力。這種劃分方式確保了模型評估的客觀性,避免了"作弊"現象。

?

第二步:設計模型 - 建立數學表達

模型是對現實世界的數學抽象,它決定了機器如何理解和預測數據。 在房價預測中,我們假設房價與時間存在線性關系,這是一個簡化的假設,但為理解機器學習原理提供了清晰的框架。

線性回歸模型的數學表達

# 初始化模型參數(需要梯度計算)
# torch.rand(size) 生成[0,1)之間的均勻分布隨機數
# requires_grad=True 告訴PyTorch需要計算這個張量的梯度
a = torch.rand(1, requires_grad = True)  # 斜率參數,初始化為隨機值
b = torch.rand(1, requires_grad = True)  # 截距參數,初始化為隨機值# 線性模型:y = ax + b
# expand_as(x_train) 將a和b的維度擴展到與x_train相同
# 這樣可以進行元素級別的乘法運算
predictions = a.expand_as(x_train) * x_train + b.expand_as(x_train)

模型設計的核心是參數化表達。 我們將房價預測問題轉化為尋找最優參數 a 和 b 的問題。這兩個參數控制了直線的斜率和位置,通過調整它們,我們可以擬合不同的線性關系。

數學表達式: 線性回歸模型可以表示為:
y^i=axi+b\hat{y}_i = ax_i + by^?i?=axi?+b
其中:

  • y^i\hat{y}_iy^?i? 是模型對第i個月房價的預測值
  • aaa 是斜率參數,表示房價隨時間的變化率
  • bbb 是截距參數,表示時間起點(x=0)時的房價
  • xix_ixi? 是第i個月的時間點

?

損失函數的設計哲學

# 均方誤差損失函數
# predictions: 模型預測值
# y_train: 真實標簽值
# (predictions - y_train) ** 2: 計算每個樣本的平方誤差
# torch.mean(): 計算所有樣本的平均誤差
loss = torch.mean((predictions - y_train) ** 2)

損失函數是模型優化的"指南針",它量化了模型預測的準確性。 均方誤差(Mean Squared Error, MSE)的數學表達式為:

L(a,b)=1n∑i=1n(yi?y^i)2=1n∑i=1n(yi?(axi+b))2L(a, b) = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2 = \frac{1}{n}\sum_{i=1}^{n}(y_i - (ax_i + b))^2L(a,b)=n1?i=1n?(yi??y^?i?)2=n1?i=1n?(yi??(axi?+b))2

其中:

  • L(a,b)L(a, b)L(a,b) 是損失函數,它是參數a和b的函數
  • nnn 是訓練樣本數量(這里是90)
  • yiy_iyi? 是第i個樣本的真實房價
  • y^i=axi+b\hat{y}_i = ax_i + by^?i?=axi?+b 是第i個樣本的預測房價

均方誤差之所以被廣泛使用,是因為它具有幾個重要性質:

  1. 可微性:MSE是連續可微的,便于梯度計算
  2. 對稱性:正負誤差同等對待,符合直覺
  3. 懲罰性:大誤差被平方放大,小誤差相對減小,鼓勵模型關注大誤差
  4. 統計意義:MSE是方差的無偏估計,具有統計學意義

更重要的是,損失函數的選擇反映了我們對"什么是好的預測"的理解。在房價預測中,我們關心的是預測值與真實值的平均差距,因此選擇均方誤差是合理的。

?

第三步:訓練優化 - 自動參數學習

訓練過程是機器學習的核心,它體現了"從數據中學習"的本質。 通過梯度下降算法,模型能夠自動調整參數,逐步接近最優解。

梯度下降的直觀理解

# 初始化參數和學習率
a = torch.rand(1, requires_grad = True)  # 斜率參數,隨機初始化
b = torch.rand(1, requires_grad = True)  # 截距參數,隨機初始化
learning_rate = 0.0001  # 學習率,控制參數更新步長for i in range(1000):  # 訓練1000輪# 前向傳播:計算預測值predictions = a.expand_as(x_train) * x_train + b.expand_as(x_train)# 計算損失loss = torch.mean((predictions - y_train) ** 2)# 反向傳播:計算梯度# backward() 自動計算損失函數對所有requires_grad=True的張量的梯度loss.backward()# 參數更新:梯度下降# a.data.add_(-learning_rate * a.grad.data) 等價于 a = a - learning_rate * ?L/?a# 負號表示向梯度相反方向更新(下山方向)a.data.add_(- learning_rate * a.grad.data)b.data.add_(- learning_rate * b.grad.data)# 清空梯度(防止累積)# 每次迭代后必須清零梯度,否則梯度會累積a.grad.data.zero_()b.grad.data.zero_()

梯度下降算法可以類比為"盲人下山"的過程。 想象一個盲人站在山上,想要找到最低點。他會在原地轉一圈,感受哪個方向下降最快(梯度方向),然后朝那個方向邁出一步(參數更新)。重復這個過程,最終會到達山谷的最低點(損失函數的最小值)。

梯度下降的數學原理: 對于我們的線性回歸問題,梯度下降的更新公式為:

at+1=at?α?L?aa_{t+1} = a_t - \alpha \frac{\partial L}{\partial a}at+1?=at??α?a?L?
bt+1=bt?α?L?bb_{t+1} = b_t - \alpha \frac{\partial L}{\partial b}bt+1?=bt??α?b?L?

其中:

  • at,bta_t, b_tat?,bt? 是第t次迭代的參數值
  • α\alphaα 是學習率(learning_rate)
  • ?L?a,?L?b\frac{\partial L}{\partial a}, \frac{\partial L}{\partial b}?a?L?,?b?L? 是損失函數對參數的偏導數

偏導數的計算: 對于MSE損失函數:
L(a,b)=1n∑i=1n(yi?(axi+b))2L(a, b) = \frac{1}{n}\sum_{i=1}^{n}(y_i - (ax_i + b))^2L(a,b)=n1?i=1n?(yi??(axi?+b))2

偏導數為:
?L?a=?2n∑i=1n(yi?(axi+b))xi\frac{\partial L}{\partial a} = -\frac{2}{n}\sum_{i=1}^{n}(y_i - (ax_i + b))x_i?a?L?=?n2?i=1n?(yi??(axi?+b))xi?
?L?b=?2n∑i=1n(yi?(axi+b))\frac{\partial L}{\partial b} = -\frac{2}{n}\sum_{i=1}^{n}(y_i - (ax_i + b))?b?L?=?n2?i=1n?(yi??(axi?+b))

這些偏導數告訴我們在當前參數值下,損失函數對每個參數的敏感度,即參數微小變化時損失函數的變化率。

?

學習率的重要性

學習率是訓練過程中的關鍵超參數,它決定了參數更新的步長。 學習率太大,可能導致震蕩或發散;學習率太小,收斂速度會很慢。選擇合適的學習率需要在收斂速度和穩定性之間找到平衡。

學習率的影響機制:

  1. 學習率過大(如0.1)

    • 參數更新步長過大
    • 可能在最優解附近震蕩
    • 甚至可能發散,損失函數不收斂
  2. 學習率過小(如0.00001)

    • 參數更新步長過小
    • 收斂速度很慢
    • 需要更多迭代次數才能達到最優解
  3. 合適的學習率(如0.0001)

    • 在穩定性和收斂速度之間取得平衡
    • 能夠平滑地收斂到最優解

學習率選擇經驗法則: 通常從0.01開始嘗試,如果震蕩則減小,如果收斂太慢則增大。在我們的房價預測問題中,0.0001是一個相對保守的選擇,確保訓練過程穩定。

?

梯度清零的必要性

梯度清零是PyTorch訓練中的關鍵步驟,它防止了梯度累積導致的錯誤。 每次反向傳播后,梯度信息會累積在參數的 .grad 屬性中。如果不清零,下一次迭代的梯度會與之前的梯度相加,導致參數更新錯誤。

梯度累積的數學解釋: 如果不清零梯度,第t次迭代的參數更新實際上是:
at+1=at?α∑k=1t?Lk?aa_{t+1} = a_t - \alpha \sum_{k=1}^{t} \frac{\partial L_k}{\partial a}at+1?=at??αk=1t??a?Lk??

這會導致參數更新過大,訓練不穩定。正確的做法是每次只使用當前批次的梯度:
at+1=at?α?Lt?aa_{t+1} = a_t - \alpha \frac{\partial L_t}{\partial a}at+1?=at??α?a?Lt??

?

第四步:預測評估 - 驗證學習效果

預測評估是檢驗模型學習效果的關鍵環節,它告訴我們模型是否真正學到了有用的規律。 在房價預測中,我們不僅要看模型在歷史數據上的表現,更要看它對新數據的預測能力。

模型預測與可視化

# 在測試集上進行預測
# 使用訓練好的參數a和b對測試數據進行預測
predictions = a.expand_as(x_test) * x_test + b.expand_as(x_test)# 可視化預測結果
plt.figure(figsize = (10, 7))  # 設置圖形大小
# 繪制訓練數據點
plt.plot(x_train.numpy(), y_train.numpy(), 'o', label='Training Data')
# 繪制測試數據點
plt.plot(x_test.numpy(), y_test.numpy(), 's', label='Test Data')
# 繪制擬合直線(在訓練數據范圍內)
plt.plot(x_train.numpy(), a.data.numpy() * x_train.numpy() + b.data.numpy(), label='Fitted Line')
# 繪制預測點
plt.plot(x_test.numpy(), predictions.numpy(), 'o', label='Predictions')
plt.xlabel('Time (months)')  # x軸標簽
plt.ylabel('House Price')    # y軸標簽
plt.legend()                 # 顯示圖例
plt.show()                   # 顯示圖形

預測結果的可視化幫助我們直觀理解模型的學習效果。 通過比較訓練數據、測試數據、擬合直線和預測點,我們可以判斷模型是否真正學到了房價隨時間變化的規律,以及這種規律是否具有泛化能力。

模型評估指標: 除了可視化,我們還可以計算定量指標:

  1. 訓練集MSE:衡量模型在訓練數據上的擬合程度
  2. 測試集MSE:衡量模型的泛化能力
  3. R2決定系數:衡量模型解釋數據變異性的比例
    ?

泛化能力的評估

泛化能力是衡量模型質量的核心指標,它反映了模型對新數據的適應能力。 一個好的模型不僅要在訓練數據上表現良好,更要能夠準確預測未見過的數據。這正是我們劃分訓練集和測試集的原因。

過擬合與欠擬合:

  1. 欠擬合(Underfitting)

    • 模型過于簡單,無法捕捉數據中的規律
    • 訓練集和測試集誤差都很高
    • 解決方案:增加模型復雜度或特征
  2. 過擬合(Overfitting)

    • 模型過于復雜,記住了訓練數據的噪聲
    • 訓練集誤差很低,但測試集誤差很高
    • 解決方案:正則化、增加數據、減少模型復雜度
  3. 良好擬合

    • 模型復雜度適中,能夠泛化到新數據
    • 訓練集和測試集誤差都較低且接近

?

核心概念總結與延伸

通過房價預測這個實例,我們不僅學習了深度學習的四個核心步驟,更重要的是理解了機器學習的本質思想。機器學習不是簡單的數據擬合,而是一種從數據中自動發現規律的方法論。

關鍵術語的深層含義

  • 模型:不僅是一個數學函數,更是對現實世界的假設和抽象。它反映了我們對數據生成過程的理解,決定了機器如何"思考"問題。

  • 參數:模型中的可調節變量,通過優化這些參數來改善預測效果。參數的數量和類型決定了模型的表達能力,但過多的參數可能導致過擬合。

  • 損失函數:量化模型質量的指標,指導優化方向。損失函數的選擇直接影響模型的學習目標,不同的損失函數適用于不同的任務類型。

  • 梯度下降:自動尋找最優參數的算法,體現了"學習"的本質。它通過計算損失函數對參數的導數,指導參數向減小損失的方向更新,是深度學習中最核心的優化算法。

  • 泛化能力:模型的核心價值,決定了其實際應用效果。泛化能力強的模型能夠在未見過的數據上表現良好,這是機器學習模型的終極目標。

?

從線性回歸到深度學習的演進

線性回歸雖然簡單,但它包含了深度學習的所有核心要素。當我們把線性函數 y = ax + b 替換為復雜的神經網絡時,基本原理保持不變:我們仍然需要準備數據、設計模型、訓練優化和預測評估。唯一的區別是,神經網絡的參數更多,模型更復雜,能夠學習更復雜的非線性關系。

神經網絡與線性回歸的關系: 神經網絡可以看作是多個線性變換和非線性激活函數的組合:
f(x)=σ(W2σ(W1x+b1)+b2)f(x) = \sigma(W_2 \sigma(W_1 x + b_1) + b_2)f(x)=σ(W2?σ(W1?x+b1?)+b2?)

其中:

  • W1,W2W_1, W_2W1?,W2? 是權重矩陣(相當于線性回歸中的參數a)
  • b1,b2b_1, b_2b1?,b2? 是偏置向量(相當于線性回歸中的參數b)
  • σ\sigmaσ 是非線性激活函數(如ReLU、sigmoid等)

因此,理解線性回歸不僅是為了解決簡單的預測問題,更是為了建立對機器學習本質的深刻認識,為后續學習更復雜的深度學習模型奠定堅實的基礎。 線性回歸教會了我們參數優化、損失函數設計、梯度下降等核心概念,這些概念在深度學習中同樣適用,只是規模更大、復雜度更高。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93339.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93339.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93339.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java使用Apache POI讀取Excel文件

一、下載jar包 Apache POI有提供下載地址:Apache Archive Distribution Directory,直接打開鏈接并選擇所需的版本下載即可(雙擊last modified可按最新更新時間排序),本文章以poi-bin-4.1.1-20191023.zip為例,進入官網下載鏈接后&…

VLMs開發——基于Qwen2.5-VL 實現視覺語言模型在目標檢測中的層級結構與實現方法

概述 目標檢測作為計算機視覺領域的核心任務,傳統方法依賴于 YOLO 等視覺模型對預定義類別進行位置預測。然而,此類方法受限于預訓練類別體系,難以實現靈活的視覺交互。視覺語言模型(Vision-Language Models, VLMs)的…

Spring Boot + Redis + 布隆過濾器防止緩存穿透

? 項目概述 在高并發系統中,緩存穿透 是一個經典問題:當惡意請求或業務邏輯查詢一個數據庫中不存在的 Key,由于緩存中也沒有,請求會直接打到數據庫,導致數據庫壓力激增,甚至宕機。 本項目使用 Spring Bo…

電子電路學習日記

這里的 K 表示 千歐(kilo-ohm),而 F 在很多國產 EDA 軟件(比如立創EDA、Altium 的一些中文封裝庫)里用來標注精度(公差), F 代表 1% 精度(英文 Fine tolerance&#xff0…

oracle 怎么實現讀一致性

? Oracle 數據塊讀一致性判斷流程(正確版) 假設:Query SCN 查詢開始的 SCN(Query SCN) lastSubbmit SCN 行中最新的提交scn Row SCN 行最后修改的 SCN(存儲在行頭,通過 ITL 推導&#xff09…

ISTA為什么要加上軟閾值激活函數?r若沒有L1 正則化也要加其他激活函數嗎?

一、加上軟閾值函數(Soft-thresholding)是因為 LISTA(以及它的前身 ISTA)本質上是在求解一個 帶 L1 正則化的稀疏優化問題: min?x12∥y?Ax∥22λ∥x∥1 \min_x \frac{1}{2} \|y - Ax\|_2^2 \lambda \|x\|_1 xmin?2…

線程P4 | 線程安全問題及解決方法

何為線程安全?要談及何為線程安全,總得說來,我們可以用一句話來概況:如果在多線程環境下代碼運行結果和我們預期是相符的,即和單線程環境下的運行結果相同,那么我們就稱這個程序是線程安全的,反…

水印消失術!JavaAI深度學習去水印技術深度剖析

一、飛算JavaAI平臺概述1.1 飛算JavaAI定位與技術特色 飛算JavaAI是國內領先的智能化Java開發平臺,通過AI技術賦能軟件開發全流程,特別針對小程序、Web應用等輕量級開發場景提供*零基礎編程→高質量交**的一站式解決方案。其核心優勢體現在: …

醋酸釓:醫學影像與科技創新中的重要角色

醋酸釓是一種由釓元素和醋酸根離子組成的化合物。釓是稀土金屬之一,常常用于醫學影像、核磁共振成像(MRI)以及某些工業應用。醋酸釓作為釓的鹽之一,具有許多獨特的性質,尤其在醫學和科學研究領域表現突出。一、醋酸釓的…

插入排序專欄

插入排序(Insertion Sort)是一種簡單直觀的排序算法,其思想源于我們日常生活中整理撲克牌的方式。本文將詳細解析插入排序的工作原理,通過 Java 實現代碼進行分析,深入探討其時間復雜度的計算過程,并闡述其…

高效Unicode字符表示:一種創新的詞表構建策略分析

在自然語言處理中,處理多語言和特殊字符的表示始終是一項挑戰。本文將分析一種創新的詞表構建策略,該策略通過數學優化和雙token機制,在保持詞表緊湊的同時實現了對Unicode字符的全面覆蓋。 詞表構建的核心邏輯 該策略包含四個關鍵步驟&#…

python與物聯網基礎知識

軟件準備:軟件:thonny-4.0.1-windows-portable(win10,11系統64位)驅動:CP210x_Windows_Drivers固件:esp8266-1m-20220618-v1.19.1.bin物料準備:面包板、開發板、電源線一、安裝與調試:1.在軟件文件中找到th…

SVN提交服務器拒絕訪問的問題

SVN提交服務器拒絕訪問的問題 介紹 分析 1.服務器的SVN沒有開啟 2.服務器的網絡端口除了問題沒有開放端口 3.客戶端的SVN配置除了問題刷新一下數據 4.客戶端的SVN重裝 找原因 1.初步以為是**防火墻**的問題 2.網絡運營商的問題 總結 介紹 SVN相信大家都用過,今天反饋一個比較…

【Linux】庫制作與原理

前言 本篇博客我們來認識下庫方面的知識 💓 個人主頁:zkf ? 文章專欄:Linux 若有問題 評論區見📝 🎉歡迎大家點贊👍收藏?文章 目錄 1.什么是庫 2.靜態庫 2.1靜態庫的生成 2.2靜態庫的使用 3.動態庫 …

Android ADB 常用指令全解析

ADB(Android Debug Bridge)是 Android 開發和測試不可或缺的調試工具,它建立了電腦與 Android 設備之間的通信橋梁,通過命令行指令可實現對設備的全方位控制。掌握 ADB 指令能大幅提升開發效率,解決各類調試難題。本文…

使用 Rust 創建 32 位 DLL 的完整指南

使用 Rust 創建 32 位 DLL 的完整指南 在 Rust 中創建 32 位 DLL 需要特定的工具鏈配置和編譯選項。以下是詳細步驟和最佳實踐: 環境準備 1. 安裝 Rust 工具鏈 # 安裝 Rust curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh# 安裝 32 位目標 rustu…

算法基礎 第3章 數據結構

1.單調棧 1.什么是單調棧 單調棧&#xff0c;即具有單調性的棧。 實現 #include <iostream> #include <stack> using namespace std; const int N 3e6 10; int a[N], n; void test1() {stack<int> st; // 維護?個單調遞增的棧for(int i 1; i < n; i…

[機器學習]08-基于邏輯回歸模型的鳶尾花數據集分類

使用sklearn的LogisticRegression多分類模型程序代碼&#xff1a;import numpy as np from sklearn.linear_model import LogisticRegression import matplotlib.pyplot as plt import matplotlib as mpl from sklearn import datasets from sklearn import preprocessing impo…

【STM32入門教程】stm32簡介

一、STM32簡介二、ARM三、stm32f103c8t6四、命名規則五、系統結構六、引腳定義七、啟動配置一般情況下&#xff0c;都是在flash開始程序&#xff0c;而啟動程序也可以進行配置在其他地方啟動程序&#xff0c;通過配置boot0和boot1來進行配置八、最小系統電路

SAE J2716多協議網關的硬件架構與實時協議轉換機制解析

本文解析符合SAE J2716標準的工業級協議轉換設備技術架構&#xff0c;通過拆解其四路雙向SENT通道與多總線&#xff08;CANFD/Ethernet/USB&#xff09;的實時交互機制、MicroSD獨立日志系統設計及模擬量動態映射方案&#xff0c;為汽車電子與工業通信開發者提供可復用的技術參…