【探索AI】十七 深度學習之第3周:卷積神經網絡(CNN)(一)-CNN的基本原理與結構

第3周:卷積神經網絡(CNN)

CNN的基本原理與結構
常見的卷積層、池化層與全連接層
LeNet、AlexNet等經典CNN模型
實踐:使用CNN進行圖像分類任務

CNN的基本原理與結構

引言與背景介紹

  • 卷積神經網絡(CNN)是深度學習領域中的一種重要算法,具有強大的表征學習能力,能夠按照其階層結構對輸入信息進行平移不變分類,因此也被稱為“平移不變人工神經網絡(SIANN)”。它在深度學習中占據了重要地位,廣泛應用于圖像識別、計算機視覺、自然語言處理、語音識別和推薦系統等領域。

CNN在圖像處理和計算機視覺方面的應用尤為突出,這是因為CNN具有局部感知和權值共享的特性,能夠有效地減少模型的參數數量,并增強模型的泛化能力。以下是一些CNN在圖像處理和計算機視覺方面的成功案例:

  1. AlexNet:這是計算機視覺領域中首個被廣泛關注并使用的CNN,它在2012年的ImageNet競賽中以超越第二名10.9個百分點的優異成績奪冠。AlexNet首次將CNN應用于計算機視覺領域的海量圖像數據集ImageNet,揭示了CNN具有強大的學習能力和表示能力。
  2. 圖像分類和目標檢測:CNN被廣泛應用于圖像分類和目標檢測任務。例如,在圖像分類任務中,CNN可以通過學習圖像的特征來對圖像進行分類。在目標檢測任務中,CNN可以檢測出圖像中的多個目標并識別它們的類別。
  3. 人臉識別和姿態估計:CNN也被廣泛應用于人臉識別和姿態估計任務。例如,在人臉識別任務中,CNN可以通過學習人臉的特征來進行身份驗證或識別。在姿態估計任務中,CNN可以通過學習人體的關鍵點來估計人體的姿態。

除了在計算機視覺領域的應用外,CNN還廣泛應用于自然語言處理、語音識別和推薦系統等領域。例如,在自然語言處理任務中,CNN可以通過學習文本的特征來對文本進行分類或情感分析。在語音識別任務中,CNN可以通過學習語音的特征來進行語音分類或語音轉換。在推薦系統任務中,CNN可以通過學習用戶的歷史行為來推薦用戶可能感興趣的內容。

總之,卷積神經網絡(CNN)是深度學習中一種非常重要的算法,在圖像處理、計算機視覺、自然語言處理、語音識別和推薦系統等領域都有廣泛的應用。隨著技術的不斷發展,CNN將會在更多的領域發揮重要作用。

卷積操作的原理與作用

  • 卷積操作是卷積神經網絡(CNN)中的基礎操作,它模擬了人腦視覺皮層中的神經元連接方式。卷積操作的基本原理是使用一個小的卷積核(也被稱為濾波器或檢測器)在輸入圖像上進行滑動,并對每個位置上的像素和卷積核中的權值進行逐元素相乘并求和,從而得到一個新的特征圖(Feature Map)。這個過程可以看作是對輸入圖像進行空間濾波,提取出圖像的局部特征。

以下是卷積操作中涉及的一些基本概念:

  1. 卷積核(Convolution Kernel):卷積核是一個小的矩陣,通常大小為3x3、5x5等,它決定了卷積操作的性質。卷積核中的每個元素都是一個權值,這些權值在訓練過程中通過反向傳播算法進行更新。在卷積操作中,卷積核會按照指定的步幅在輸入圖像上滑動,每次滑動都會計算出一個新的特征圖。
  2. 步幅(Stride):步幅是卷積核在輸入圖像上滑動時每次移動的像素數量。步幅的大小會影響輸出特征圖的大小。如果步幅較大,輸出特征圖的尺寸會減小,這有助于減少模型的計算量和參數數量;如果步幅較小,輸出特征圖的尺寸會增大,這有助于保留更多的圖像細節。
  3. 填充(Padding):填充是指在輸入圖像的邊界處添加額外的像素值,以便在卷積操作后保持輸出特征圖與輸入圖像相同的尺寸。填充通常有兩種方式:Valid Padding和Same Padding。Valid Padding表示不進行填充,此時輸出特征圖的尺寸會小于輸入圖像;Same Padding表示在輸入圖像的邊界處填充足夠的像素值,使得輸出特征圖的尺寸與輸入圖像相同。

