深度學習-數據準備

一、數據準備

1.1定義

????????數據準備(Data Preparation)?是數據分析與機器學習流程中的核心環節,指將原始數據轉換為適合分析或建模的結構化格式的過程。

1.2組成

? ? ? ? 數據準備主要由兩個部分組成,一個是劃分數據集,一個是構建加載器。

二、構建數據類

2.1Dataset類

2.1.1基本介紹?

???????? Dataset是一個抽象類,自定義的數據類都要繼承于它。它定義了數據集必須實現的方法。

這里必須的方法就有兩個:

(1)__len__:獲取數據集的大小;

(2)__getitem__?:通過索引訪問數據集的樣本;

還有一個初始化方法:

__init__:初始化數據,將需要加載的數據放在這里。

2.1.2三個方法的大致實現方式

(1)__init__:

def __init__(self,data,labels):self.data = dataself.labels = labels

注意:?

左側self.data是屬性:存儲在對象的內存空間中,生命周期與對象相同(只要對象存在就可用)。

右側data是參數:它們是函數調用時傳入的臨時變量生命周期僅限于__init__方法執行期間。

(2)__len__:

def __len__(self):return len(self.data)

(3)__getitem__:

def __getitem__():sample = self.data[index]label = self.labels[index]return sample,label

注意:返回的是一個元組?

2.1.3完整定義數據類

步驟:

(1)自定義類繼承基類Dataset;

(2)實現len,getitem方法;

(3)通過__init__加載外部數據。

(4)創建函數,打印查看結果。

代碼示例:

import torch
from torch import optim
import torch.nn as nn
from torch.utils.data import Dataset
class mydataset(Dataset):#繼承def __init__(self,data,labels):self.data = dataself.labels = labelsdef __len__(self):return len(self.data)def __getitem__(self, index):index = min(max(index,0),len(self.data)-1)sample = self.data[index]label = self.labels[index]return  sample,labeldef test():x = torch.randn(20,1,dtype=torch.float,requires_grad=True)y = torch.randn(20,1,dtype=torch.float)dataset = mydataset(x,y)print(dataset[0])model = nn.Linear(1,1)criterion = nn.MSELoss()optimizer = optim.Adam(model.parameters(),lr = 0.01)for epoch in range(20):y_pred = model(x)loss = criterion(y,y_pred)optimizer.zero_grad()loss.backward()optimizer.step()print(model.weight,model.bias)if __name__ == '__main__':test()

代碼解釋:

這段代碼實現了一個簡單的線性回歸模型訓練演示,主要作用是展示PyTorch的基本工作流程。具體來說:

  1. 創建隨機數據

    • 生成20個隨機數作為輸入特征?x

    • 生成20個隨機數作為目標值?y

  2. 構建數據集

    • 使用自定義的?mydataset?類封裝數據

    • 實現數據集的長度和索引訪問功能

  3. 定義線性模型

    • 創建最簡單的神經網絡:單層線性層 (nn.Linear(1,1))

    • 相當于數學中的?y = wx + b

  4. 配置訓練組件

    • 損失函數:均方誤差 (MSELoss)

    • 優化器:Adam算法

  5. 執行訓練循環

    • 重復20次訓練過程:

      1. 模型預測 (y_pred = model(x))

      2. 計算預測值與真實值的差異 (loss)

      3. 反向傳播計算梯度 (loss.backward())

      4. 優化器更新參數 (optimizer.step())

  6. 輸出結果

    • 打印訓練后的權重?w?和偏置?b

結果:

(tensor([0.4495], grad_fn=<SelectBackward0>), tensor([-0.4830]))
Parameter containing:
tensor([[-0.3186]], requires_grad=True) Parameter containing:
tensor([0.7820], requires_grad=True)

2.2TensorDataset類

TensorDataset實行起來比Dataset自定義更簡單些,它適用于數據已經是張量的形式。

直接調用TensorDataset就行

代碼示例:

