【完整源碼+數據集+部署教程】硬幣分類與識別系統源碼和數據集:改進yolo11-SWC

背景意義

隨著經濟的發展和數字支付的普及,傳統硬幣的使用逐漸減少,但在某些地區和特定場合,硬幣仍然是重要的支付手段。因此,硬幣的分類與識別在自動化支付、智能零售和物聯網等領域具有重要的應用價值。尤其是在銀行、商超和自助售貨機等場景中,快速、準確地識別和分類硬幣不僅可以提高交易效率,還能降低人工成本,提升用戶體驗。

近年來,深度學習技術在計算機視覺領域取得了顯著進展,尤其是目標檢測和實例分割技術的快速發展,為硬幣識別提供了新的解決方案。YOLO(You Only Look Once)系列模型因其高效的實時檢測能力,已成為目標檢測領域的主流選擇。隨著YOLOv11的推出,其在檢測精度和速度上的進一步提升,使其成為硬幣分類與識別的理想選擇。

本研究旨在基于改進的YOLOv11模型,構建一個高效的硬幣分類與識別系統。所使用的數據集包含5600張經過精心標注的硬幣圖像,涵蓋了四種不同面值的硬幣(1 rs、2 rs、5 rs、10 rs)。這些圖像經過多種預處理和數據增強技術,確保了模型在不同場景下的魯棒性和準確性。通過對硬幣的實例分割和分類,本系統不僅能夠實現對硬幣的精確識別,還能為后續的自動化交易系統提供數據支持。

此外,本研究的成果將為相關領域的研究提供理論基礎和實踐指導,推動硬幣識別技術的進一步發展。通過提升硬幣識別的自動化水平,能夠有效應對日益增長的交易需求,促進經濟的數字化轉型。總之,基于改進YOLOv11的硬幣分類與識別系統的研究,不僅具有重要的學術價值,也具備廣泛的實際應用前景。

圖片效果

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

數據集信息

本項目數據集信息介紹

本項目所使用的數據集專注于硬幣的分類與識別,旨在改進YOLOv11模型的性能,以實現更高效的硬幣識別系統。數據集包含四個主要類別,分別為“1 rs”、“10 rs”、“2 rs”和“5 rs”,這些類別涵蓋了印度流通的主要硬幣面值。每個類別的樣本數量經過精心挑選,以確保模型在訓練過程中能夠獲得足夠的多樣性和代表性,從而提高其在實際應用中的準確性和魯棒性。

數據集中的圖像均為高質量的硬幣照片,拍攝時考慮了不同的光照條件、背景和角度,以模擬真實世界中可能遇到的各種情況。這種多樣性不僅增強了模型的泛化能力,還使其能夠在不同環境下保持穩定的識別性能。此外,數據集中還包含了多種硬幣的細節特征,如硬幣的紋理、邊緣和圖案,這些特征對于分類任務至關重要。

為了確保數據集的有效性和可靠性,所有圖像均經過人工標注,確保每個樣本的類別信息準確無誤。這一過程不僅提高了數據集的質量,也為后續的模型訓練奠定了堅實的基礎。通過對這些硬幣圖像的深入分析,模型將能夠學習到各個類別之間的細微差別,從而在實際應用中實現快速且準確的硬幣識別。

總之,本項目的數據集為改進YOLOv11的硬幣分類與識別系統提供了豐富的訓練素材,旨在推動智能識別技術在金融領域的應用,提升用戶體驗與操作效率。通過不斷優化和擴展數據集,我們期望能夠進一步提高模型的性能,使其在硬幣識別任務中表現出色。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

核心代碼

以下是經過簡化并注釋的核心代碼部分:

import torch
import torch.nn as nn
import torch.nn.functional as F

class DWConv2d(nn.Module):
“”" 深度可分離卷積層 “”"
def init(self, dim, kernel_size, stride, padding):
super().init()
# 使用 groups=dim 實現深度可分離卷積
self.conv = nn.Conv2d(dim, dim, kernel_size, stride, padding, groups=dim)