卷積操作在圖像處理中具有以下優勢和作用:

  1. 局部感知:卷積操作通過卷積核在圖像上進行滑動,每次只關注圖像的局部區域,這符合圖像的空間局部相關性。通過局部感知,卷積神經網絡可以有效地降低模型的參數數量和計算復雜度。
  2. 參數共享:在卷積操作中,卷積核的權值在整個圖像上是共享的,這意味著無論圖像中的哪個位置,都使用相同的卷積核進行特征提取。這種參數共享的方式可以進一步減少模型的參數數量,并增強模型的泛化能力。
  3. 特征提取:卷積操作可以提取出圖像的局部特征,如邊緣、紋理等。通過多層卷積操作,CNN可以逐步學習到更加抽象和高級的特征表示,從而實現圖像分類、目標檢測等任務。
  4. 平移不變性:由于卷積操作使用相同的卷積核在整個圖像上進行滑動,因此它對圖像的平移具有一定的不變性。這意味著即使圖像中的物體發生了一定的平移,CNN仍然可以準確地識別出它們。

總之,卷積操作通過局部感知、參數共享和特征提取等機制,使得CNN在圖像處理中具有強大的表征學習能力和泛化能力。這也是CNN在圖像分類、目標檢測、人臉識別等任務中取得優異性能的關鍵原因。

CNN的基本結構和組成部分

  • CNN(卷積神經網絡)的基本結構主要包括輸入層、卷積層、池化層、全連接層等部分。這些層在CNN中各自扮演著重要的角色,并且按照一定的順序相互連接,共同構成了CNN的整體結構。
  1. 輸入層:輸入層是CNN的起始,負責接收原始圖像數據。這些圖像數據可以是彩色圖像(RGB三通道)或灰度圖像(單通道)。
  2. 卷積層:卷積層是CNN的核心部分,負責對輸入圖像進行特征提取。卷積層中包含了多個卷積核(也稱為濾波器),每個卷積核都可以學習并提取圖像中的一種特定特征,如邊緣、紋理等。卷積操作是通過將卷積核在輸入圖像上進行滑動,并將卷積核中的權值與對應位置的像素值相乘后求和,得到新的特征圖。卷積層通常還會使用激活函數(如ReLU)來增加模型的非線性,提高模型的表達能力。
  3. 池化層:池化層通常位于卷積層之后,負責對特征圖進行下采樣,以減少模型的參數數量和計算復雜度,同時增強模型的魯棒性。池化操作可以是最大池化(Max Pooling)、平均池化(Average Pooling)等,它們分別取特征圖中的最大值或平均值作為輸出。
  4. 全連接層:全連接層通常位于CNN的最后幾層,負責將前面提取到的特征進行整合,并輸出最終的分類結果。全連接層的每個神經元都與前一層的所有神經元相連,通過權重矩陣進行線性變換,并使用激活函數(如Softmax)進行非線性映射,得到最終的分類概率。

在CNN中,卷積層、池化層和全連接層通常會按照一定的順序堆疊在一起,形成一個深層次的網絡結構。通過逐層提取和抽象特征,CNN可以學習到輸入圖像的深層次表示,從而實現圖像分類、目標檢測等任務。同時,為了加速訓練和提高性能,CNN中還可能會使用到一些其他的技術和策略,如批量歸一化(Batch Normalization)、殘差連接(Residual Connection)等。

深入理解卷積神經網絡