import torch
from torch.utils.data import TensorDataset
def tensordataset():features = torch.randn(12,3)labels = torch.randint(0,2,(12,))dataset = TensorDataset(features,labels)print(dataset[1])print(len(dataset))if __name__ == '__main__':# test()tensordataset()

結果:

(tensor([ 1.9409, -1.8119, ?0.3687]), tensor(1))
12

三、數據加載器

3.1簡單定義

????????數據加載器主要是用來加載數據集中的批量樣本,有時候我們并不需要一股腦的把所有的數據樣本都加載到模型中進行訓練。

3.2數據加載器的作用

數據加載器是一個迭代器,要將里面的樣本取出的話需要用到枚舉法。

主要功能:

(1)批量加載數據;

(2)打亂數據;

(3)多線程加載。

3.3創建dataloder

dataloader = DataLoader(dataset,batch_size = 10,shuffle = True,num_workers = 2  #使用兩個子進程加載數據    
)

枚舉:

?enumerate返回枚舉對象,生成由索引和值組成的元組。

  1. enumerate(dataloader):

    • dataloader?是一個 PyTorch 的 DataLoader 對象

    • enumerate()?函數會給每次迭代添加一個索引(從0開始)

  2. batch_index:

    • 當前批次的索引號(第幾個批次)

    • 從0開始計數

  3. (samples, labels):

    • 解包 DataLoader 返回的一個批次的數據

    • samples: 當前批次的輸入數據(特征)

    • labels: 當前批次對應的標簽

  4. 打印內容:

    • print(batch_index): 打印當前批次的序號

    • print(samples): 打印當前批次的所有樣本數據

    • print(labels): 打印當前批次的所有標簽

for batch_index,(samples,labels) in enumerate(dataloader):print(batch_index)print(samples)print(labels)

3.4相關案例

數據加載器一般是在數據準備后用,它不是放在類里面的,或者是放在循環中。

代碼示例:

import torchfrom torch.utils.data import TensorDataset,DataLoader
def test():x = torch.randn(21,3,dtype=torch.float,requires_grad=True)y = torch.randn(21,1)dataset = TensorDataset(x,y)dataloader = DataLoader(dataset, batch_size=7, shuffle=True)for i, (batch_x, batch_y) in enumerate(dataloader):print(batch_x, batch_y)break
if __name__ == '__main__':test()

代碼解釋:

  1. 創建隨機數據

    • x:21個樣本,每個樣本有3個特征(21×3的隨機浮點數張量)

    • y:21個對應的標簽(21×1的隨機浮點數張量)

  2. 封裝數據集

    • 使用TensorDataset將特征x和標簽y組合成一個數據集

  3. 創建數據加載器

    • 使用DataLoader將數據集分成每批7個樣本

    • shuffle=True表示每次迭代前打亂數據順序

  4. 分批獲取數據

    • 遍歷數據加載器獲取批次數據

    • break語句確保只打印第一個批次的數據

關鍵輸出:

當運行代碼時,會打印出第一個批次(7個樣本)的數據:

batch_x (7×3張量): 
[[特征1, 特征2, 特征3],[特征1, 特征2, 特征3],...]batch_y (7×1張量):
[標簽1],
[標簽2],
...

結果:

tensor([[-1.0268, -0.8619, -1.6537],
? ? ? ? [ 1.3707, -0.4312, ?0.0943],
? ? ? ? [ 0.3188, ?0.9837, -0.5358],
? ? ? ? [ 0.5535, ?0.5231, -0.0356],
? ? ? ? [ 1.3922, ?0.7636, ?0.3401],
? ? ? ? [ 1.0909, ?0.9076, ?0.1129],
? ? ? ? [ 0.8337, ?0.7352, -1.0355]], grad_fn=<StackBackward0>) tensor([[ 0.6652],
? ? ? ? [ 2.3144],
? ? ? ? [ 1.6643],
? ? ? ? [ 0.8918],
? ? ? ? [-0.4568],
? ? ? ? [ 0.9112],
? ? ? ? [-0.5561]])