def forward(self, x: torch.Tensor):""" 前向傳播x: 輸入張量,形狀為 (b, h, w, c)"""x = x.permute(0, 3, 1, 2)  # 轉換為 (b, c, h, w)x = self.conv(x)  # 卷積操作x = x.permute(0, 2, 3, 1)  # 轉換回 (b, h, w, c)return x

class FeedForwardNetwork(nn.Module):
“”" 前饋神經網絡 “”"
def init(self, embed_dim, ffn_dim, activation_fn=F.gelu, dropout=0.0):
super().init()
self.fc1 = nn.Linear(embed_dim, ffn_dim) # 第一層線性變換
self.fc2 = nn.Linear(ffn_dim, embed_dim) # 第二層線性變換
self.dropout = nn.Dropout(dropout) # dropout層
self.activation_fn = activation_fn # 激活函數

def forward(self, x: torch.Tensor):""" 前向傳播x: 輸入張量,形狀為 (b, h, w, c)"""x = self.fc1(x)  # 線性變換x = self.activation_fn(x)  # 激活函數x = self.dropout(x)  # dropoutx = self.fc2(x)  # 線性變換return x

class RetBlock(nn.Module):
“”" 保留塊,用于處理輸入的殘差連接和前饋網絡 “”"
def init(self, embed_dim, num_heads, ffn_dim):
super().init()
self.ffn = FeedForwardNetwork(embed_dim, ffn_dim) # 前饋網絡
self.pos = DWConv2d(embed_dim, 3, 1, 1) # 位置卷積

def forward(self, x: torch.Tensor):""" 前向傳播x: 輸入張量,形狀為 (b, h, w, c)"""x = x + self.pos(x)  # 添加位置卷積x = x + self.ffn(x)  # 添加前饋網絡的輸出return x

class BasicLayer(nn.Module):
“”" 基礎層,包含多個保留塊 “”"
def init(self, embed_dim, depth, num_heads, ffn_dim):
super().init()
self.blocks = nn.ModuleList([
RetBlock(embed_dim, num_heads, ffn_dim) for _ in range(depth) # 創建多個保留塊
])

def forward(self, x: torch.Tensor):""" 前向傳播x: 輸入張量,形狀為 (b, h, w, c)"""for blk in self.blocks:x = blk(x)  # 逐塊處理輸入return x

class VisRetNet(nn.Module):
“”" 可視化保留網絡 “”"
def init(self, in_chans=3, num_classes=1000, embed_dims=[96, 192, 384, 768], depths=[2, 2, 6, 2], num_heads=[3, 6, 12, 24], ffn_dim=96):
super().init()
self.patch_embed = nn.Conv2d(in_chans, embed_dims[0], kernel_size=4, stride=4) # 圖像到補丁的嵌入
self.layers = nn.ModuleList([
BasicLayer(embed_dim=embed_dims[i], depth=depths[i], num_heads=num_heads[i], ffn_dim=ffn_dim) for i in range(len(depths))
])

def forward(self, x: torch.Tensor):""" 前向傳播x: 輸入張量,形狀為 (b, c, h, w)"""x = self.patch_embed(x)  # 嵌入操作for layer in self.layers:x = layer(x)  # 逐層處理return x

創建模型實例
def RMT_T():
model = VisRetNet(
embed_dims=[64, 128, 256, 512],
depths=[2, 2, 8, 2],
num_heads=[4, 4, 8, 16]
)
return model

if name == ‘main’:
model = RMT_T() # 創建模型
inputs = torch.randn((1, 3, 640, 640)) # 隨機輸入
res = model(inputs) # 前向傳播
print(res.size()) # 輸出結果的形狀
代碼注釋說明:
DWConv2d: 實現深度可分離卷積的模塊,適用于圖像特征提取。
FeedForwardNetwork: 實現前饋神經網絡,包括線性變換和激活函數。
RetBlock: 包含殘差連接和前饋網絡的模塊,能夠增強模型的學習能力。
BasicLayer: 由多個保留塊組成的基礎層,負責處理輸入特征。
VisRetNet: 主網絡結構,負責將輸入圖像轉化為特征表示,包含補丁嵌入和多個基礎層。
RMT_T: 用于創建特定配置的可視化保留網絡模型實例。
這個程序文件 rmt.py 實現了一個基于視覺變換器(Vision Transformer)的網絡模型,名為 VisRetNet,并定義了一些相關的模塊和功能。代碼中包含多個類和函數,每個類和函數負責不同的功能,整體結構清晰,適合進行圖像處理和特征提取。

