《深度學習實戰》第1集:深度學習基礎回顧與框架選擇

本專欄系列博文旨在幫助讀者從深度學習的基礎知識逐步進階到前沿技術,涵蓋理論、實戰和行業應用。每集聚焦一個核心知識點,并結合實際項目進行實踐,避免空談理論,簡潔明快,快速切入代碼,所有代碼都經過驗證,確保內容既深入又實用。同時,我們將探討與當下最流行的大模型(如 GPT、BERT、Diffusion Models 等)相關的技術和知識點。

《深度學習實戰》第1集:深度學習基礎回顧與框架選擇


引言

深度學習作為人工智能的核心技術之一,已經在計算機視覺、自然語言處理、語音識別等領域取得了突破性進展。然而,隨著模型規模的不斷增長,深度學習也逐漸從簡單的神經網絡發展到復雜的大規模模型(如 GPT、BERT 等)。在本集中,我們將回顧深度學習的基礎知識,并探討 TensorFlow 和 PyTorch 這兩大主流框架的特點與適用場景。最后,通過一個實戰項目——使用 TensorFlow 和 PyTorch 構建全連接神經網絡解決 MNIST 手寫數字分類問題,幫助你鞏固理論并動手實踐。


在這里插入圖片描述

一、深度學習的基本概念

1.1 神經網絡,機器學習 和 深度學習

神經網絡是深度學習的核心結構,由多個層(Layer)組成,每層包含若干神經元(Neuron)。每個神經元接收輸入信號,經過加權求和并通過激活函數生成輸出。

神經網絡結構圖:

圖 1: 全連接神經網絡的典型結構
在這里插入圖片描述

機器學習 和 深度學習 的簡單對比:

圖 2: 機器學習 Vs 深度學習
在這里插入圖片描述
機器學習和深度學習都是人工智能領域的子領域,但它們在方法、復雜性和應用方面有所不同。以下是一個簡單的對比:

機器學習 (Machine Learning, ML):

  1. 定義
    • 機器學習是使計算機能夠從數據中學習并做出預測或決策的技術。
  2. 歷史
    • 機器學習的發展可以追溯到20世紀50年代和60年代,但直到最近幾十年才因計算能力的提升而得到廣泛應用。
  3. 方法
    • 包括各種算法,如線性回歸、邏輯回歸、決策樹、隨機森林、支持向量機等。
    • 通常需要手動提取特征(特征工程)。
  4. 數據需求
    • 通常需要較少的數據來訓練模型。
  5. 計算資源
    • 相對較少的計算資源。
  6. 應用
    • 廣泛應用于數據分析、預測建模、推薦系統等。

深度學習 (Deep Learning, DL):

  1. 定義
    • 深度學習是一種特殊的機器學習方法,它使用多層神經網絡來模擬人腦處理信息的方式。
  2. 歷史
    • 深度學習在21世紀初開始獲得關注,特別是隨著大數據和計算能力的顯著提升。
  3. 方法
    • 主要包括深度神經網絡,如卷積神經網絡(CNN)、循環神經網絡(RNN)、長短期記憶網絡(LSTM)等。
    • 能夠自動從數據中學習特征(端到端學習)。
  4. 數據需求
    • 需要大量的數據來訓練模型。
  5. 計算資源
    • 需要高性能的計算資源,如GPU或TPU。
  6. 應用
    • 主要應用于圖像識別、語音識別、自然語言處理、自動駕駛等領域。

對比總結:

  • 復雜性:深度學習模型通常比傳統機器學習模型更復雜,擁有更多的參數和層。
  • 數據需求:深度學習需要更多的數據來訓練,而傳統機器學習算法在小數據集上可能表現更好。
  • 計算資源:深度學習模型訓練通常需要更強大的計算資源。
  • 特征工程:深度學習減少了手動特征工程的需求,而機器學習通常需要更多的特征工程。
  • 應用領域:深度學習在處理圖像、視頻和語音數據方面表現優異,而機器學習在處理結構化數據和一些特定任務上可能更高效。
    兩者都是人工智能領域中非常重要的技術,選擇哪種方法取決于具體的應用場景、數據可用性和計算資源。