卷積神經網絡(CNN)是深度學習中最具代表性和廣泛應用的網絡結構之一。為了更好地理解CNN的工作原理,我們需要深入討論其中的一些關鍵概念,如局部感受野、權重共享和特征圖等。

  1. 局部感受野(Local Receptive Field):在CNN中,每個神經元不再像傳統神經網絡那樣與輸入層的所有神經元相連,而是只與輸入層的一個局部區域相連。這個局部區域就稱為該神經元的局部感受野。局部感受野的概念來源于生物視覺系統中的感受野機制,即視覺皮層中的神經元只對其視野中的一小部分區域敏感。通過局部感受野,CNN能夠學習到輸入圖像的局部特征,并逐步構建出全局特征。這種方式不僅減少了模型的參數數量,還提高了模型的計算效率。
  2. 權重共享(Weight Sharing):在CNN中,每個卷積核在整個輸入圖像上進行滑動時,其權值是共享的。這意味著無論圖像中的哪個位置,都使用相同的卷積核進行特征提取。這種權重共享的機制可以大大減少模型的參數數量,降低模型的復雜度,并增強模型的泛化能力。權重共享還使得CNN具有平移不變性,即對于圖像中的目標物體,無論其出現在圖像中的哪個位置,CNN都能夠提取出相同的特征。
  3. 特征圖(Feature Map):特征圖是CNN中的一個重要概念,它表示卷積層或池化層的輸出。特征圖上的每個值都是通過卷積或池化操作計算得到的,它反映了輸入圖像在某種特征上的響應強度。不同的卷積核可以提取到不同的特征,因此CNN中通常會有多個特征圖。這些特征圖在后續層中會被進一步處理和組合,以形成更加抽象和高級的特征表示。

通過深入理解局部感受野、權重共享和特征圖等關鍵概念,我們可以更好地把握CNN的工作原理和性能特點。在實際應用中,我們可以根據具體任務和數據特點選擇合適的網絡結構和參數設置,以實現更好的模型性能。同時,我們還需要關注CNN的訓練方法和優化技巧,以提高模型的訓練速度和泛化能力。

實際案例分析與模型架構

-在實際應用中,卷積神經網絡(CNN)的模型架構多種多樣,每種架構都有其獨特的設計特點和適用場景。以下是對幾個經典的CNN模型架構的分析和比較:

  1. LeNet:LeNet是早期的一個卷積神經網絡架構,由Yann LeCun等人于1998年提出。它主要用于手寫數字識別等任務。LeNet的特點是結構相對簡單,包含卷積層、池化層和全連接層。由于其簡單性和有效性,LeNet成為了CNN的奠基之作,為后續更復雜的網絡結構提供了基礎。
  2. AlexNet:AlexNet是2012年ImageNet競賽的冠軍模型,由Alex Krizhevsky等人設計。AlexNet首次證明了CNN在大規模圖像分類任務上的強大能力。它采用了更深的網絡結構,通過增加卷積層的數量來提高模型的性能。此外,AlexNet還使用了ReLU激活函數、Dropout等技術來防止過擬合,提高了模型的泛化能力。AlexNet適用于大規模圖像分類任務,如ImageNet等。
  3. VGG:VGG是由牛津大學計算機視覺組和Google DeepMind公司研究員共同研發的一種深度卷積神經網絡,其探索了卷積神經網絡的深度與其性能之間的關系,通過反復堆疊3×3的小型卷積核和2×2的最大池化層,成功構建了16~19層深的卷積神經網絡。VGG的特點是網絡結構更深,通過不斷增加卷積層的數量來提高模型的性能。VGG在ILSVRC 2014年比賽中獲得了亞軍和定位項目的冠軍,證明了其強大的特征提取能力。VGG適用于各種圖像分類任務,尤其是需要提取深層特征的任務。
  4. ResNet:ResNet(殘差網絡)是由微軟亞洲研究院的研究員Kaiming He等人于2015年提出的一種深度卷積神經網絡架構。ResNet通過引入殘差連接(Residual Connection)來解決深度神經網絡中的梯度消失和表示瓶頸問題。殘差連接允許網絡學習輸入和輸出之間的殘差映射,從而更容易訓練深層網絡。ResNet在ILSVRC 2015年比賽中獲得了冠軍,并在后續的多項任務中取得了卓越的性能。ResNet適用于各種圖像分類任務,特別是需要處理高分辨率或大規模數據集的任務。

這些經典的CNN模型架構各有其特點和適用場景。在實際應用中,我們可以根據任務需求和數據特點選擇合適的模型架構,并進行相應的調整和優化,以獲得更好的性能。同時,隨著深度學習技術的不斷發展,新的CNN模型架構也在不斷涌現,為我們提供了更多的選擇和可能性。

