基于TimeMixer現有腳本擴展的思路分析

文章目錄

      • 1. 加入數據集到`data_loader.py`和`data_factory.py`
      • 2. 參照`exp_classification.py`寫自定義分類任務腳本(如`exp_ADReSS.py`)
      • 3. 接一個MLP分類頭
      • 4. 嵌入指標計算、繪圖、保存訓練歷史的函數
      • 5. 開始訓練
      • 總結
      • **一、可行性分析**
      • **二、具體實現步驟**
        • **1. 音頻數據預處理:轉換為時間序列特征**
        • **2. 適配數據加載器**
        • **3. 注冊數據集到數據工廠**
        • **4. 調整模型參數**
        • **5. 復用分類實驗框架**
      • **三、核心用到的文件**
      • **四、關鍵注意事項**
      • **核心矛盾:模型適配成本 vs 流程復用成本**
      • **方案1:將TimeMixer整合到舊架構(不推薦)**
        • 優點:
        • 缺點:
      • **方案2:基于TimeMixer現有腳本擴展(推薦)**
        • 優點:
      • **具體實施步驟(方案2)**
        • 1. 實現TimeMixer兼容的數據集類
        • 2. 注冊數據集到TimeMixer的工廠類
        • 3. 編寫訓練腳本(復用TimeMixer的`run.py`)
        • 4. 擴展指標計算與結果保存
      • **總結**

你的理解基本正確,但可以進一步細化和補充細節,確保流程更清晰。以下是對每個步驟的驗證和補充說明:

1. 加入數據集到data_loader.pydata_factory.py

  • 正確:新數據集需要在data_loader.py中定義對應的Dataset類(參考Dataset_ETT_hourUEAloader等現有類),實現數據讀取、預處理(如特征提取、時序長度處理)、__getitem__(返回序列數據、標簽、padding_mask等)。
  • 補充:需在data_factory.pydata_dict中注冊新數據集的名稱與對應的Dataset類(例如'ADReSS': Dataset_ADReSS),確保data_provider函數能正確加載數據。

2. 參照exp_classification.py寫自定義分類任務腳本(如exp_ADReSS.py

  • 正確:繼承Exp_Basic,復用_build_model_get_datatraintest等核心邏輯,適配新數據集的特性。
  • 補充
    • 需在_build_model中根據新數據集的特征維度(enc_in)、類別數(num_class)動態初始化模型。
    • 若新數據集的評估邏輯不同(如多標簽分類、特定指標),需修改valitest中的指標計算部分(當前exp_classification.py用的是單標簽分類的準確率)。

3. 接一個MLP分類頭

  • 正確:TimeMixer的主體是時序特征提取器,輸出為[B, T, D]B為批次,T為時序長度,D為特征維度),需通過MLP將其映射到類別空間。
  • 補充
    • 分類頭的實現通常在模型定義文件(如TimeMixer.pyModel類)中,通過if task_name == 'classification'分支添加,例如:
      self.classifier = nn.Sequential(nn.Linear(D * T, 256),  # 聚合時序特征(也可先用池化降維)nn.ReLU(),nn.Linear(256, num_classes)
      )
      
    • 需確保exp_ADReSS.py_build_model傳入正確的num_class參數(從數據集中獲取類別數)。

4. 嵌入指標計算、繪圖、保存訓練歷史的函數

  • 正確:需在訓練腳本中記錄每輪的訓練/驗證損失、準確率(或其他指標),并通過工具函數保存和可視化。
  • 補充
    • 指標計算:除準確率外,可根據任務需求添加混淆矩陣、F1-score、AUC等(參考utils/metrics.py擴展)。
    • 繪圖:復用utils/tools.py中的visual函數,或新增plot_training_curve函數,繪制損失和準確率隨epoch的變化曲線。
    • 保存歷史:訓練時用列表記錄每輪指標,訓練結束后通過np.savepd.DataFrame.to_csv保存到./results/目錄。

5. 開始訓練

  • 正確:通過編寫腳本(如scripts/classification/ADReSS_script/TimeMixer.sh),指定任務名稱(--task_name classification)、數據集名稱(--data ADReSS)、模型參數等,調用run.py啟動訓練。
  • 補充:需確保腳本中參數與新數據集匹配(如--seq_len設為數據集中的時序長度,--enc_in設為特征維度等)。