1.2 激活函數

激活函數為神經網絡引入非線性特性,使其能夠擬合復雜的函數關系。常見的激活函數包括:

  • ReLU(Rectified Linear Unit)f(x) = max(0, x),計算簡單且梯度不會消失。
  • Sigmoidf(x) = 1 / (1 + exp(-x)),適用于概率輸出。
  • Softmax:常用于多分類任務,將輸出轉化為概率分布。

1.3 損失函數

損失函數衡量模型預測值與真實值之間的差距,是優化的目標。常見損失函數包括:

  • 交叉熵損失(Cross-Entropy Loss):適用于分類任務。
  • 均方誤差(Mean Squared Error, MSE):適用于回歸任務。

1.4 優化器

優化器通過調整權重參數來最小化損失函數。常用優化器包括:

  • SGD(隨機梯度下降):簡單但收斂速度慢。
  • Adam:結合動量和自適應學習率,適合大多數場景。

二、常見深度學習框架對比:TensorFlow vs PyTorch

在這里插入圖片描述

2.1 TensorFlow

  • 優點
    • 成熟穩定,支持大規模分布式訓練。
    • 提供強大的可視化工具 TensorBoard。
    • 部署友好,支持多種硬件加速(如 TPU)。
  • 缺點
    • API 設計較為復雜,初學者上手難度較高。

2.2 PyTorch

  • 優點
    • 動態計算圖設計,靈活性高,適合研究和快速原型開發。
    • 社區活躍,文檔豐富。
  • 缺點
    • 在生產環境中的部署支持相對較弱(可通過 TorchServe 改善)。
對比總結:
特性TensorFlowPyTorch
易用性中等
靈活性靜態圖動態圖
分布式訓練中等
生產部署中等

三、GPU 加速與分布式訓練簡介

3.1 GPU 加速

GPU(圖形處理器)因其并行計算能力,成為深度學習訓練的核心硬件。相比于 CPU,GPU 可以顯著加速矩陣運算,從而縮短訓練時間。

GPU 加速示意圖:

圖 2: GPU 并行計算加速深度學習訓練

3.2 分布式訓練

對于超大規模模型(如 GPT-3),單個 GPU 的顯存可能不足。分布式訓練通過將模型或數據分布在多個設備上,解決了這一問題。常見方法包括:

  • 數據并行(Data Parallelism):將數據分片到不同設備。
  • 模型并行(Model Parallelism):將模型分片到不同設備。

四、實戰項目:MNIST 手寫數字分類

我們將分別使用 TensorFlow 和 PyTorch 構建全連接神經網絡,解決 MNIST 數據集的手寫數字分類問題。

4.1 數據集介紹

MNIST 數據集包含 60,000 張訓練圖像和 10,000 張測試圖像,每張圖像為 28x28 像素的灰度圖片,標簽為 0-9 的數字。

MNIST 數據集樣例:

圖 3: MNIST 數據集中的手寫數字樣例

4.2 使用 TensorFlow 實現

import tensorflow as tf
from tensorflow.keras import layers, models# 加載數據
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0  # 歸一化# 構建模型
model = models.Sequential([layers.Flatten(input_shape=(28, 28)),layers.Dense(128, activation='relu'),layers.Dropout(0.2),layers.Dense(10, activation='softmax')
])# 編譯模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 訓練模型
model.fit(x_train, y_train, epochs=5)# 評估模型
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Test Accuracy: {test_acc:.4f}")

程序運行后輸出:

Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11490434/11490434 ━━━━━━━━━━━━━━━━━━━━ 26s 2us/step
Epoch 1/5
D:\python_projects\jupyter_demo\lib\site-packages\keras\src\layers\reshaping\flatten.py:37: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.super().__init__(**kwargs)
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 3s 1ms/step - accuracy: 0.8592 - loss: 0.4790
Epoch 2/5
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 3s 1ms/step - accuracy: 0.9560 - loss: 0.1525
Epoch 3/5
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 3s 1ms/step - accuracy: 0.9662 - loss: 0.1094
Epoch 4/5
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 3s 1ms/step - accuracy: 0.9739 - loss: 0.0841
Epoch 5/5
1875/1875 ━━━━━━━━━━━━━━━━━━━━ 3s 1ms/step - accuracy: 0.9778 - loss: 0.0728
313/313 ━━━━━━━━━━━━━━━━━━━━ 0s 958us/step - accuracy: 0.9760 - loss: 0.0788
Test Accuracy: 0.9797

