无主之地2配置高吗|看真人裸体BBBBB|秋草莓丝瓜黄瓜榴莲色多多|真人強奷112分钟|精品一卡2卡3卡四卡新区|日本成人深夜苍井空|八十年代动画片

網易首頁 > 網易號 > 正文 申請入駐

人工智能通識課:深度學習框架 PyTorch

0
分享至

深度學習框架是連接算法理論與工程實踐的重要工具。它讓開發者不必從零實現張量運算、自動求導、參數更新、GPU 調度和模型保存等底層細節,而可以把主要精力放在數據處理、模型結構設計、訓練策略和實驗驗證上。

在眾多深度學習框架中,PyTorch 憑借直觀的 Python 編程風格、動態圖機制、強大的自動微分能力和活躍的生態,已經成為深度學習學習、研究和工程實踐中的主流框架之一。

一、深度學習框架概覽

深度學習框架(Deep Learning Framework)是用于構建、訓練和部署深度神經網絡的程序系統。它通常需要同時解決三類問題:

? 如何高效表示和計算大規模多維數據

? 如何自動計算梯度并完成反向傳播

? 如何調用 CPU、GPU 等硬件資源加速訓練和推理

從整體關系看,深度學習算法、開發環境和深度學習框架的分工并不相同。

算法回答的是“模型為什么這樣設計”和“參數為什么這樣更新”;開發環境回答的是“代碼在哪里編寫、運行和調試”;深度學習框架則回答的是“如何把數學模型變成可訓練、可計算、可擴展的程序”。


圖 1:深度學習框架在算法、開發環境與硬件之間的位置

例如,神經網絡中的線性層、激活函數、損失函數、反向傳播和優化器,在數學上屬于算法原理;而在 PyTorch 中,它們被組織成張量、模塊、損失函數、自動微分和優化器等可編程對象??蚣艿淖饔?,就是把抽象的數學過程轉化為可運行的工程流程。

目前,PyTorch 和 TensorFlow 是深度學習中最具代表性的兩個框架。TensorFlow 在工程部署和生態工具方面積累深厚,PyTorch 則以代碼直觀、調試方便、研究友好著稱。

對于希望理解深度學習計算過程的學習者來說,PyTorch 更接近普通 Python 程序的書寫方式,也更便于觀察模型從前向傳播到反向傳播的完整過程。

二、PyTorch 的安裝與環境準備


圖 2:PyTorch 安裝環境選擇流程

1、安裝前需要確認的環境

安裝 PyTorch 之前,建議先確認三項內容:

? 操作系統:Windows、macOS 還是 Linux

? Python 環境:建議使用獨立虛擬環境,避免與其他項目依賴沖突

? 計算平臺:僅使用 CPU,還是希望使用 NVIDIA GPU 進行 CUDA 加速

如果只是學習 PyTorch 基礎,CPU 版本已經足夠。如果需要訓練較大的神經網絡、圖像模型或大規模數據集,則建議使用支持 CUDA 的 NVIDIA GPU。

2、使用官網安裝選擇器

推薦進入 PyTorch 官網安裝頁面,根據本機環境依次選擇:

? PyTorch Build:通常選擇 Stable

? Your OS:選擇當前操作系統

? Package:通常選擇 pip 或 conda

? Language:選擇 Python

? Compute Platform:選擇 CPU 或對應 CUDA 版本


如上圖所示,頁面會自動生成安裝命令。實際安裝時,不建議手動拼接安裝命令,也不建議隨意復制舊教程中的 CUDA 版本命令,因為 PyTorch、Python、CUDA 和顯卡驅動之間存在版本匹配關系。

CPU 版本的常見安裝形式如下:

pip3 install torch torchvision torchaudio

其中:

? torch 是 PyTorch 的核心包

? torchvision 提供圖像任務常用的數據集、模型和圖像變換工具

? torchaudio 提供音頻任務相關工具

如果使用 或 Miniconda,可以先創建獨立環境,再在該環境中執行安裝命令:

pip3 install torch torchvision torchaudio

這樣可以把 PyTorch 與其他項目隔離開,減少依賴沖突。

3、CUDA 支持說明