總結

你的流程框架正確,核心是確保新數據集的加載邏輯、模型分類頭適配、指標計算三者的一致性。建議按“數據加載→模型適配→訓練腳本→指標可視化”的順序逐步實現,每步驗證中間結果(如數據加載是否正確返回padding_mask,模型輸出維度是否匹配類別數)。

要將帕金森WAV音頻數據集用于該模型進行二分類任務,需要結合現有代碼的分類框架進行適配。以下是可行性分析及具體實現步驟:

一、可行性分析

現有代碼已包含完整的時間序列分類框架,核心支持如下:

  1. 分類任務模塊exp/exp_classification.py 定義了分類任務的訓練、驗證和測試流程,包含數據加載、模型優化、指標計算(準確率)等邏輯。
  2. 模型支持TimeMixer/models/TimeMixer.py 中的 classification 方法實現了基于時間序列的分類頭,可接收時間序列特征并輸出分類結果。
  3. 數據加載框架data_provider/data_loader.py 中的 UEAloader 處理時間序列分類數據,data_provider/data_factory.py 提供數據加載接口,可擴展支持新數據集。

帕金森音頻數據可通過特征提取轉換為時間序列(如MFCC特征序列),從而適配現有時間序列分類框架,因此方案可行。

二、具體實現步驟

1. 音頻數據預處理:轉換為時間序列特征

WAV音頻需提取時序特征(如MFCC、梅爾頻譜等),形成模型可接收的時間序列格式。

  • 處理方式
    • 對每個WAV文件提取MFCC特征(假設輸出形狀為 [T, F],其中 T 為時間步,F 為特征維度)。
    • 統一序列長度(截斷或補零),確保輸入模型的序列長度一致。
    • 按樣本ID組織數據,每個樣本包含特征序列和二分類標簽(患病/健康)。
2. 適配數據加載器

需擴展 data_provider/data_loader.py,新增音頻特征數據集類(類似 UEAloader):

# 在data_loader.py中添加
class ParkinsonLoader(Dataset):def __init__(self, root_path, flag='train'):self.root_path = root_pathself.flag = flag# 加載預處理后的特征文件(如CSV或NPZ)# 格式:每個樣本一行,包含特征序列和標簽self.features, self.labels = self.load_data()def load_data(self):# 加載提取的MFCC特征和標簽# 示例:features為numpy數組 [N, T, F],labels為[N, 1](0/1)data = np.load(os.path.join(self.root_path, f'{self.flag}_data.npz'))return data['features'], data['labels']def __getitem__(self, idx):x = torch.from_numpy(self.features[idx]).float()  # [T, F]y = torch.from_numpy(self.labels[idx]).long()     # 二分類標簽return x, y, torch.ones(x.shape[0])  # padding_mask(全1表示無填充)def __len__(self):return len(self.labels)
3. 注冊數據集到數據工廠

修改 data_provider/data_factory.py,添加新數據集的支持:

# 在data_dict中注冊
data_dict = {# ... 現有數據集 ...'parkinson': ParkinsonLoader  # 添加此行
}
4. 調整模型參數

通過腳本配置分類任務參數(參考現有 *.sh 腳本),新建 scripts/classification/parkinson.sh

model_name=TimeMixer
root_path=./dataset/parkinson/  # 存放預處理后的特征數據
data_path=parkinson  # 對應data_dict中的鍵
task_name=classification
seq_len=100  # 根據實際特征序列長度調整
enc_in=40    # MFCC特征維度(如40維)
num_class=2  # 二分類
batch_size=16
learning_rate=0.001
train_epochs=20python -u run.py \--task_name $task_name \--is_training 1 \--root_path $root_path \--data_path $data_path \--model_id parkinson_$seq_len \--model $model_name \--data parkinson \  # 對應data_dict中的鍵--seq_len $seq_len \--label_len 0 \--pred_len 0 \  # 分類任務無需預測長度--enc_in $enc_in \--c_out $num_class \--batch_size $batch_size \--learning_rate $learning_rate \--train_epochs $train_epochs \--patience 5
5. 復用分類實驗框架

直接使用 exp/exp_classification.py 中的 Exp_Classification 類,其已實現:

  • 模型初始化(自動適配輸入特征維度和類別數)
  • 訓練循環(使用CrossEntropyLoss和RAdam優化器)
  • 驗證/測試流程(計算準確率)