可以看到一共五個批次的模型訓練,模型精確度為97.97%

4.3 使用 PyTorch 實現

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms# 數據預處理
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True)
test_dataset = datasets.MNIST(root='./data', train=False, transform=transform)train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=64, shuffle=False)# 定義模型
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(28 * 28, 128)self.relu = nn.ReLU()self.dropout = nn.Dropout(0.2)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = x.view(-1, 28 * 28)x = self.relu(self.fc1(x))x = self.dropout(x)x = self.fc2(x)return xmodel = Net()# 定義損失函數和優化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters())# 訓練模型
for epoch in range(5):for images, labels in train_loader:optimizer.zero_grad()outputs = model(images)loss = criterion(outputs, labels)loss.backward()optimizer.step()# 測試模型
correct = 0
total = 0
with torch.no_grad():for images, labels in test_loader:outputs = model(images)_, predicted = torch.max(outputs, 1)total += labels.size(0)correct += (predicted == labels).sum().item()print(f"Test Accuracy: {correct / total:.4f}")

程序運行后輸出:

100.0%
100.0%
100.0%
100.0%
Test Accuracy: 0.9500

可以看到模型精確度為95%,相對TensorFlow低一些。

4.4 基于項目實踐的 TensorFlow vs PyTorch 進一步對比分析

本項目對比分析

  1. 代碼結構
    • TensorFlow:使用Keras API,代碼結構清晰,層次分明,適合快速搭建模型。
    • PyTorch:需要手動定義模型類和前向傳播函數,代碼更靈活,但稍微復雜一些。
  • 在本項目中,可以看到 TensorFlow 的代碼非常精簡,模型訓練速度也很快,PyTorch 代碼是 TensorFlow 的兩倍,訓練速度也相對較慢。
  1. 訓練過程

    • TensorFlowmodel.fit() 方法封裝了訓練循環,使用起來非常方便。
    • PyTorch:需要手動編寫訓練循環,靈活性更高,但需要更多的代碼。
  2. 調試

    • TensorFlow:由于靜態圖的存在,調試相對困難,但Eager Execution模式改善了這一點。
    • PyTorch:動態圖使得調試更加直觀,可以直接打印張量的值。
  3. 部署

    • TensorFlow:更適合生產環境,支持多種部署方式。
    • PyTorch:雖然也有部署工具,但相對來說不如TensorFlow成熟。

相同點

  1. 深度學習支持:兩者都支持構建和訓練深度神經網絡,包括卷積神經網絡(CNN)、循環神經網絡(RNN)等。
  2. 自動微分:兩者都提供了自動微分功能,可以自動計算梯度,簡化了模型的訓練過程。
  3. GPU加速:兩者都支持使用GPU進行加速,提高模型訓練和推理的速度。
  4. 社區和資源:兩者都有龐大的社區支持和豐富的文檔、教程資源。

不同點

  1. 編程風格

    • TensorFlow:早期版本采用靜態計算圖,需要先定義計算圖再執行。雖然從2.0版本開始引入了Eager Execution模式,但默認仍然是基于計算圖的。
    • PyTorch:采用動態計算圖(也稱為“define-by-run”),代碼更加直觀,調試更容易。
  2. 易用性

    • TensorFlow:API較為復雜,初學者可能需要更多時間來熟悉。不過,Keras作為其高級API,大大簡化了模型構建過程。
    • PyTorch:API設計更接近Python原生,代碼簡潔易讀,適合快速原型開發。
  3. 部署

    • TensorFlow:在生產環境中的部署更為成熟,尤其是通過TensorFlow Serving和TensorFlow Lite,可以方便地將模型部署到服務器或移動設備上。
    • PyTorch:雖然也有TorchServe等工具,但在生產部署方面相對不如TensorFlow成熟。
  4. 生態系統

    • TensorFlow:擁有更廣泛的生態系統,包括TensorBoard(可視化工具)、TFX(端到端機器學習平臺)等。
    • PyTorch:生態系統也在快速發展,特別是在研究領域,許多最新的研究成果都是基于PyTorch實現的。