CUDA(Compute Unified Device Architecture)是 NVIDIA 推出的并行計算平臺,使 GPU 能夠執行大規模通用計算任務。在深度學習中,GPU 可以并行處理大量矩陣運算,因此常用于加速神經網絡訓練。

需要注意的是,普通用戶通過 pip 安裝 PyTorch 預編譯包時,通常不需要單獨安裝完整的 CUDA Toolkit。更關鍵的是:

? 本機有支持 CUDA 的 NVIDIA 顯卡

? NVIDIA 顯卡驅動版本足夠新

? 安裝的 PyTorch CUDA 版本與驅動兼容

系統級 CUDA Toolkit 通常只在編譯 PyTorch 源碼、編寫自定義 CUDA 擴展或使用其他依賴系統 CUDA 的程序時才需要。對于一般學習和常規開發,優先使用 PyTorch 官網生成的安裝命令即可。

安裝完成后,可以用以下代碼檢查 PyTorch 與 CUDA 是否可用:

    

如果 torch.cuda.is_available() 返回 True,說明當前 PyTorch 可以調用 CUDA GPU。若返回 False,并不一定表示安裝失敗,也可能是機器沒有 NVIDIA GPU,或當前安裝的是 CPU 版本,或顯卡驅動與 PyTorch CUDA 版本不匹配。

三、PyTorch 的核心數據結構:張量

張量(Tensor)是 PyTorch 中最基礎的數據結構。它可以理解為支持高效數值計算的多維數組,與 NumPy 數組類似,但具備兩個關鍵擴展:

? 可以在 CPU 或 GPU 上執行計算

? 可以記錄計算過程,并通過自動微分計算梯度

從維度上看,張量可以表示不同層級的數據:

? 0 維張量:標量,如一個損失值

? 1 維張量:向量,如一個樣本的特征

? 2 維張量:矩陣,如一批樣本的特征矩陣

? 3 維及以上張量:高維數據,如圖像批次、視頻數據、文本嵌入等


圖 3:PyTorch Tensor 的維度層級

例如,在圖像任務中,一批彩色圖像通常可以表示為四維張量:

(batch_size, channels, height, width)

其中:

? batch_size 表示一次輸入模型的樣本數量

? channels 表示通道數,彩色圖像通常為 3

? height 和 width 表示圖像高度和寬度

1、常見張量類型

PyTorch 張量支持多種數據類型,常見類型包括以下幾類。

第一類是浮點型,主要用于神經網絡中的連續數值計算:

? torch.float32:最常用的浮點類型

? torch.float16:半精度浮點,常用于混合精度訓練

? torch.bfloat16:常用于部分深度學習加速場景

第二類是整型,常用于類別編號、索引和離散值:

? torch.int64:分類標簽中非常常見

? torch.int32、torch.int16、torch.int8:用于不同位寬的整數數據

第三類是布爾型:

? torch.bool:常用于條件判斷、掩碼和布爾索引

在深度學習中,模型參數和輸入特征通常使用浮點型,而分類標簽常常使用整型。

2、創建張量

PyTorch 提供了多種創建張量的方法:

常用函數包括:

? torch.tensor():根據已有數據創建張量

? torch.zeros():創建全 0 張量

? torch.ones():創建全 1 張量

? torch.empty():創建未初始化張量

? torch.arange():創建等差序列

? torch.linspace():創建指定范圍內的等間隔數值

? torch.randn():創建服從標準正態分布的隨機張量

PyTorch 也可以與 NumPy 互相轉換:

需要注意的是,torch.from_numpy() 創建的張量與原 NumPy 數組通常共享內存。修改其中一個,另一個也可能受到影響。

3、張量的重要屬性

一個張量不僅包含數據,還包含形狀、類型和設備等信息:

常見屬性包括:

? shape:表示張量的維度結構

? dtype:表示張量的數據類型

? device:表示張量位于 CPU 還是 GPU

? grad:保存自動微分計算得到的梯度


圖 4:張量的核心屬性

在調試模型時,shape、dtype 和 device 是最常檢查的三個屬性。很多深度學習代碼錯誤,本質上都來自張量形狀不匹配、數據類型不匹配或設備不一致。

4、張量的基本運算

張量支持常見數學運算:

矩陣運算也是神經網絡的基礎:

常用矩陣運算包括:

? torch.dot():一維向量點積