首先,程序導入了必要的庫,包括 PyTorch 和一些自定義的層和模塊。接著,定義了一些基礎的卷積層、注意力機制和網絡層。以下是各個部分的詳細說明:

DWConv2d 類:實現了深度可分離卷積,主要用于減少參數數量和計算量。它將輸入的張量進行維度變換,然后應用卷積操作,最后再變換回原來的維度。

RelPos2d 類:用于生成二維相對位置編碼,支持生成不同維度的衰減掩碼。這個類在注意力機制中非常重要,因為它幫助模型理解輸入特征之間的相對位置關系。

MaSAd 和 MaSA 類:這兩個類實現了多頭自注意力機制。MaSAd 適用于分塊的注意力計算,而 MaSA 則用于整體的注意力計算。它們通過線性變換生成查詢、鍵和值,并結合相對位置編碼進行注意力計算。

FeedForwardNetwork 類:實現了前饋神經網絡,包含兩個線性層和激活函數。它用于在每個變換層后處理特征。

RetBlock 類:定義了一個殘差塊,結合了注意力機制和前饋網絡。它可以選擇性地使用層歸一化和層縮放,以提高模型的穩定性和性能。

PatchMerging 類:實現了圖像的分塊合并層,主要用于下采樣操作,將特征圖的分辨率降低。

BasicLayer 類:構建了一個基本的變換器層,包含多個殘差塊,并在最后進行下采樣。

LayerNorm2d 類:實現了二維層歸一化,用于對特征圖進行歸一化處理。

PatchEmbed 類:將輸入圖像轉換為補丁嵌入,使用卷積層進行特征提取,并將輸出的特征圖轉換為適合后續處理的格式。

VisRetNet 類:這是整個模型的核心類,負責構建整個網絡結構。它包括多個基本層和補丁嵌入層,并實現了前向傳播方法。

最后,文件中定義了幾個函數(RMT_T, RMT_S, RMT_B, RMT_L),用于創建不同規模的 VisRetNet 模型。這些函數根據不同的參數設置構建模型,并返回相應的網絡實例。

main 部分,代碼創建了一個 RMT_T 模型實例,并生成一個隨機輸入進行測試,輸出每個特征圖的尺寸。這部分代碼可以用來驗證模型的構建是否正確。

總體來說,這個程序文件展示了如何構建一個復雜的視覺變換器模型,結合了多種深度學習技術,如自注意力機制、前饋網絡和層歸一化等,適用于圖像分類和特征提取任務。

10.4 rep_block.py
以下是代碼中最核心的部分,并附上詳細的中文注釋:

import torch
import torch.nn as nn
import torch.nn.functional as F

def transI_fusebn(kernel, bn):
“”"
將卷積核和批歸一化層的參數融合為一個卷積核和偏置。

參數:
kernel: 卷積核權重
bn: 批歸一化層返回:
融合后的卷積核和偏置
"""
gamma = bn.weight  # 獲取批歸一化的縮放因子
std = (bn.running_var + bn.eps).sqrt()  # 計算標準差
# 融合卷積核和批歸一化
return kernel * ((gamma / std).reshape(-1, 1, 1, 1)), bn.bias - bn.running_mean * gamma / std

def conv_bn(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1):
“”"
創建一個卷積層和批歸一化層的組合。

參數:
in_channels: 輸入通道數
out_channels: 輸出通道數
kernel_size: 卷積核大小
stride: 步幅
padding: 填充
dilation: 膨脹
groups: 分組卷積的組數返回:
包含卷積層和批歸一化層的序列
"""
conv_layer = nn.Conv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=kernel_size,stride=stride, padding=padding, dilation=dilation, groups=groups,bias=False)  # 創建卷積層,不使用偏置
bn_layer = nn.BatchNorm2d(num_features=out_channels, affine=True)  # 創建批歸一化層
return nn.Sequential(conv_layer, bn_layer)  # 返回包含卷積和批歸一化的序列