優勢和專長

  • TensorFlow

    • 優勢:強大的生產部署能力、豐富的生態系統、大規模分布式訓練支持。
    • 專長:適用于企業級應用、大規模生產環境、跨平臺部署。
  • PyTorch

    • 優勢:靈活的動態計算圖、易于調試、簡潔的API。
    • 專長:適合研究和實驗、快速原型開發、學術界廣泛使用。

在這里插入圖片描述

為了更直觀地對比 TensorFlow 和 PyTorch 在 MNIST 手寫數字分類任務中的表現,我們整理了以下表格:

對比維度TensorFlowPyTorch優劣分析
代碼簡潔性TensorFlow 的 Keras API 提供了高層次封裝,代碼簡潔易讀。PyTorch 的動態計算圖設計使得代碼更加靈活,但需要手動定義訓練循環。TensorFlow 更適合快速構建模型,而 PyTorch 更適合研究和調試復雜的模型。
靈活性靜態圖設計,靈活性較低,適合生產環境。動態圖設計,靈活性高,適合研究和實驗。PyTorch 的靈活性更高,但在生產環境中可能需要額外的工作來優化性能。
性能TensorFlow 在大規模分布式訓練中表現優異,尤其是在 TPU 上。PyTorch 的性能與 TensorFlow 相當,但在某些場景下可能稍遜于 TensorFlow。TensorFlow 在生產環境中的性能優勢明顯,尤其是需要分布式訓練時。
社區與生態TensorFlow 社區龐大,生態系統完善,支持多種硬件加速和部署工具。PyTorch 社區活躍,文檔豐富,適合學術研究。TensorFlow 的生態更適合工業應用,而 PyTorch 更受研究人員歡迎。
可視化工具提供強大的 TensorBoard 工具,方便監控訓練過程和模型性能。可視化工具較少,通常需要第三方庫(如 TensorBoardX)。TensorFlow 在可視化方面具有明顯優勢。
部署支持支持多種部署方式(如 TensorFlow Serving、TensorRT),適合生產環境。部署支持較弱,但可以通過 TorchServe 或 ONNX 改善。TensorFlow 在生產環境中的部署支持更為成熟。

五、前沿關聯:為什么需要更深、更復雜的網絡?

隨著任務復雜度的增加,淺層網絡往往無法捕捉數據中的高層次特征。例如:

  • 計算機視覺:ResNet 通過殘差連接解決了深層網絡的梯度消失問題。
  • 自然語言處理:Transformer 通過自注意力機制實現了對長距離依賴的建模。
  • 大模型:GPT-3 等超大規模模型通過海量參數和數據,展現出驚人的泛化能力。
大模型的優勢:
  • 更強的表達能力:能夠學習更復雜的模式。
  • 遷移學習:通過預訓練,在小樣本任務中表現出色。
大模型的挑戰:
  • 計算資源需求高:需要大量 GPU/TPU 和存儲空間。
  • 訓練成本高昂:一次完整訓練可能耗費數百萬美元。

總結

本集回顧了深度學習的基礎知識,包括神經網絡、激活函數、損失函數和優化器,并對比了 TensorFlow 和 PyTorch 的特點。通過 MNIST 手寫數字分類的實戰項目,我們展示了如何使用這兩種框架構建簡單的全連接神經網絡,并通過表格對比了它們的優劣。最后,我們探討了大模型的背景及其在深度學習領域的重要性。

希望這篇文章能為你提供清晰的學習路徑!如果你有任何問題或想法,歡迎在評論區留言討論。


下集預告:第2集將聚焦于卷積神經網絡(CNN)與圖像分類任務,帶你深入了解 CNN 的核心原理及其在計算機視覺中的應用。

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

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

相關文章

經典復古嘻哈說唱朋克風格專輯海報標題設計psai英文字體安裝包 Punk Of Sad — Ransom Font