? torch.mm():二維矩陣乘法

? torch.matmul():支持更一般的矩陣乘法和批量矩陣乘法

? @:矩陣乘法運算符,等價于常見場景下的 torch.matmul()。

在神經網絡中,全連接層的核心計算可以理解為:

其中:

? x 表示輸入

? W 表示權重矩陣

? b 表示偏置

? y 表示輸出

在代碼層面,也可以理解為:

y = x @ weight.T + bias

PyTorch 的 nn.Linear 會自動完成這一過程。

5、張量形狀變換

深度學習中經常需要調整張量形狀。常用操作包括:

常用方法包括:

? reshape():改變張量形狀

? view():改變張量視圖,要求內存連續性更強

? unsqueeze():增加一個維度

? squeeze():去掉長度為 1 的維度

? transpose():交換兩個維度

? permute():按指定順序重排多個維度

對于圖像數據,形狀變換尤其重要。例如,有些圖像庫使用 (height, width, channels),而 PyTorch 卷積層通常要求輸入形狀為 (batch_size, channels, height, width)。

6、設備遷移:CPU 與 GPU

PyTorch 中,張量和模型都可以放在不同設備上。常見寫法如下:

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

然后將張量移動到該設備:

需要特別注意:參與同一次計算的張量必須位于同一設備上。如果模型在 GPU 上,而輸入數據仍在 CPU 上,就會報錯。因此,訓練時通常要同時移動模型和數據:

四、自動微分與計算圖

(Automatic Differentiation)是 PyTorch 的核心能力之一。它可以根據張量運算過程自動構建,并在調用 .backward() 時計算。


圖 5:PyTorch 自動微分與計算圖

1、requires_grad 與 backward

如果希望 PyTorch 跟蹤某個張量的計算過程,需要設置 requires_grad=True:

這里,y = x2,當 x = 2 時,導數為 2x = 4,因此輸出結果為:

tensor(4.)

這說明 PyTorch 自動計算出了 y 對 x 的梯度。

2、梯度存儲在 grad 屬性中

對于需要求導的張量,調用 .backward() 后,梯度會保存在 .grad 屬性中:

print(x.grad)

輸出結果為:

tensor([2., 4., 6.])

因為:

y = x?2 + x?2 + x?2

所以每個分量的梯度分別是:2x?、2x?、2x?。

3、梯度清零

在 PyTorch 中,梯度默認會累積。也就是說,如果連續多次調用 .backward(),新的梯度會加到原來的梯度上,而不是自動覆蓋。訓練神經網絡時,每輪參數更新前通常需要清零梯度:

optimizer.step()

這三個步驟是 PyTorch 訓練循環中最核心的代碼。

4、停止梯度跟蹤

在模型評估或推理階段,我們只需要前向計算,不需要計算梯度。此時應使用 torch.no_grad():

    

這樣可以減少內存占用并提高推理效率。

五、搭建神經網絡模型

PyTorch 中構建神經網絡主要依賴 torch.nn 模塊。該模塊提供了大量神經網絡層、激活函數、損失函數和模型容器。

1、繼承 nn.Module 定義模型


圖 6:nn.Module 中的層定義與前向傳播

自定義模型通常需要繼承 nn.Module,并實現兩個部分:

? 在 __init__() 中定義網絡層

? 在 forward() 中定義前向傳播邏輯

例如,下面定義一個簡單的多層全連接網絡:

 

這個模型的結構是:輸入 2 個特征 → 隱藏層 1 → ReLU → 隱藏層 2 → ReLU → 輸出 1 個數值。

在 PyTorch 中,只要調用:

y_pred = model(x)

就會自動執行模型的 forward() 方法。

2、常用層

常見神經網絡層包括:

? nn.Linear:全連接層,常用于表格數據、回歸任務、分類任務和多層感知器

? nn.Conv2d:二維卷積層,常用于圖像任務

? nn.MaxPool2d:最大池化層,常用于降低圖像特征圖尺寸

? nn.Embedding:嵌入層,常用于文本和離散編號數據

? nn.Dropout:隨機失活層,常用于緩解過擬合

? nn.BatchNorm1d / nn.BatchNorm2d:批歸一化層,常用于穩定訓練

其中,nn.Linear 是最基礎的層。它實現的線性變換為:

y = xW? + b

其中:

? x 表示輸入

? W 表示權重矩陣

? b 表示偏置

? y 表示輸出

3、激活函數

如果神經網絡只有線性層,那么多層線性變換疊加后本質上仍然是線性變換。的作用,是為模型引入非線性表達能力。

常見激活函數包括:

? :常用于隱藏層,計算簡單,收斂較快

? :常用于二分類概率表達

? :輸出范圍為 -1 到 1

? :常用于多分類輸出概率

PyTorch 中,激活函數既可以用函數式寫法,也可以用模塊式寫法:

x = torch.relu(x)

或:

x = self.relu(x)

函數式寫法適合簡單臨時調用;模塊式寫法更適合需要作為網絡結構一部分保存和顯示的場景。

4、損失函數

(Loss Function)用于衡量模型預測結果與真實標簽之間的差異。不同任務使用的損失函數不同:

? 回歸任務:常用 nn.MSELoss()

? 二分類任務:常用 nn.BCEWithLogitsLoss()

? 多分類任務:常用 nn.CrossEntropyLoss()

需要注意的是,nn.CrossEntropyLoss() 內部已經包含 LogSoftmax 與負對數似然損失,因此多分類模型的最后一層通常直接輸出 ,不需要先手動加 Softmax。

5、優化器

(Optimizer)負責根據梯度更新模型參數。PyTorch 的優化器位于 torch.optim 模塊中。

常見優化器包括:

? torch.optim.SGD:隨機梯度下降,原理清晰,常用于教學和基礎實驗

? torch.optim.Adam:結合動量和自適應學習率,實際應用非常廣泛

? torch.optim.AdamW:在大模型和 Transformer 訓練中非常常見

優化器通常這樣創建:

optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

其中:

? model.parameters() 表示需要更新的模型參數

? lr 表示學習率,控制每次參數更新的步長

六、數據集與數據加載

真實訓練任務通常不會一次性把全部數據直接傳入模型,而是把數據劃分成一個個小批量(mini-batch)進行訓練。PyTorch 提供了 Dataset 和 DataLoader 來組織數據讀取流程。


圖 7:Dataset 與 DataLoader 的數據加載流程

1、Dataset:定義數據如何取出

Dataset 表示一個數據集對象,通常需要實現:

? __len__():返回數據集大小

? __getitem__():根據索引返回一個樣本

簡單示例:

        

2、DataLoader:批量讀取數據

DataLoader 用于批量讀取數據,并可自動打亂順序:

訓練時可以這樣遍歷:

    

DataLoader 的作用主要包括:

? 自動按批次讀取數據

? 支持打亂訓練數據

? 支持多進程加載數據

? 讓訓練循環更加規范

對于入門學習,先理解 TensorDataset、自定義 Dataset 和 DataLoader 的基本配合即可。

七、模型訓練的標準流程


圖 8:PyTorch 模型訓練的標準閉環

PyTorch 中,一個典型訓練循環通常包括以下步驟:

1、將模型切換到訓練模式

2、讀取一個批次的數據

3、將數據移動到指定設備

4、前向傳播得到預測結果

5、計算損失

6、清零上一輪梯度

7、反向傳播計算梯度

8、優化器更新參數

對應代碼結構如下:

    

模型評估時,通常使用:

        

其中:

? model.train() 會啟用訓練模式,對 Dropout、BatchNorm 等層有影響

? model.eval() 會啟用評估模式

? torch.no_grad() 會關閉梯度跟蹤,節省顯存和計算資源

八、Python 示例:線性回歸

下面使用 PyTorch 構建一個簡單線性回歸模型,擬合如下關系:

y = 2x + 1 + noise

示例展示完整流程:準備數據、定義模型、選擇損失函數與優化器、訓練模型、可視化擬合結果。

這個示例雖然簡單,但已經包含 PyTorch 訓練模型的核心結構:

模型定義 → 前向傳播 → 損失計算 → 梯度清零 → 反向傳播 → 參數更新

以后無論訓練線性回歸、圖像分類模型,還是更復雜的深度神經網絡,基本訓練循環都與此類似。

九、Python 示例:多層神經網絡

下面構建一個簡單多層神經網絡,學習非線性關系:

y = x?2 + x?2 + noise