class DiverseBranchBlock(nn.Module):
def init(self, in_channels, out_channels, kernel_size, stride=1, padding=None, dilation=1, groups=1):
“”"
初始化多分支塊。

    參數:in_channels: 輸入通道數out_channels: 輸出通道數kernel_size: 卷積核大小stride: 步幅padding: 填充dilation: 膨脹groups: 分組卷積的組數"""super(DiverseBranchBlock, self).__init__()self.kernel_size = kernel_sizeself.in_channels = in_channelsself.out_channels = out_channelsself.groups = groupsif padding is None:padding = kernel_size // 2  # 默認填充為卷積核大小的一半assert padding == kernel_size // 2  # 確保填充正確# 定義原始卷積和批歸一化層self.dbb_origin = conv_bn(in_channels=in_channels, out_channels=out_channels, kernel_size=kernel_size,stride=stride, padding=padding, dilation=dilation, groups=groups)def forward(self, inputs):"""前向傳播函數。參數:inputs: 輸入張量返回:輸出張量"""out = self.dbb_origin(inputs)  # 通過原始卷積和批歸一化層計算輸出return out  # 返回輸出

示例使用
if name == “main”:
model = DiverseBranchBlock(in_channels=3, out_channels=16, kernel_size=3)
x = torch.randn(1, 3, 224, 224) # 創建一個隨機輸入
output = model(x) # 通過模型進行前向傳播
print(output.shape) # 輸出形狀
代碼核心部分解釋:
transI_fusebn: 該函數用于將卷積層的權重和批歸一化層的參數融合,生成一個新的卷積核和偏置。這在模型推理時可以減少計算量。

conv_bn: 該函數創建一個包含卷積層和批歸一化層的序列,方便在模型中使用。

DiverseBranchBlock: 這是一個自定義的神經網絡模塊,包含一個卷積層和批歸一化層。其構造函數接受輸入通道數、輸出通道數、卷積核大小等參數,并在前向傳播中計算輸出。

forward: 前向傳播方法,接受輸入并通過定義的卷積層和批歸一化層計算輸出。

以上是對代碼中最核心部分的保留和詳細注釋。

這個程序文件 rep_block.py 定義了一些用于構建神經網絡中多樣化分支模塊的類和函數,主要用于深度學習中的卷積神經網絡(CNN)。文件中使用了 PyTorch 框架,并實現了一些特定的卷積操作和批歸一化(Batch Normalization)功能。

首先,文件中導入了必要的庫,包括 torch 和 torch.nn,并從其他模塊中引入了一些自定義的卷積函數。接下來,定義了一些轉換函數,例如 transI_fusebn、transII_addbranch 等,這些函數主要用于處理卷積核和偏置的融合、合并等操作,以便在網絡推理時提高效率。

接下來,定義了幾個類,主要包括 DiverseBranchBlock、WideDiverseBranchBlock 和 DeepDiverseBranchBlock,這些類實現了不同類型的分支模塊。每個模塊的構造函數中都包含了多個卷積層和批歸一化層的組合,具體的實現細節根據輸入和輸出通道數、卷積核大小、步幅、填充等參數進行調整。

DiverseBranchBlock 類實現了一個多樣化的分支模塊,支持多種卷積操作,包括 1x1 卷積和 kxk 卷積。它還提供了一個 switch_to_deploy 方法,用于在推理階段將模型轉換為更高效的形式,減少計算量。

WideDiverseBranchBlock 類則在此基礎上增加了對水平和垂直卷積的支持,能夠處理不同方向的卷積操作,并將其結果合并到輸出中。這個模塊在設計上更為復雜,能夠處理更豐富的特征信息。

DeepDiverseBranchBlock 類是一個更深層次的模塊,允許用戶自定義內部卷積通道數,并支持在推理階段的高效轉換。

此外,文件中還定義了一些輔助類,如 IdentityBasedConv1x1 和 BNAndPadLayer,分別用于實現帶有身份映射的 1x1 卷積和結合批歸一化的填充層。這些類的設計旨在增強模型的靈活性和可擴展性。

總體來說,這個文件實現了一種靈活的神經網絡模塊設計,能夠根據不同的需求組合多種卷積操作,并通過批歸一化提高訓練和推理的效率。通過這些模塊,用戶可以方便地構建和調整深度學習模型,以適應各種計算任務。

源碼文件

在這里插入圖片描述

源碼獲取

歡迎大家點贊、收藏、關注、評論啦 、查看👇🏻獲取聯系方式

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

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

相關文章

萊特萊德:以“第四代極限分離技術”,賦能生物發酵產業升級

萊特萊德:以“第四代極限分離技術”,賦能生物發酵產業升級Empowering Upgrades in the Bio-Fermentation Industry with "Fourth-Generation Extreme Separation Technology生物發酵行業正經歷從 “規模擴張” 向 “質效提升” 的關鍵轉型&#xff…

外賣大戰之后,再看美團的護城河

美團(03690.HK)于近日發布了2025年Q2財報,市場無疑將更多目光投向了其備受關注的外賣業務上。毫無懸念,受外賣競爭和加大投入的成本影響,美團在外賣業務上的財務數據受到明顯壓力,利潤大幅下跌,…

R包fastWGCNA - 快速執行WGCNA分析和下游分析可視化

最新版本: 1.0.0可以對著視頻教程學習和使用:然而還沒錄呢, 關注B站等我更新R包介紹 開發背景 WGCNA是轉錄組或芯片表達譜數據常用得分析, 可用來鑒定跟分組或表型相關得模塊基因和核心基因但其步驟非常之多, 每次運行起來很是費勁, 但需要修改的參數并不多所以完全…

GitHub 熱榜項目 - 日榜(2025-08-29)

GitHub 熱榜項目 - 日榜(2025-08-29) 生成于:2025-08-29 統計摘要 共發現熱門項目:11 個 榜單類型:日榜 本期熱點趨勢總結 本期GitHub熱榜展現出三大技術趨勢:1)AI應用持續深化,ChatGPT等大模型系統提示…

【深度學習實戰(58)】bash方式啟動模型訓練

export \PATHPYTHONPATH/workspace/mmlab/mmdetection/:/workspace/mmlab/mmsegmentation/:/workspace/mmlab/mmdeploy/:${env:PYTHONPATH} \CUDA_VISIBLE_DEVICES0 \DATA_ROOT_1/mnt/data/…/ \DATA_ROOT_2/mnt/data/…/ \DATA_ROOT_MASK/…/ \PATH_COMMON_PACKAGES_SO…sonoh…

【物聯網】關于 GATT (Generic Attribute Profile)基本概念與三種操作(Read / Write / Notify)的理解

“BLE 讀寫”在這里具體指什么? 在你的系統里,樹莓派是 BLE Central,Arduino 是 BLE Peripheral。 Central 和 Peripheral 通過 **GATT 特征(Characteristic)**交互:讀(Read)&#x…

JavaSE丨集合框架入門(二):從 0 掌握 Set 集合

這節我們接著學習 Set 集合。一、Set 集合1.1 Set 概述java.util.Set 接口繼承了 Collection 接口,是常用的一種集合類型。 相對于之前學習的List集合,Set集合特點如下:除了具有 Collection 集合的特點,還具有自己的一些特點&…

金屬結構疲勞壽命預測與健康監測技術—— 融合能量法、紅外熱像技術與深度學習的前沿實踐

理論基礎與核心方法 疲勞經典理論及其瓶頸 1.1.疲勞失效的微觀與宏觀機理: 裂紋萌生、擴展與斷裂的物理過程。 1.2.傳統方法的回顧與評析。 1.3.引出核心問題:是否存在一個更具物理意義、能統一描述疲勞全過程(萌生與擴展)且試驗量…

【貪心算法】day4

📝前言說明: 本專欄主要記錄本人的貪心算法學習以及LeetCode刷題記錄,按專題劃分每題主要記錄:(1)本人解法 本人屎山代碼;(2)優質解法 優質代碼;&#xff…

AI 與腦機接口的交叉融合:當機器 “讀懂” 大腦信號,醫療將迎來哪些變革?

一、引言(一)AI 與腦機接口技術的發展現狀AI 的崛起與廣泛應用:近年來,人工智能(AI)技術迅猛發展,已廣泛滲透至各個領域。從圖像識別、自然語言處理到智能決策系統,AI 展現出強大的數…

uniapp vue3 canvas實現手寫簽名

userSign.vue <template><view class"signature"><view class"btn-box" v-if"orientation abeam"><button click"clearClick">重簽</button><button click"finish">完成簽名</butt…

頁面跳轉html

實現流程結構搭建&#xff08;HTML&#xff09;創建側邊欄容器&#xff0c;通過列表或 div 元素定義導航項&#xff0c;每個項包含圖標&#xff08;可使用字體圖標庫如 Font Awesome&#xff09;和文字&#xff0c;為后續點擊交互預留事件觸發點。樣式設計&#xff08;CSS&…

Spring Boot自動裝配機制的原理

文章目錄一、自動裝配的核心觸發點&#xff1a;SpringBootApplication二、EnableAutoConfiguration的作用&#xff1a;導入自動配置類三、自動配置類的加載&#xff1a;SpringFactoriesLoader四、自動配置類的條件篩選&#xff1a;Conditional注解五、自動配置的完整流程六、自…

(未完結)階段小總結(一)——大數據與Java

jdk8-21特性核心特征&#xff1a;&#xff08;8&#xff09;lambda&#xff0c;stream api&#xff0c;optional&#xff0c;方法引用&#xff0c;函數接口&#xff0c;默認方法&#xff0c;新時間Api&#xff0c;函數式接口&#xff0c;并行流&#xff0c;ComletableFuture。&…

嵌入式Linux驅動開發:設備樹與平臺設備驅動

嵌入式Linux驅動開發&#xff1a;設備樹與平臺設備驅動 引言 本筆記旨在詳細記錄嵌入式Linux驅動開發中設備樹&#xff08;Device Tree&#xff09;和平臺設備驅動&#xff08;Platform Driver&#xff09;的核心概念與實現。通過分析提供的代碼與設備樹文件&#xff0c;我們…

【完整源碼+數據集+部署教程】骨折檢測系統源碼和數據集:改進yolo11-EfficientHead

背景意義 骨折作為一種常見的骨骼損傷&#xff0c;其診斷和治療對患者的康復至關重要。傳統的骨折檢測方法主要依賴于醫生的經驗和影像學檢查&#xff0c;如X光、CT等&#xff0c;這不僅耗時&#xff0c;而且容易受到主觀因素的影響。隨著計算機視覺和深度學習技術的迅猛發展&a…

面試記錄7 c++軟件開發工程師

開目 一面&#xff1a; 自我介紹你做的xxx應用是用c做的嗎&#xff0c;是在window平臺嗎具體做的事情是什么你說的2D3D的結構是什么樣的&#xff0c;怎樣去做校驗有沒有二維到三維或者三維到二維的數據轉換兩個向量怎么去做校驗做的什么優化有調用第三方庫嗎是用的什么工具&…

計算機網絡:服務器處理多客戶端(并發服務器)

一、服務器處理多客戶端&#xff08;并發服務器&#xff09;&#xff08;一&#xff09;listen:監聽客戶端的連接請求&#xff0c;放入請求隊列&#xff08;二&#xff09;accpet&#xff1a;請求隊列中提取已連接的請求&#xff0c;返回連接好的fd&#xff08;循環accpet即可&…

Ansible自動化運維:原理以及安裝教程

目錄 Linux Ansible&#xff1a;作用與原理詳解 一、Ansible 的核心作用 1. 配置管理&#xff08;Configuration Management&#xff09; 2. 應用部署&#xff08;Application Deployment&#xff09; 3. 任務編排&#xff08;Orchestration&#xff09; 4. 其他擴展作用 二、A…

[機器學習]基于K-means聚類算法的鳶尾花數據及分類

基于Kmeans&#xff0c;對鳶尾花數據集前兩個特征進行聚類分析通過迭代優化&#xff0c;將150個樣本劃分到K個簇中。目標函數&#xff1a;最小化所有樣本到其所屬簇中心的距離平方和。算法步驟&#xff1a;隨機初始化K個簇中心。將每個樣本分配到最近的中心。計算均值確定每個簇…