模型訓練與調優

在使用TensorFlow或PyTorch等深度學習框架構建和訓練CNN模型時,通常涉及以下步驟和技巧:

1. 數據準備

  • 數據加載:使用框架提供的數據加載器(如TensorFlow的tf.data或PyTorch的torch.utils.data.DataLoader)來加載和預處理圖像數據。
  • 數據增強:通過隨機裁剪、旋轉、翻轉等方式增加數據集的多樣性,提高模型的泛化能力。
  • 數據歸一化:將圖像數據歸一化到相同的尺度,通常是將像素值縮放到[0, 1]或[-1, 1]之間。

2. 模型構建

  • 定義模型結構:使用框架提供的層(如卷積層、池化層、全連接層等)來定義CNN的結構。
  • 初始化參數:選擇合適的參數初始化方法,如Xavier初始化或He初始化。

3. 損失函數和優化器

  • 損失函數:根據任務選擇合適的損失函數,如交叉熵損失(分類任務)或均方誤差損失(回歸任務)。
  • 優化器:選擇適合的優化器,如SGD、Adam、RMSprop等,并設置合適的學習率。

4. 模型訓練

  • 前向傳播:將輸入數據傳入模型,得到預測結果。
  • 計算損失:根據預測結果和真實標簽計算損失值。
  • 反向傳播:通過鏈式法則計算損失函數對模型參數的梯度。
  • 參數更新:使用優化器根據梯度更新模型參數。

5. 模型評估與調優

  • 驗證集:使用驗證集評估模型的性能,避免過擬合。
  • 早停法:當驗證集上的性能不再提高時,提前停止訓練。
  • 學習率調整:使用學習率衰減或自適應學習率調整策略來優化訓練過程。
  • 模型保存:保存訓練過程中性能最好的模型。

6. 常見技巧

  • 批量歸一化(Batch Normalization):加速模型收斂,提高穩定性。
  • Dropout:在訓練過程中隨機丟棄部分神經元,防止過擬合。
  • 正則化:使用L1或L2正則化來約束模型參數,減少過擬合。
  • 模型集成:使用多個模型進行預測,通過集成策略提高性能。

7. TensorFlow與PyTorch的比較

  • TensorFlow:適合大規模分布式訓練,提供豐富的預訓練模型和工具,如TensorBoard可視化工具。
  • PyTorch:動態圖機制使得模型開發和調試更加直觀,適合研究和原型開發。

在選擇深度學習框架進行研發或測試時,TensorFlow和PyTorch都有各自的優點和適用場景。以下是對兩個框架的比較,以幫助您做出決策:

  1. 易用性

    • PyTorch:PyTorch因其結構清晰和直觀的API而易于使用。它的動態圖特性使得模型開發和調試更加直觀和快速。PyTorch的官方文檔和教程相對豐富,對新手友好。
    • TensorFlow:TensorFlow的API在不同版本之間存在一些差異,有時可能讓人感到困惑。靜態圖特性使得模型開發不如PyTorch直觀,但TensorFlow提供了豐富的預訓練模型和工具,如TensorBoard,用于可視化和調試。
  2. 性能與優化

    • TensorFlow:TensorFlow在大規模分布式訓練方面表現出色,適合處理大規模數據集和高性能計算任務。
    • PyTorch:PyTorch在中小型項目和原型開發方面表現良好,但可能在處理大規模分布式訓練時不如TensorFlow高效。
  3. 生態系統和社區支持

    • TensorFlow:TensorFlow擁有龐大的社區和廣泛的生態系統,提供了許多高級工具和庫,如TensorFlow Serving、TensorFlow Lite等,用于模型部署和推理。
    • PyTorch:PyTorch的社區同樣活躍,但與TensorFlow相比,其生態系統相對較小。然而,PyTorch在研究領域非常受歡迎,許多開源模型首先支持PyTorch。
  4. 應用場景

    • 如果您正在進行學術研究或原型開發,PyTorch可能是一個更好的選擇,因為它的易用性和動態圖特性使得模型開發和調試更加簡單。
    • 如果您需要處理大規模數據集、進行分布式訓練或部署模型到生產環境,TensorFlow可能更適合您的需求,因為它在這些方面具有優勢。