輸入包含兩個特征,輸出為一個連續數值,因此這是一個回歸任務。

與線性回歸示例相比,這個模型只是在網絡結構上增加了隱藏層和 ReLU 激活函數,訓練流程并沒有本質變化。這正體現了 PyTorch 的統一性:模型可以復雜,但訓練范式保持相對穩定。

十、初學者常見問題

1、為什么要調用 optimizer.zero_grad()?

因為 PyTorch 中梯度默認會累積。如果不清零,當前批次的梯度會與上一批次的梯度相加,導致參數更新錯誤。因此,每次反向傳播前通常需要調用:

optimizer.zero_grad()

2、為什么訓練時要用 model.train(),推理時要用 model.eval()?

有些層在訓練和推理階段行為不同。例如:

? Dropout 在訓練時會隨機丟棄部分神經元,在推理時不再隨機丟棄

? BatchNorm 在訓練時使用當前批次統計量,在推理時使用累計統計量

因此,訓練前應調用:

model.train()

推理或評估前應調用:

model.eval()

3、為什么有時會出現 CPU 和 GPU 不一致的錯誤?


圖 9:PyTorch 中模型與數據的設備一致性

如果模型在 GPU 上,而輸入數據在 CPU 上,就會出現設備不一致錯誤。解決方法是把模型和數據都移動到同一設備:

4、為什么多分類任務最后一層通常不加 Softmax?

如果使用 nn.CrossEntropyLoss(),模型最后一層應直接輸出 logits。因為 CrossEntropyLoss 內部已經包含了 LogSoftmax 相關計算。手動先加 Softmax 反而可能導致數值穩定性變差。

5、什么時候需要 DataLoader?

當數據量較大,或者需要按批次訓練、隨機打亂數據、多進程讀取數據時,就應該使用 DataLoader。在真實項目中,DataLoader 幾乎是標準訓練流程的一部分。

小結

PyTorch 以張量為運算基礎,以自動微分為訓練核心,以 nn.Module 組織模型結構,并通過損失函數、優化器和數據加載器構成完整訓練流程。掌握張量、計算圖、模型定義、損失計算、反向傳播和參數更新,就能理解大多數深度學習代碼的基本運行邏輯。

點贊有美意,贊賞是鼓勵

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
太戲劇化!國際職業殺手潛入愛爾蘭,暗殺途中出車禍,死了……

太戲劇化!國際職業殺手潛入愛爾蘭,暗殺途中出車禍,死了……

愛爾蘭華人圈
2026-06-12 20:03:32
巨大爭議!韓國 2 比 1 贏捷克,捷克球迷怒批:這是偷來的勝利

巨大爭議!韓國 2 比 1 贏捷克,捷克球迷怒批:這是偷來的勝利

十點體壇
2026-06-12 13:50:50
臺軍首次在西部海岸,朝中國大陸方向射擊30枚海馬斯火箭彈。

臺軍首次在西部海岸,朝中國大陸方向射擊30枚海馬斯火箭彈。

果媽聊娛樂
2026-06-12 11:56:07
中國連續取消兩場會議,歐盟外長惹怒所有人,法德討論對其削權

中國連續取消兩場會議,歐盟外長惹怒所有人,法德討論對其削權

流史歲月
2026-06-12 16:50:04
重磅!中超第1身價突然加盟,球迷:偉大的簽約,城市集團太猛了

重磅!中超第1身價突然加盟,球迷:偉大的簽約,城市集團太猛了

足球大腕
2026-06-12 23:25:25
月銷7萬到幾乎絕跡!2026年最慘車型,去年還被封神,如今無人問津

月銷7萬到幾乎絕跡!2026年最慘車型,去年還被封神,如今無人問津

周哥一影視
2026-06-12 19:36:11
重磅:烏克蘭摧毀俄羅斯最大的下卡姆斯克油氣廠!

重磅:烏克蘭摧毀俄羅斯最大的下卡姆斯克油氣廠!

項鵬飛
2026-06-12 18:54:51
27公斤被盜黃金悉數追回,南京警方破獲國內最大黃金盜竊案件

27公斤被盜黃金悉數追回,南京警方破獲國內最大黃金盜竊案件

現代快報
2026-06-12 14:11:13
釘釘CEO無招被開除,一切都結束了