四、數據集加載案例

4.1加載csv數據集

注意文件路徑的輸入,可以輸入絕對路徑。

可以選擇用自定義類的方式讀取文件,也可以用TensorDataset讀取文件,但是要注意后者所有數據必須全部轉為張量。

(1)自定義類

import torch
from torch.utils.data import Dataset,DataLoader
import pandas as pd
class mycsv(Dataset):def __init__(self,filepath):df = pd.read_csv(filepath)df = df.drop(['學號','姓名'],axis=1)data = torch.tensor(df.values)self.data = data[:,:-1] #除了最后一列的所有行self.label = data[:,-1] #所有行的最后一列def __len__(self):return len(self.data)def __getitem__(self, idx):idx = min(max(idx,0),len(self.data)-1)return self.data[idx],self.label[idx]def test():csv_path = r'E:\AI\課件\深度學習\圖片資料\大數據答辯成績表.csv'dataset = mycsv(csv_path)print(dataset[0])dataloder = DataLoader(dataset,batch_size=3,shuffle=True)#批量加載3條數據內容for i,(data,label) in enumerate(dataloder):print(i,data,label)break
if __name__ == '__main__':test()

結果:

(tensor([16, 16, 21, 22]), tensor(75))
0 tensor([[15, 15, 20, 21],
? ? ? ? [15, 16, 22, 22],
? ? ? ? [16, 16, 21, 20]]) tensor([71, 75, 73])

(2)TensorDataset

'''
(1)讀取數據
(2)數據處理
(3)轉換張量
(4)TensorDataset
(5)返回
'''
def buid_dataset(filepath):df = pd.read_csv(filepath)df = df.drop(['學號','姓名'],axis=1)data = df.iloc[:,:-1]labels = df.iloc[:,-1]x = torch.tensor(data.values,dtype=torch.float)y = torch.tensor(labels.values)dataset = TensorDataset(x,y)return dataset'''
(1)讀取文件路徑
(2)數據集引入
(3)數據加載器
(4)枚舉查看結果
'''
def test01():filepath =  r'E:\AI\課件\深度學習\圖片資料\大數據答辯成績表.csv'dataset = buid_dataset(filepath)dataloader = DataLoader(dataset,batch_size=7,shuffle=True)for i,(data,label) in enumerate(dataloader):print(i,data,label)if __name__ == '__main__':# test()test01()

結果:

0 tensor([[15., 15., 21., 20.],
? ? ? ? [16., 16., 25., 19.],
? ? ? ? [18., 20., 29., 29.],
? ? ? ? [18., 18., 25., 27.],
? ? ? ? [15., 16., 23., 21.],
? ? ? ? [17., 20., 27., 26.],
? ? ? ? [18., 20., 27., 27.]]) tensor([71, 76, 96, 88, 75, 90, 92])
1 tensor([[19., 19., 27., 25.],
? ? ? ? [15., 16., 21., 20.],
? ? ? ? [18., 18., 22., 23.],
? ? ? ? [16., 16., 21., 22.],
? ? ? ? [14., 16., 22., 21.],
? ? ? ? [14., 16., 22., 24.],
? ? ? ? [17., 16., 21., 22.]]) tensor([90, 72, 81, 75, 73, 76, 76])
2 tensor([[15., 15., 20., 22.],
? ? ? ? [15., 15., 20., 21.],
? ? ? ? [15., 15., 20., 21.],
? ? ? ? [16., 16., 23., 19.],
? ? ? ? [18., 18., 24., 23.],
? ? ? ? [18., 20., 28., 28.],
? ? ? ? [19., 19., 28., 28.]]) tensor([72, 71, 71, 74, 83, 94, 94])
3 tensor([[14., 16., 22., 22.],
? ? ? ? [19., 19., 28., 27.],
? ? ? ? [15., 15., 21., 20.],
? ? ? ? [15., 16., 23., 21.],
? ? ? ? [17., 16., 20., 21.],
? ? ? ? [17., 16., 24., 24.],
? ? ? ? [15., 15., 21., 20.]]) tensor([74, 93, 71, 75, 74, 81, 71])
4 tensor([[17., 16., 21., 22.],
? ? ? ? [18., 16., 20., 22.],
? ? ? ? [18., 18., 25., 24.],
? ? ? ? [15., 15., 20., 21.],
? ? ? ? [15., 16., 22., 22.],
? ? ? ? [14., 16., 22., 21.],
? ? ? ? [18., 16., 20., 22.]]) tensor([76, 76, 85, 71, 75, 73, 76])
5 tensor([[15., 15., 21., 20.],
? ? ? ? [15., 16., 23., 22.],
? ? ? ? [19., 19., 28., 24.],
? ? ? ? [15., 16., 23., 21.],
? ? ? ? [16., 16., 23., 19.],
? ? ? ? [15., 16., 21., 20.],
? ? ? ? [17., 16., 22., 23.]]) tensor([71, 76, 90, 75, 74, 72, 78])
6 tensor([[15., 15., 20., 22.],
? ? ? ? [16., 16., 21., 20.],
? ? ? ? [16., 16., 21., 22.]]) tensor([72, 73, 75])