Punk Of Sad 將確保您忘記所有簡潔的線條和企業潤色。這種經典的贖金風格字體是一封寫給 DIY 文化的情書,誕生于雜志、演出海報和地下場景的原始能量的剪切和粘貼混亂。每個字母都是不可預測的,都帶有叛逆的邊緣。 這種字體有三種不同的樣式 – Regular…

hot100-滑動窗口

3. 無重復字符的最長子串 給定一個字符串 s ,請你找出其中不含有重復字符的 最長子串的長度。 思路:雙指針指向不含重復字符的連續字串的頭和尾,用集合存儲子串中的元素,有重復時,左指針持續右移,無重復后…

MariaDB 歷史版本下載地址 —— 筑夢之路

MariaDB 官方yum源里面只有目前在維護的版本,而有時候對于老項目來說還是需要老版本的rpm包,國內很多鏡像站都是同步的官方倉庫,因此下載老版本也不好找,這里主要記錄下從哪里可以下載到歷史版本的MariaDB rpm包。 1. 官方歸檔網…

Linux-Ansible模塊進階

文章目錄 Copy和FetchFile模塊 Copy和Fetch copy和fetch模塊實踐 copy模塊需要注意的點:在收集日志之前需要對文件先進行改名或者備份fetch模塊需要注意的點:復制的源文件的路徑必須是文件不能是目錄建議全部使用絕對路徑,別使用相對路徑確保…

網絡空間安全(1)web應用程序的發展歷程

前言 Web應用程序的發展歷程是一部技術創新與社會變革交織的長卷,從簡單的文檔共享系統到如今復雜、交互式、數據驅動的平臺,經歷了多個重要階段。 一、起源與初期發展(1989-1995年) Web的誕生: 1989年,歐洲…

國產開源PDF解析工具MinerU

前言 PDF的數據解析是一件較困難的事情,幾乎所有商家都把PDF轉WORD功能做成付費產品。 PDF是基于PostScript子集渲染的,PostScript是一門圖靈完備的語言。而WORD需要的渲染,本質上是PDF能力的子集。大模型領域,我們的目標文件格…

Powershell Install deepseek

前言 deepseekAI助手。它具有聊天機器人功能,可以與用戶進行自然語言交互,回答問題、提供建議和幫助解決問題。DeepSeek 的特點包括: 強大的語言理解能力:能夠理解和生成自然語言,與用戶進行流暢的對話。多領域知識&…

6. 【.NET 8 實戰--孢子記賬--從單體到微服務--轉向微服務】--微服務基礎工具與技術--Ocelot 網關--概念與簡單入門

網關是一種位于客戶端和后端服務之間的服務,充當所有客戶端請求的單一入口。它的主要職責是接收所有的API調用,匯總各類請求,將其路由到適當的后端服務,并將響應返回給客戶端。網關不僅僅是一個簡單的反向代理,它還能夠…

網頁制作06-html,css,javascript初認識のhtml如何建立超鏈接

超鏈接有外部鏈接、電子郵件鏈接、錨點鏈接、空鏈接、腳本鏈接 一、內部鏈接 與自身網站頁面有關的鏈接被稱為內部鏈接 1、創建內部鏈接 1&#xff09;語法&#xff1a; <a href"鏈接地址"> …… </a> 2&#xff09;舉例應用&#xff1a; 3&#xf…

MySQL后端返回給前端的時間變了(時區問題)

問題&#xff1a;MySQL里的時間例如為2025-01-10 21:19:30&#xff0c;但是返回到前端就變成了2025-01-10 13:19:30&#xff0c;會出現小時不一樣或日期變成隔日的問題 一般來說設計字段時會使用datetime字段類型&#xff0c;這是一種用于時間的字段類型&#xff0c;而這個類型…

【算法與數據結構】單調隊列

目錄 單調隊列 使用單調隊列維護滑動窗口 具體過程&#xff1a; 代碼實現&#xff1a; 復雜度分析&#xff1a; 使用單調隊列優化動態規劃 例題 單調隊列 單調隊列(deque)是一種特殊的隊列&#xff0c;隊列中的元素始終按嚴格遞增或者遞減排列。這樣就可以保證隊頭元素…