三、核心用到的文件

  1. 數據處理

    • data_provider/data_loader.py:擴展 ParkinsonLoader 加載音頻特征數據。
    • data_provider/data_factory.py:注冊新數據集,使框架可識別。
  2. 模型與訓練

    • TimeMixer/models/TimeMixer.pyclassification 方法作為分類頭。
    • exp/exp_classification.py:分類任務的訓練/驗證/測試邏輯。
  3. 啟動腳本

    • 自定義的 scripts/classification/parkinson.sh:配置參數并啟動訓練。

四、關鍵注意事項

  1. 特征提取質量:音頻特征(如MFCC)的選擇直接影響性能,需確保特征能有效區分患病/健康樣本。
  2. 序列長度統一:通過截斷或補零使所有樣本的時間步 T 一致,避免數據加載錯誤。
  3. 參數調優:根據數據集大小調整 batch_sized_modele_layers 等超參數。

通過以上步驟,可將帕金森音頻數據集接入現有框架完成二分類任務。

結合你的需求和提供的代碼細節,兩種方案的效率和可行性分析如下,最終更推薦基于TimeMixer現有腳本擴展的思路,具體原因如下:

上面給你提供的是我用 MLP 網絡來測試這個數據集的一個代碼,因為我要做數據集的基準,我不僅要用 MLP 網絡對它進行測試,我還會用 CNN 網絡,還會用這個 time Mixer,就是剛剛跟你提到的這個網絡對這個數據集進行測試,你可以從上面的代碼當中看到我的數據集的加載部分是比較個性的。因數據集而異的,下面的特征提取,還有模型的訓練,包括后面的指標的計算、保存,圖像的繪制都是用的我前面已經分離出來的一個函數來進行的。對于 time Mixer 模型,我也傾向于使用我原來的架構,因為在我原來的架構當中,除了數據集的個性化部分之外,模型的訓練、模型的指標計算、圖形的繪制部分都是固定好的,都是可以被我所用的復用的,不需要再去學習一個新的架構。在這個模型新的模型架構當中,我看到我需要在兩個數據文件當中去注冊我的數據集,然后。才能夠去進行訓練,請你幫我分析一下。我把模型,把這個新的模型提出來,放到我的舊架構當中,這個思路會更簡單高效一些,還是我用這個新模型提供的一系列的數據加載、數據處理的腳本,然后放入這個模型的訓練進程,然后可以自己再在基于這個新模型再寫一些指標的計算,圖形的繪制,指標的保存,這樣的一些復用函數。這樣會更簡單高效一些,我覺著第二種思路他的好處在于,對于這個完全的全新模型,我并不像 MLP、CNN 一樣熟悉,也就是說我對它的內部訓練細節并不了解,我們貿然地把它拿到我的舊的架構里面當中,我很可能不知道如何將它進行訓練。請你綜合新模型代碼幫我進行評估

核心矛盾:模型適配成本 vs 流程復用成本

你的核心訴求是“高效完成基準測試”,且對TimeMixer內部細節不熟悉。兩種方案的本質區別在于:

  • 方案1(整合到舊架構):需要深度適配TimeMixer的輸入格式、訓練邏輯與你的舊架構,依賴對TimeMixer的理解。
  • 方案2(基于TimeMixer擴展):復用TimeMixer成熟的訓練框架,只需適配數據加載和擴展指標計算,對模型細節依賴低。

方案1:將TimeMixer整合到舊架構(不推薦)

優點:
  • 可直接復用你已有的訓練循環、指標計算、可視化、結果保存等模塊化函數(如train_and_evaluatesave_results),流程一致性高。