?

4.2加載圖片數據集

? ? ? ? 這里主要介紹imageFolder構造函數的方法:

import torch
from torchvision import datasets, transforms
import os
from torch.utils.data import DataLoader
from matplotlib import pyplot as plttorch.manual_seed(42)def load():path = os.path.join(os.path.dirname(__file__), 'dataset')print(path)transform = transforms.Compose([transforms.Resize((112, 112)),transforms.ToTensor()])dataset = datasets.ImageFolder(path, transform=transform)dataloader = DataLoader(dataset, batch_size=1, shuffle=True)for x,y in dataloader:x = x.squeeze(0).permute(1, 2, 0).numpy()plt.imshow(x)plt.show()print(y[0])breakif __name__ == '__main__':load()

4.3加載官方數據集

? ? ? ? pytorch框架中有一些經典的官方數據集,我們舉例以cifar-10為例。

????????CIFAR10: 包含 10 個類別的 60,000 張 32x32 彩色圖像,每個類別 6,000 張圖像。?其中訓練集50,000張,測試集10,000張。

? ? ? ? 下載官方數據集要引入torchvision中的transforms,datasets。

? ? ? ? API:from torchvision import transforms,datasets

代碼示例:

def test():transform = transforms.Compose([transforms.ToTensor(),])# 訓練數據集data_train = datasets.CIFAR10(root="./data",train=True,download=True,transform=transform,)trainloader = DataLoader(data_train, batch_size=4, shuffle=True, num_workers=2)for x, y in trainloader:print(x.shape)print(y)break# 測試數據集data_test = datasets.CIFAR10(root="./data",train=False,download=True,transform=transform,)testloader = DataLoader(data_test, batch_size=4, shuffle=False, num_workers=2)for x, y in testloader:print(x.shape)print(y)breakif __name__ == '__main__':test()

代碼解釋:

  • datasets.CIFAR10參數

    • root="./data":數據存儲路徑。
    • train=True:加載訓練集(50,000 張圖像)。
    • download=True:若數據不存在,則自動下載。
    • transform=transform:應用前面定義的預處理。
  • DataLoader參數

    • batch_size=4:每次加載 4 張圖像和標簽。
    • shuffle=True:每個 epoch 前打亂數據,增強訓練隨機性。
    • num_workers=2:使用 2 個子進程并行加載數據(提高效率)

這段代碼的核心功能是:

  1. 數據加載:通過torchvision.datasets下載 CIFAR-10 數據集,并使用DataLoader批量加載。
  2. 數據格式展示
    • 輸入[batch_size, channels, height, width]的張量。
    • 標簽:類別索引(0-9)的張量。
  3. 驗證數據結構:通過打印第一批數據,確認數據格式是否符合預期。

五、激活函數

5.1基本概念