AutoGen 技術博客系列 九:從 v0.2 到 v0.4 的遷移指南

本系列博文在掘金同步發布, 更多優質文章&#xff0c;請關注本人掘金賬號&#xff1a; 人肉推土機的掘金賬號 AutoGen系列一&#xff1a;基礎介紹與入門教程 AutoGen系列二&#xff1a;深入自定義智能體 AutoGen系列三&#xff1a;內置智能體的應用與實戰 AutoGen系列四&am…

深度學習每周學習總結Y1(Yolov5 調用官方權重進行檢測 )

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客Y1中的內容 &#x1f356; 原作者&#xff1a;K同學啊 | 接輔導、項目定制 ** 注意該訓練營出現故意不退押金&#xff0c;惡意揣測偷懶用假的結果冒充真實打卡記錄&#xff0c;在提出能夠拿到視頻錄像…

為AI聊天工具添加一個知識系統 之117 詳細設計之58 思維導圖及觀察者效應 之2 概念全景圖

&#xff08;說明&#xff1a;本文和上一篇問題基本相同&#xff0c;但換了一個模型 deepseek-r1&#xff09; Q1227、在提出項目“為使用AI聊天工具的聊天者加掛一個專屬的知識系統”后&#xff0c;我們已經進行了了大量的討論-持續了近三個月了。這些討論整體淋漓盡致體現了…

2012年IMO幾何預選題第6題

設有非等腰的 △ A B C \triangle ABC △ABC, O O O 和 I I I 分別為外心和內心. 在邊 A C AC AC, A B AB AB 上分別存在兩點 E E E 和 F F F, 使得 C D C E A B CDCEAB CDCEAB, B F B D A C BFBDAC BFBDAC. 設 ( B D F ) (BDF) (BDF) 和 ( C D E ) (CDE) (CDE)…

為Eclipse IDE安裝插件IBM編程助手watsonx Code Assistant

從Eclipse IDE 安裝 從Eclipse IDE 安裝插件&#xff1a; _1、在Eclipse IDE 中&#xff0c;單擊幫助菜單&#xff0c;然后選擇EclipseMarketplace。 _2、根據您計劃進行的工作類型選擇安裝方式&#xff1a; 有關代碼建議、代碼解釋、代碼文檔和單元測試的集成生成式人工智能&a…

Linux基本指令(三)+ 權限

文章目錄 基本指令grep打包和壓縮zip/unzipLinux和windows壓縮包互傳tar&#xff08;重要&#xff09;Linux和Linux壓縮包互傳 bcuname -r常用的熱鍵關機外殼程序 知識點打包和壓縮 Linux中的權限用戶權限 基本指令 grep 1. grep可以過濾文本行 2. 把包含9的文本行過濾出來了 …

【部署優化篇十四】【十萬字全景拆解:GitHub Actions自動化流水線設計圣經(DeepSeek工業級實踐大公開)】

一、從手工作坊到智能工廠:CI/CD的革命之路 想象一下,你所在的公司每天要手工組裝1000臺手機,每個環節都靠老師傅肉眼檢查——這就是沒有CI/CD的軟件開發現狀。GitHub Actions的出現,就像給軟件交付裝上了特斯拉的超級工廠流水線。 DeepSeek的CI/CD演進史就是一部血淚史:…

“死”循環(查漏補缺)

以下代碼會死循環&#xff1a; #include<iostream> using namespace std; int n,res; int main(){cin>>n;for(int i1;i<n;i){int xi;while(i){int ti%10;i/10;if(t2||t0||t1||t9){resx;break;}}}cout<<res<<endl;return 0; } 你的代碼中存在一個邏…

力扣LeetCode: 2506 統計相似字符串對的數目

題目&#xff1a; 給你一個下標從 0 開始的字符串數組 words 。 如果兩個字符串由相同的字符組成&#xff0c;則認為這兩個字符串 相似 。 例如&#xff0c;"abca" 和 "cba" 相似&#xff0c;因為它們都由字符 a、b、c 組成。然而&#xff0c;"aba…