缺點:
  • 適配成本高:TimeMixer的輸入格式與你的MLP/CNN不同。從代碼看,TimeMixer在分類任務中需要接收:

    • 時序特征batch_x(形狀[B, T, F],B為批次,T為時間步,F為特征維度)
    • padding_mask(標記有效時序長度,形狀[B, T]
      而你的舊架構中,MLP輸入是扁平的特征向量(如MFCC的統計特征拼接,形狀[B, F_total]),需修改數據加載邏輯,將時序特征(如原始MFCC序列,而非統計量)傳入模型,同時生成padding_mask
  • 調試難度大:TimeMixer包含下采樣層(down_sampling_layers)、時序注意力等特殊結構,若不熟悉其內部實現,整合時容易出現維度不匹配、mask失效等問題,且難以定位錯誤。

方案2:基于TimeMixer現有腳本擴展(推薦)

優點:
  • 適配風險低:TimeMixer的exp_classification.py已實現完整的分類訓練邏輯(含數據加載、模型編譯、早停等),且支持時序特征輸入。你只需按其規范實現數據集加載類,無需深入理解模型內部細節。

  • 復用你的核心代碼:你的MFCC特征提取、指標計算(如recall、f1、ROC-AUC)、可視化等代碼可直接復用:

    • 特征提取:在TimeMixer的數據集類中調用你的MFCC提取邏輯(如librosa.feature.mfcc),生成[T, F]的時序特征。
    • 指標擴展:TimeMixer目前僅計算準確率,可在其test方法中加入你的evaluate_model_detailed函數,補充多指標計算。
    • 結果保存:將你的save_results函數對接TimeMixer的測試輸出,無需重寫。
  • 符合模型設計規范:TimeMixer的腳本(如data_loader.py的數據集注冊、run.py的參數解析)已針對時序任務優化,遵循其規范可減少“自定義架構與模型不兼容”的問題(如padding處理、下采樣邏輯)。

具體實施步驟(方案2)

1. 實現TimeMixer兼容的數據集類

TimeMixer/data_provider/data_loader.py中添加你的數據集類(類似ParkinsonLoader),內部復用你的MFCC特征提取邏輯:

class ADReSSMDataset_TimeMixer(Dataset):def __init__(self, root_path, flag='train'):self.root_path = root_pathself.flag = flag  # 'train'/'test'self.audio_dir = Config.TRAIN_AUDIO_DIR if flag == 'train' else Config.TEST_AUDIO_DIRself.label_path = Config.TRAIN_LABEL_PATH if flag == 'train' else Config.TEST_LABEL_PATHself.features, self.labels = self.load_data()  # 復用你的load_data邏輯self.max_seq_len = max([f.shape[0] for f in self.features])  # 最大時序長度(用于統一padding)def load_data(self):# 復用你原代碼中的ADReSSMDataset.load_data邏輯,但返回原始MFCC序列(非統計量)# 即每個樣本是[T, F]的時序特征(T為時間步,F為MFCC維度)features = []labels = []# ...(省略:讀取音頻文件、提取MFCC序列、映射標簽的代碼,復用你原有的邏輯)return features, labelsdef __getitem__(self, idx):x = self.features[idx]  # [T, F]label = self.labels[idx]# 統一序列長度(補零)pad_length = self.max_seq_len - x.shape[0]x_padded = np.pad(x, ((0, pad_length), (0, 0)), mode='constant')padding_mask = np.ones(self.max_seq_len)  # 1表示有效,0表示填充padding_mask[-pad_length:] = 0 if pad_length > 0 else padding_mask# 轉換為tensorx_tensor = torch.from_numpy(x_padded).float()mask_tensor = torch.from_numpy(padding_mask).float()label_tensor = torch.tensor(label, dtype=torch.long)return x_tensor, label_tensor, mask_tensordef __len__(self):return len(self.labels)
2. 注冊數據集到TimeMixer的工廠類

TimeMixer/data_provider/data_factory.py中注冊你的數據集:

data_dict = {# ... 其他數據集 ...'adress_m': ADReSSMDataset_TimeMixer  # 添加此行
}
3. 編寫訓練腳本(復用TimeMixer的run.py

新建scripts/classification/adress_m.sh,配置參數(參考其他分類任務腳本):

model_name=TimeMixer
root_path=./dataset/adress_m/  # 你的數據根目錄
data_path=adress_m  # 對應data_dict中的鍵
task_name=classification
seq_len=100  # 你的MFCC序列長度(根據實際數據調整)
enc_in=40    # MFCC特征維度(如40)
num_class=2  # 二分類
batch_size=8
learning_rate=0.001
train_epochs=100python -u run.py \--task_name $task_name \--is_training 1 \--root_path $root_path \--data_path $data_path \--model_id adress_m_$seq_len \--model $model_name \--data adress_m \  # 對應data_dict中的鍵--seq_len $seq_len \--label_len 0 \--pred_len 0 \  # 分類任務無需預測長度--enc_in $enc_in \--c_out $num_class \--batch_size $batch_size \--learning_rate $learning_rate \--train_epochs $train_epochs \--patience 10
4. 擴展指標計算與結果保存

修改TimeMixer/exp/exp_classification.pytest方法,加入你的指標計算和保存邏輯:

def test(self, setting, test=0):# ...(原有代碼:加載模型、獲取測試數據)...# 復用你的evaluate_model_detailed函數from trainer.evaluate_detailed import evaluate_model_detailedmetrics = evaluate_model_detailed(predictions, trues)  # predictions和trues是你的輸出# 復用你的save_results函數from utils.save_results import save_resultssave_results(metrics, config)  # 傳入你的配置return

總結

方案2更適合你的需求:

  • 無需深入理解TimeMixer內部結構,僅需適配數據加載和擴展指標,降低調試成本。
  • 復用你已有的特征提取、指標計算、可視化代碼,兼顧效率與一致性。
  • 遵循TimeMixer的設計規范,減少因架構不兼容導致的問題,更易實現基準測試目標。

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

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

相關文章

技術演進中的開發沉思-75 Linux系列:中斷和與windows中斷的區分

作為一名從 2000 年走過來的老程序員,看著 IT 技術從桌面開發迭代到微服務時代,始終覺得好技術就像老故事 —— 得有骨架(知識點),更得有血肉(場景與感悟)。我想正是我的經歷也促成了我想寫這個…

【8位數取中間4位數】2022-10-23

緣由請輸入一個8位的十進制整數,編寫程序取出該整數的中間4位數,分別輸出取出的這4位數以及該4位數加上1024的得數。 輸入:一個整數。 輸出:兩個整數,用空格分隔-編程語言-CSDN問答 int n 0;std::cin >> n;std:…

mac電腦使用(windows轉Mac用戶)

首先,我們學習mac的鍵盤復制 command c 粘貼 command v 剪切 command xlinux命令行 退出中止 control c 退出后臺 control d中英文切換大小寫,按住左邊向上的箭頭 字母鼠標操作 滾輪:2個指頭一起按到觸摸板,上滑,…

項目中優惠券計算邏輯全解析(處理高并發)

其實這個部分的代碼已經完成一陣子了,但是想了一下決定還是整理一下這部分的代碼,因為最開始做的時候業務邏輯還是感覺挺有難度的整體流程概述優惠方案計算主要在DiscountServiceImpl類的findDiscountSolution方法中實現。整個計算過程可以分為以下五個步…

支持電腦課程、游戲、會議、網課、直播錄屏 多場景全能錄屏工具

白鯊錄屏大師:支持電腦課程、游戲、會議、網課、直播錄屏 多場景全能錄屏工具,輕松捕捉每一刻精彩 在數字化學習、娛樂與辦公場景中,高質量的錄屏需求日益增長。無論是課程內容的留存、游戲高光的記錄,還是會議要點的復盤、網課知…

LeetCode算法日記 - Day 20: 兩整數之和、只出現一次的數字II

目錄 1. 兩數之和 1.1 題目解析 1.2 解法 1.3 代碼實現 2. 只出現一次的數字II 2.1 題目解析 2.2 解法 2.3 代碼實現 1. 兩數之和 371. 兩整數之和 - 力扣(LeetCode) 給你兩個整數 a 和 b ,不使用 運算符 和 - ,計算并…

Spring AI 快速接入 DeepSeek 大模型

Spring AI 快速接入 DeepSeek 大模型 文章目錄Spring AI 快速接入 DeepSeek 大模型Spring AI 框架概述核心特性適用場景官網與資源AI 提供商與模型類型模型類型(Model Type)AI提供商(Provider)兩者的關系Spring AI 框架支持哪些 A…

jQuery 知識點復習總覽

文章目錄jQuery 知識點復習總覽一、jQuery 基礎1. jQuery 簡介2. jQuery 引入3. jQuery 核心函數二、選擇器1. 基本選擇器2. 層級選擇器3. 過濾選擇器4. 表單選擇器三、DOM 操作1. 內容操作2. 屬性操作3. CSS 操作4. 元素操作四、事件處理1. 事件綁定2. 事件對象3. 自定義事件五…

博客系統接口自動化練習

框架圖: 詳細代碼地址:gitee倉庫 博客系統接口自動化文檔請看文章頂部。

智慧礦山誤報率↓83%!陌訊多模態融合算法在礦用設備監控的落地優化

原創聲明:本文為原創技術解析文章,核心技術參數與架構設計引用自 “陌訊技術白皮書(智慧礦山專項版)”,算法部署相關資源適配參考aishop.mosisson.com平臺的陌訊視覺算法專項適配包,禁止未經授權的轉載與二…

Laravel 使用阿里云OSS S3 協議文件上傳

1. 安裝 S3 軟件包 composer require league/flysystem-aws-s3-v3 "^3.0" --with-all-dependencies2. 配置.env 以阿里云 OSS 地域華東2 上海為例: FILESYSTEM_DISKs3 //設置默認上傳到S3AWS_ACCESS_KEY_ID***…

UVM一些不常用的功能

uvm_coreservice_t是什么AI:在 UVM(Universal Verification Methodology)中,uvm_coreservice_t 是一個核心服務類,它扮演著UVM 框架內部核心服務的 “管理者” 和 “統一入口” 的角色。其主要作用是封裝并提供對 UVM …

怎么確定mongodb是不是鏈接上了?

現有mongosh鏈接了MongoDB,里面能操作,但是想python進行鏈接,因為代碼需要,現在測試下鏈接成功了沒有。如下: 要確認你的 MongoDB 連接是否成功,可以通過以下方法檢查: 1. 使用 list_database_names 方法【測試成功】 python import asyncioasync def test_connecti…

Unity 二進制讀寫小框架

文章目錄前言框架獲取與集成使用方法基本配置自動生成序列化方法實戰示例技術原理與優勢二進制序列化的優勢SJBinary的設計特點最佳實踐建議適用場景總結前言 在Unity開發過程中,與后臺交互時經常需要處理大型數據文件。當遇到一個近2MB的本地JSON文件需要解析為對…

?Kubernetes 詳解:云原生時代的容器編排與管理

一 Kubernetes 簡介及部署方法 1.1 應用部署方式演變 在部署應用程序的方式上,主要經歷了三個階段: 傳統部署:互聯網早期,會直接將應用程序部署在物理機上 優點:簡單,不需要其它技術的參與 缺點&#xf…

Kotlin 中的枚舉類 Enum Class

枚舉類在 Kotlin 中是非常強大和靈活的工具,可以用于表示一組固定的常量,并且可以包含屬性、方法、構造函數和伴生對象。它們在處理狀態、選項等場景中非常有用。 1、枚舉類的定義 枚舉類用于創建具有一組數量有限的可能值的類型。 枚舉的每個可能值都稱為“枚舉常量”。每個…

集成電路學習:什么是K-NN最近鄰算法

K-NN:最近鄰算法 K-NN,即K-最近鄰算法(K-Nearest Neighbor algorithm),是一種基本的監督學習算法,廣泛應用于分類和回歸問題中。以下是對K-NN算法的詳細解析: 一、K-NN算法的基本原理 1、K-NN算法的核心思想是: 對于一個新的數據點,算法會在訓練數據集中找到與…

2025最新版mgg格式轉MP3,mflac轉mp3,mgg格式如何轉mp3?

注:需要使用舊版客戶端,并需要禁用更新。使用說明內有鏈接打開軟件,可以選擇將待轉換的歌曲拖入;或者點擊添加將mgg或者mflac歌曲拖入點擊開始轉換等待一會就轉換完成,默認轉換后的歌曲存在桌面的【轉換成功】的文件夾…

嵌入式學習day34-網絡-tcp/udp

day33練習:客戶端 與 服務器實現一個點對點聊天tcp客戶端clifd socketconnect//收 --父進程 //發 --子進程 tcp服務器 listenfd socketbindlistenconnfd accept()//收 -- 父進程 //發 -- 子進程client.c#include "../head.h"int res_fd[1]; // 只需要存…

零知開源——基于STM32F103RBT6與ADXL362三軸加速度計的體感迷宮游戲設計與實現

?零知IDE 是一個真正屬于國人自己的開源軟件平臺,在開發效率上超越了Arduino平臺并且更加容易上手,大大降低了開發難度。零知開源在軟件方面提供了完整的學習教程和豐富示例代碼,讓不懂程序的工程師也能非常輕而易舉的搭建電路來創作產品&am…