? ? ? ? 如果在隱層不使用激活函數,神經網絡表現為線性模型,整個網絡就是線性模型,無法捕捉數據中的非線性關系。 這時候做回歸比較好,做分類的效果不太好。

? ? ? ?非線性可視化:A Neural Network Playground

????????該網址可以查看激活函數對分類和回歸的效果,更直觀觀察結果。

????????激活函數的作用是在隱藏層引入非線性,使得神經網絡能夠學習和表示復雜的函數關系,使網絡具備非線性能力,增強其表達能力。

5.2分類

5.2.1sigmoid函數

? ? ? ? sigmoid函數適合運用于二分類問題中,它將神經網絡的輸出值處理后,將值壓縮到0-1之間,適合處理概率問題。

? ? ? ? 缺點:

(1)出現梯度消失的情況;

(2)信息丟失:輸入100和輸入10000,他們的結果都是映射到0-1之間;

(3)計算量大,設計指數運算。

sigmoid的計算公式:

5.2.2tanh函數

? ? ? ? tanh(雙曲正切)也是常見的激活函數,用于處理分類問題,它的輸出范圍為(-1,1),當輸入為0時,它的輸出也為0。

缺點:

(1)在sigmoid的基礎上改進了些,但也涉及梯度消失問題;

(2)計算成本大,也設計指數運算。

計算公式:

5.2.3ReLU函數

? ? ? ? ReLU(修正線性單元),它的計算簡單,緩解了梯度消失問題,因為ReLU的正半求導區恒為1,梯度不會變小,負半區輸入小于等于0,這會導致部分神經元死亡,從而降低模型的表達能力,但是也有好處,稀疏激活,這樣可以減少冗余信息。

計算公式:

5.2.4LeakyReLU函數

? ? ? ? LeakyLeLU是ReLU的改進版本,主要是為了解決ReLU的神經元死亡問題。它的計算還是比較簡單快捷的。

缺點:

(1)參數選擇,α是一超參數,選擇一個合適的α值需要反復測試;

(2)參數設置不對可能會導致激活值過低。

計算公式:

注意:ReLU(Rectified Linear Unit)和LeakyReLU(Leaky Rectified Linear Unit)既可用于線性回歸,也可用于分類任務,它們本身不是特定于某種任務,而是神經網絡中的激活函數

5.2.5softmax函數

? ? ? ? softmax函數是用于分類問題的輸出層,將輸出結果轉換為概率分布,使輸出的各個類別的概率之和為1。softmax只是對向量的值做了改變,但它的位置不變。

特點:

(1)將輸出值轉換為0-1之間的概率分布;

(2)概率最大的類別更接近1,其他接近于0;

(3)運用于分類。

計算公式:

5.3合適的選擇

激活函數的應用,主要是應用在隱藏層或者輸出層。

隱藏層:優先選擇ReLU,然后是LeakyReLU,避免sigmoid,嘗試tanh

輸出層:

(1)二分類:sigmoid

(2)多分類:softmax

六、小結

? ? ? ? 主要學習了數據準備的構建數據類和數據加載器,主要是熟練運用操作。其次是熟悉激活函數,記住特征。

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

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

相關文章

IPA軟件源預覽系統源碼(源碼下載)

這是一款IPA軟件源預覽系統源碼&#xff0c;搭建這個源碼一定記住沒有軟件源的別搭建&#xff0c;因為你玩不明白&#xff0c;不是做IPA軟件源的不要下載這套源碼&#xff0c;簡單的測試了&#xff0c;UI很舒服&#xff0c;喜歡的自行部署&#xff01; 源碼下載&#xff1a;htt…

python 數據分析 單細胞測序數據分析 相關的圖表,常見于腫瘤免疫微環境、細胞亞群功能研究 ,各圖表類型及邏輯關系如下