綜上所述,選擇哪個框架取決于您的具體需求、項目規模和生態系統要求。建議您根據項目需求、個人偏好和團隊經驗來決定使用哪個框架。

項目實踐

-項目實踐:使用CNN進行手寫數字識別

背景
手寫數字識別是一個經典的圖像分類問題。給定一個手寫數字的灰度圖像,目標是識別圖像中的數字(0-9)。這個問題可以使用CNN模型來解決。

目標
構建一個CNN模型來識別手寫數字,并在MNIST數據集上評估其性能。

步驟

  1. 數據準備

    • 下載MNIST數據集,該數據集包含60,000個訓練樣本和10,000個測試樣本。
    • 對圖像進行預處理,如歸一化像素值到[0, 1]之間。
  2. 模型構建

    • 使用TensorFlow或PyTorch構建一個簡單的CNN模型。
    • 模型可以包含以下層:卷積層、ReLU激活層、池化層和全連接層。

示例代碼(使用TensorFlow)

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense# 構建模型
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax'))# 編譯模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
  1. 模型訓練
    • 使用訓練數據集對模型進行訓練。
    • 監控模型在驗證集上的性能,使用早停法避免過擬合。

示例代碼

# 訓練模型
model.fit(train_images, train_labels, epochs=5, validation_data=(test_images, test_labels))
  1. 模型評估
    • 使用測試數據集評估模型的性能。
    • 查看模型的準確率、損失等指標。

示例代碼

# 評估模型
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('\nTest accuracy:', test_acc)
  1. 結果分析
    • 分析模型在測試集上的性能。
    • 根據需要調整模型結構或參數來優化性能。

通過此項目實踐,不僅能夠應用所學的CNN知識,還能夠獲得實際的項目經驗,從而加深對CNN原理與結構的理解。

在這里插入圖片描述

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

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

相關文章

雙周回顧#007 - 前端與后端

前端的問題不是難,而是它面對最終用戶。只要用戶的喜好和口味發生變化,前端就必須跟上。 這導致前端不得不快速變化,因為用戶的口味正在越來越快地改變。 后端不需要面對最終用戶,需要解決的都是一些經典的計算機科學問題&#…

什么是Vue指令?請列舉一些常見的Vue指令以及它們的用法

Vue.js 是一款流行的前端框架,它的指令(Directives)是 Vue.js 提供的一種特殊屬性,用于在模板中對 DOM 元素進行直接操作。指令通常是以 v- 開頭的特殊屬性,用于響應式地將數據綁定到 DOM 元素上。 在 Vue 中&#xf…

C語言初階—函數(函數的聲明和定義,函數遞歸)

函數聲明: 1.告訴編譯器有一個函數叫什么,參數是什么,返回類型是什么,但是具體是不是存在,函數聲明決定不了。 2.函數的聲明一般出現在函數使用之前,要滿足先聲明后使用。 3.函數的聲明一般要放在頭文件中。…

Launch學習

參考博客: (1) 史上最全的launch的解析來啦,木有之一歐 1 ROS工作空間簡介 2 元功能包 src目錄下可以包含多個功能包,假設需要使用機器人導航模塊,但是這個模塊中包含著地圖、定位、路徑規劃等不同的功能包,它們的邏…

agent內存馬

搭建一個簡單的Servlet項目 ServletDemo package com.naihe;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;…

【探索AI】十一 深度學習之機器學習基礎

鑒于之前文章中提到的深度學習計劃,后續的文章會根據之前的接著繼續學習,python基礎略過,想學的同學請自學: python入門 python進階 機器學習基礎 機器學習是人工智能領域的一個子集,它專注于從數據中自動學習并提升…

vue2+若依框架plus交互 路由介紹

本周及寒假 參加了校企合作的工程過程管理,和學長學姐一起寫項目,之前學了vue也沒有應用,然后對框架很多組件的用法不太了解,前期耽誤了一些時間。 框架模塊 首先是框架模塊的介紹 api存了一些系統管理及發送請求的方法 例如p…