釘釘CEO無招被開除,一切都結束了

科技頭版Pro
2026-06-12 14:15:22
德國75歲老人因撿瓶子補貼生活,誠實申報58歐元收入后遭扣減救濟金,引發全國爭議

德國75歲老人因撿瓶子補貼生活,誠實申報58歐元收入后遭扣減救濟金,引發全國爭議

英國那些事兒
2026-06-12 23:19:33
世界杯倒計時,姆巴佩飛馬德里見女友,太不可思議了

世界杯倒計時,姆巴佩飛馬德里見女友,太不可思議了

觀星娛記
2026-06-12 11:35:13
主犯獲刑12年半罰沒1600萬!含砷“脫酸劑”讓耙耙柑提前一月上市,果肉檢出重金屬

主犯獲刑12年半罰沒1600萬!含砷“脫酸劑”讓耙耙柑提前一月上市,果肉檢出重金屬

紅星新聞
2026-06-05 09:04:20
CCTV5直播!世界杯“重頭戲”,超21億歐元對決,姆巴佩PK哈蘭德

CCTV5直播!世界杯“重頭戲”,超21億歐元對決,姆巴佩PK哈蘭德

麥子的籃球故事
2026-06-12 17:40:17
韓國也有胡爾克!25歲吳賢揆世界杯首秀致勝 大腿肌肉如綠巨人

韓國也有胡爾克!25歲吳賢揆世界杯首秀致勝 大腿肌肉如綠巨人

智道足球
2026-06-12 16:51:52
看世界杯遭持槍搶劫中國男子發聲:頭被槍抵著,為保命全程配合,大使館迅速介入,現已在機場準備回國

看世界杯遭持槍搶劫中國男子發聲:頭被槍抵著,為保命全程配合,大使館迅速介入,現已在機場準備回國

瀟湘晨報
2026-06-12 16:20:20
韓媒:中國男足比捷克隊更強?他們在這種對抗下恐怕完全不適應

韓媒:中國男足比捷克隊更強?他們在這種對抗下恐怕完全不適應

夢憶之淺
2026-06-12 18:43:31
葡萄牙6-1血洗加拿大,雷戈梅開二度領跑射手榜,決賽對陣突尼斯

葡萄牙6-1血洗加拿大,雷戈梅開二度領跑射手榜,決賽對陣突尼斯

林子說事
2026-06-12 19:37:51
訂單太多?特斯拉中國:Model 3 全系...

訂單太多?特斯拉中國:Model 3 全系...

新浪財經
2026-06-12 22:30:54
韓國2-1逆轉出線在望,女球迷又火了,身材顏值都在線,笑容很甜

韓國2-1逆轉出線在望,女球迷又火了,身材顏值都在線,笑容很甜

球盲百小易
2026-06-12 19:28:00
今日未訓練!曝34歲內馬爾基本無緣首場小組賽 且可能3場全踢不了

今日未訓練!曝34歲內馬爾基本無緣首場小組賽 且可能3場全踢不了

風過鄉
2026-06-12 22:43:31
2026-06-13 03:40:49
MediaTea
MediaTea
專業的數字媒體、新媒體技術
1888文章數 80關注度
往期回顧 全部

科技要聞

剛剛,人類歷史上首位萬億美元富豪誕生!

頭條要聞

美加墨世界杯第二場比賽就現空座 英媒:尷尬

頭條要聞

美加墨世界杯第二場比賽就現空座 英媒:尷尬

體育要聞

歐洲恐韓?肉德維德?

娛樂要聞

一天4個瓜,肖戰熱巴最意外

財經要聞

萬億美元順差背后,透露這些信號

汽車要聞

標配激光雷達/雙動力可選 昊鉑S600限時售17.99萬起

態度原創

旅游
本地
健康
公開課
軍事航空

旅游要聞

印度有錢人真多酷暑辦理旅游簽證!不是有錢任性,是熱到活不下去

本地新聞

AK劉彰邂逅河北南大港濕地

老人、小孩、孕婦,吃粽子有啥風險

公開課

李玫瑾:為什么性格比能力更重要?

軍事要聞

伊朗媒體:已故最高領袖葬禮推遲舉行

無障礙瀏覽 進入關懷版