這是一組 單細胞測序數據分析 相關的圖表&#xff0c;常見于腫瘤免疫微環境、細胞亞群功能研究 &#xff0c;各圖表類型及邏輯關系如下&#xff1a;使用kimi doubao 和deepseek &#xff0c;分析圖標和pdf 豆包最好&#xff0c;用豆包分析| 圖表類型 A、E&#xff08;堆疊柱狀…

表達式索引海外云持久化實踐:關鍵技術解析與性能優化

隨著全球數字化轉型加速&#xff0c;表達式索引技術正成為海外云服務商提升數據庫性能的核心方案。本文將深度解析如何通過云原生架構實現索引持久化&#xff0c;對比主流云平臺的技術實現差異&#xff0c;并給出跨國業務場景下的優化建議。 表達式索引海外云持久化實踐&#x…

sprinboot團隊任務管理系統 計算機畢業設計源碼32322

摘 要 隨著團隊協作模式的日益多樣化&#xff0c;傳統的任務管理方法已無法滿足現代團隊對高效協作和任務分配的需求。因此&#xff0c;本研究通過引入信息化設計并實現了一套團隊任務管理系統&#xff0c;旨在為管理員、成員用戶和團長用戶等用戶提供高效、靈活的任務管理…

單鏈表,咕咕咕

1.引入單鏈表順序表對于中間或者頭部的刪除&#xff0c;時間復雜度為O(N)&#xff0c;增容需要申請新的空間&#xff0c;拷貝數據&#xff0c;釋放就空間&#xff0c;消耗。增容一般是2倍的增長&#xff0c;會有空間的浪費。為了解決這些問題&#xff0c;引入了單鏈表。2.單鏈表…

docker設置鏡像加速

配置鏡像加速器解決 Docker 拉取問題 在使用 Docker 拉取鏡像時&#xff0c;我首先按照官方指引嘗試配置阿里云鏡像加速器。然而&#xff0c;多次操作后仍無法正常使用&#xff0c;懷疑是個人賬號沒有權限拉取鏡像&#xff0c;但經過多輪權限檢查與配置核對&#xff0c;始終未…

【計算機網絡】王道考研筆記整理(2)物理層

第二章 物理層2.1 通信基礎的基本概念本節主要介紹通信中常用的一些基本概念&#xff0c;包括&#xff1a;信源、信宿、信號、信道&#xff0c;以及碼元、速率、波特。首先&#xff0c;我們來看什么是信源、信宿、信號、信道&#xff0c;這些概念通過一張圖就可以理解。其中&a…

2023年IEEE TITS SCI2區TOP,增強回溯搜索算法EBSA+多無人機輔助商業包裹遞送系統飛行規劃,深度解析+性能實測

目錄1.摘要2.回溯搜索算法BSA原理3.模型定義4.增強回溯搜索算法EBSA5.結果展示6.參考文獻7.算法輔導應用定制讀者交流1.摘要 利用無人機進行商業包裹投遞可以顯著推動物流行業的轉型升級&#xff0c;這得益于節省了人力資源成本&#xff0c;而無人機正在成為智能交通運輸系統的…

window wsl 環境下編譯openharmony,HarmonyOS 三方庫 FFmpeg

1.wsl 創建 C:\Users\Administrator>wsl --list --online 以下是可安裝的有效分發的列表。 使默認分發用 “*” 表示。 使用 wsl --install -d <Distro> 安裝。 NAME FRIENDLY NAME Ubuntu Ubuntu Debian Debian GNU/Linux kali-linux Kali Linux Rolling Ub…

Kubernetes服務暴露與負載均衡深度探析

目錄 Kubernetes服務基礎 服務類型與適用場景 服務發現與DNS 負載均衡機制 kube-proxy IPVS Ingress控制器 Ingress與服務暴露 Ingress資源 Ingress控制器 負載均衡策略與配置 服務配置 Ingress配置 IPVS配置 高可用性設計 服務冗余 Ingress控制器高可用 負載…

探索飛算 JavaAI 進階:解鎖高效Java開發的新維度