【python】`assert`斷言語句

assert是一個斷言語句,用于在代碼中檢查某個條件是否為真。 如果條件為假,將觸發AssertionError 異常,從而指示存在錯誤。

Linux獲取進程(系統啟動時間和運行時間)運行時間

Linux獲取進程運行時間 思路:使用 ps - o命令 ps -p 986 -o etime可以獲取進程986的執行時間,不論系統時間有沒有發生改變,它都可以返回正確的結果: 總結:etime 是真正的程序運行時間,而不是系統運行時間與進程啟動…

在您的下一個項目中選擇 Golang 和 Node.js 之間的抉擇

作為一名軟件開發者,我總是在尋找構建應用程序的最快、最高效的工具。在速度和處理復雜任務方面,我認為 Golang 和 Node.js 是頂尖技術。兩者在性能方面都享有極高的聲譽。但哪一個更快——Golang 還是 Node?我決定深入一些硬核基準測試&…

java-ssm-jsp-寵物護理預定系統

java-ssm-jsp-寵物護理預定系統 獲取源碼——》公主號:計算機專業畢設大全

ASPICE實操中的那點事兒-底層軟件的單元測試該如何做

先來說下ASPICE項目實操中遇到的問題: 底層軟件在做單元測試時,從ASPICE角度看,該如何做?要不要在目標控制器或開發板中去測?尤其是復雜驅動,如果不在將程序下載到硬件中,該如何測試&#xff1…

物聯網與智慧城市:融合創新,塑造未來城市生活新圖景

一、引言 在科技飛速發展的今天,物聯網與智慧城市的融合創新已成為推動城市發展的重要力量。物聯網技術通過連接萬物,實現信息的智能感知、傳輸和處理,為智慧城市的構建提供了無限可能。智慧城市則運用物聯網等先進技術,實現城市…

使用R語言進行Logistic回歸分析(2)

一、數據集描述,問題要求 下表是40位肺癌病人的生存資料,X1表示生活行為能力平分(1到100),X2為病人的年齡(年),X3由診斷到進入研究的時間(月),X4…

291.【華為OD機試】模擬目錄管理(JavaPythonC++JS實現)

??點擊這里可直接跳轉到本專欄,可查閱頂置最新的華為OD機試寶典~ 本專欄所有題目均包含優質解題思路,高質量解題代碼(Java&Python&C++&JS分別實現),詳細代碼講解,助你深入學習,深度掌握! 文章目錄 一. 題目-模擬目錄管理二.解題思路三.題解代碼Python題解…

計算機設計大賽 深度學習火車票識別系統

文章目錄 0 前言1 課題意義課題難點: 2 實現方法2.1 圖像預處理2.2 字符分割2.3 字符識別部分實現代碼 3 實現效果4 最后 0 前言 🔥 優質競賽項目系列,今天要分享的是 🚩 圖像識別 火車票識別系統 該項目較為新穎,適…

Pycharm的下載安裝與漢化

一.下載安裝包 1.接下來按照步驟來就行 2.然后就能在桌面上找到打開了 3.先建立一個文件夾 二.Pycharm的漢化

ABAP - SALV教程07 斑馬紋顯示和SALV標題

SALV設置斑馬紋和標題 METHOD set_layout.DATA: lo_display TYPE REF TO cl_salv_display_settings. * 取得顯示對象lo_display co_alv->get_display_settings( ).* 設置ZEBRA顯示lo_display->set_striped_pattern( X ). * 設置Titlelo_display->set_list_he…

企業微信變更主體怎么改?

企業微信變更主體有什么作用?做過企業運營的小伙伴都知道,很多時候經常會遇到現有的企業需要注銷,切換成新的企業進行經營的情況,但是原來企業申請的企業微信上面卻積累了很多客戶,肯定不能直接丟棄,所以這…

【二】【SQL】去重表數據及分組聚合查詢

去重表數據 表的準備工作 去除表中重復的數據,重復的數據只留一份。 mysql> create table duplicate_table (-> id int,-> name varchar(20)-> ); Query OK, 0 rows affected (0.03 sec)mysql> insert into duplicate_table values-> (100,aaa)…