前引&#xff1a;在當今快速迭代的軟件開發領域&#xff0c;Java作為企業級應用的基石&#xff0c;持續推動著技術創新。隨著性能需求的提升&#xff0c;“飛算JAVA”應運而生&#xff0c;它融合了現代優化理念&#xff0c;為開發者提供了一套簡潔、高效的解決方案。本文將深入…

Java大廠面試故事:謝飛機的互聯網醫療系統技術面試(Spring Boot、MyBatis、Kafka、Spring Security、AI等)

Java大廠面試故事&#xff1a;謝飛機的互聯網醫療系統技術面試&#xff08;Spring Boot、MyBatis、Kafka、Spring Security、AI等&#xff09;本文以互聯網醫療場景為主線&#xff0c;模擬Java大廠真實面試流程&#xff0c;由嚴肅面試官與"水貨"程序員謝飛機展開有趣…

Deekseek 學習筆記

目錄 比較全的微調筆記&#xff0c;推薦&#xff1a; ds 硬件gpu測試網站&#xff1a; 比較全的微調筆記&#xff0c;推薦&#xff1a; 零基礎入門&#xff1a;DeepSeek微調教程來了&#xff01;_deepseek微調訓練-CSDN博客 r1微調筆記&#xff1a; https://zhuanlan.zhihu…

aksk前端簽名實現

需求&#xff1a; 頁面和后臺使用aksk進行簽名校驗&#xff0c;普通JSON參數簽名沒問題&#xff0c;但使用formData上傳文件時簽名總是無法通過后臺校驗 關鍵點&#xff1a; 1、瀏覽器在傳遞formData格式數據時會自動隨機boundary&#xff0c;這樣頁面無法在請求發起前拿到隨機…

基于物聯網的智能體重秤設計與實現

標題:基于物聯網的智能體重秤設計與實現內容:1.摘要 隨著物聯網技術的飛速發展&#xff0c;智能設備在人們日常生活中的應用越來越廣泛。本研究的目的是設計并實現一款基于物聯網的智能體重秤&#xff0c;以滿足人們對健康數據實時監測和管理的需求。方法上&#xff0c;采用高精…

安全領域的 AI 采用:主要用例和需避免的錯誤

作者&#xff1a;來自 Elastic Elastic Security Team 安全領域的 AI 采用&#xff1a;主要用例和需避免的錯誤 人工智能&#xff08;artificial intelligence - AI&#xff09;在安全領域的廣泛應用呈現出一種矛盾。一方面&#xff0c;它幫助安全專家大規模應對高級威脅&…

Element-Plus-全局自動引入圖標組件,無需每次import

效果圖配置如下1、核心代碼修改main.js/ts//main.js // 全局注冊圖標組件 import * as ElementPlusIconsVue from element-plus/icons-vue for (const [key, component] of Object.entries(ElementPlusIconsVue)) {app.component(key, component) } app.use(ElementPlusIconsVu…

日歷插件-FullCalendar的詳細使用

一、介紹FullCalendar 是一個功能強大、高度可定制的 JavaScript 日歷組件&#xff0c;用于在網頁中顯示和管理日歷事件。它支持多種視圖&#xff08;月、周、日等&#xff09;&#xff0c;可以輕松集成各種框架&#xff0c;并提供豐富的事件處理功能。二、實操案例具體代碼如下…

【A題解題思路】2025APMCM亞太杯中文賽A題解題思路+可運行代碼參考(無償分享)

注&#xff1a;該內容由“數模加油站”原創&#xff0c;無償分享&#xff0c;可以領取參考但不要利用該內容倒賣&#xff0c;謝謝&#xff01;A 題 農業灌溉系統優化問題1思路框架&#xff1a;1.1 研究背景與問題意義土壤濕度是農業生產中影響作物根系水分供應的關鍵環境指標。…

【JAVA】面向對象三大特性之繼承

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄前言一、繼承的概念和使用細則1.1 繼承的基本使用和含義1.2 關于子類訪問父類成員的問題1.3 super關鍵的引出1.4 super調用父類當中指定的構造方法1.5 關于super和th…