深度學(xué)習(xí)案例教程 課件全套 錢(qián)月鐘 第1-9章 深度學(xué)習(xí)簡(jiǎn)介-語(yǔ)音識(shí)別_第1頁(yè)
深度學(xué)習(xí)案例教程 課件全套 錢(qián)月鐘 第1-9章 深度學(xué)習(xí)簡(jiǎn)介-語(yǔ)音識(shí)別_第2頁(yè)
深度學(xué)習(xí)案例教程 課件全套 錢(qián)月鐘 第1-9章 深度學(xué)習(xí)簡(jiǎn)介-語(yǔ)音識(shí)別_第3頁(yè)
深度學(xué)習(xí)案例教程 課件全套 錢(qián)月鐘 第1-9章 深度學(xué)習(xí)簡(jiǎn)介-語(yǔ)音識(shí)別_第4頁(yè)
深度學(xué)習(xí)案例教程 課件全套 錢(qián)月鐘 第1-9章 深度學(xué)習(xí)簡(jiǎn)介-語(yǔ)音識(shí)別_第5頁(yè)
已閱讀5頁(yè),還剩651頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

深度學(xué)習(xí)簡(jiǎn)介第一章01理解深度學(xué)習(xí)的概念和發(fā)展歷程02了解深度學(xué)習(xí)在各種應(yīng)用場(chǎng)景中的應(yīng)用03掌握深度學(xué)習(xí)的特點(diǎn)和優(yōu)勢(shì)04熟悉深度學(xué)習(xí)框架、選擇合適的框架進(jìn)行開(kāi)發(fā)學(xué)習(xí)目標(biāo)CONTENTS05理解機(jī)器學(xué)習(xí)的相關(guān)概念01分析思維02創(chuàng)新能力03團(tuán)隊(duì)合作04問(wèn)題解決能力素質(zhì)目標(biāo)CONTENTS05學(xué)習(xí)意愿和持續(xù)學(xué)習(xí)人工智能三者關(guān)系能夠感知、推理、行動(dòng)和適應(yīng)的程序機(jī)器學(xué)習(xí)能夠隨著數(shù)據(jù)量的增加不斷改進(jìn)性能的算法深度學(xué)習(xí)利用多層神經(jīng)網(wǎng)絡(luò)從大量數(shù)據(jù)中進(jìn)行學(xué)習(xí)第一節(jié)

人工智能與機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的關(guān)系

20世紀(jì)50年代當(dāng)時(shí),計(jì)算機(jī)科學(xué)家們開(kāi)始研究如何創(chuàng)建能夠像人類(lèi)一樣思考和決策的計(jì)算機(jī)系統(tǒng)。最初的人工智能系統(tǒng)是基于規(guī)則的。80年代初期基于專(zhuān)家系統(tǒng)的人工智能技術(shù)曾經(jīng)一度風(fēng)靡一時(shí)。近年來(lái)深度學(xué)習(xí)技術(shù)的出現(xiàn)使得人工智能的發(fā)展又迎來(lái)了一個(gè)重要的時(shí)期。90年代初期人工神經(jīng)網(wǎng)絡(luò)和機(jī)器學(xué)習(xí)技術(shù)開(kāi)始受到關(guān)注。發(fā)展歷程機(jī)器學(xué)習(xí)在形式上,近似于在數(shù)據(jù)對(duì)象中通過(guò)統(tǒng)計(jì)或推理的方法尋找一個(gè)適用特定輸入和預(yù)期輸出功能的函數(shù)機(jī)器學(xué)習(xí)的定義機(jī)器學(xué)習(xí)收集數(shù)據(jù)準(zhǔn)備數(shù)據(jù)選擇模型訓(xùn)練模型模型評(píng)估參數(shù)設(shè)置結(jié)果預(yù)測(cè)機(jī)器學(xué)習(xí)是通過(guò)"學(xué)習(xí)"來(lái)改善自己,并因此在執(zhí)行任務(wù)時(shí)變得越來(lái)越熟練。機(jī)器學(xué)習(xí)的過(guò)程將被分解為以下7個(gè)步驟機(jī)器學(xué)習(xí)是英文名稱(chēng)MachineLearning(簡(jiǎn)稱(chēng)ML)的直譯。機(jī)器學(xué)習(xí)涉及概率論、統(tǒng)計(jì)

學(xué)、逼近論、凸分析、算法復(fù)雜度理論等多門(mén)學(xué)科。監(jiān)督學(xué)習(xí)監(jiān)督學(xué)習(xí)是利用已知類(lèi)別的樣本,調(diào)整分類(lèi)器的參數(shù),訓(xùn)練得到一個(gè)最優(yōu)模型,再利用這個(gè)訓(xùn)練后的模型,將所有的輸入映射為相應(yīng)的輸出,對(duì)輸出進(jìn)行簡(jiǎn)單的判斷,從而實(shí)現(xiàn)分類(lèi)的目的。無(wú)監(jiān)督學(xué)習(xí)無(wú)監(jiān)督學(xué)習(xí)中模型所學(xué)習(xí)的數(shù)據(jù)都是無(wú)標(biāo)簽的,根據(jù)類(lèi)別未知的訓(xùn)練樣本解決模式識(shí)別中的各種問(wèn)題。半監(jiān)督學(xué)習(xí)半監(jiān)督學(xué)習(xí)是介于監(jiān)督學(xué)習(xí)與無(wú)監(jiān)督學(xué)習(xí)之間一種機(jī)器學(xué)習(xí)方式,主要考慮如何利用少量的樣本和大量的未標(biāo)注樣本進(jìn)行訓(xùn)練和分類(lèi)的問(wèn)題。機(jī)器學(xué)習(xí)的分類(lèi)強(qiáng)化學(xué)習(xí)強(qiáng)化學(xué)習(xí)就是智能系統(tǒng)從環(huán)境到行為映射的學(xué)習(xí),強(qiáng)化學(xué)習(xí)中由環(huán)境提供的強(qiáng)化信號(hào)是對(duì)產(chǎn)生動(dòng)作的好壞作一種評(píng)價(jià)(通常為標(biāo)量信號(hào))。深度學(xué)習(xí)的定義第二節(jié)

深度學(xué)習(xí)深度學(xué)習(xí)是高度數(shù)據(jù)依賴(lài)型的算法,它的性能通常隨著數(shù)據(jù)量的增加而不斷增強(qiáng),即它的可擴(kuò)展性(Scalability)顯著優(yōu)于傳統(tǒng)的機(jī)器學(xué)習(xí)算法。但如果訓(xùn)練數(shù)據(jù)比較少,深度學(xué)習(xí)的性能并不見(jiàn)得就比傳統(tǒng)機(jī)器學(xué)習(xí)好。生成型深度結(jié)構(gòu)生成型深度結(jié)構(gòu)旨在模式分析過(guò)程中描述觀測(cè)數(shù)據(jù)的高階相關(guān)特征,或者描述觀測(cè)數(shù)據(jù)與其相關(guān)類(lèi)別的聯(lián)合概率分布,這方便了先驗(yàn)概率和后驗(yàn)概率的估計(jì),通常使用無(wú)監(jiān)督學(xué)習(xí)處理該結(jié)構(gòu)的學(xué)習(xí)。判別型深度結(jié)構(gòu)判別型深度結(jié)構(gòu)旨在提供對(duì)模式分類(lèi)的區(qū)分性能力,通常描述數(shù)據(jù)的后驗(yàn)分布。卷積神經(jīng)網(wǎng)絡(luò)是第一個(gè)真正成功訓(xùn)練多層網(wǎng)絡(luò)結(jié)構(gòu)的學(xué)習(xí)算法,它屬于判別型訓(xùn)練算法?;旌闲蜕疃冉Y(jié)構(gòu)混合型深度結(jié)構(gòu)的目的是對(duì)數(shù)據(jù)類(lèi)型進(jìn)行判別、分類(lèi),該學(xué)習(xí)過(guò)程包含兩個(gè)部分:生成部分和區(qū)分部分。深度學(xué)習(xí)的分類(lèi)深度前饋網(wǎng)絡(luò)深度前饋網(wǎng)絡(luò)(DeepFeedforwardNetwork),也被稱(chēng)為前饋神經(jīng)網(wǎng)絡(luò)或多層感知器(MultilayerPerceptron,MLP),是深度學(xué)習(xí)領(lǐng)域中最基本和最經(jīng)典的模型之一。深度學(xué)習(xí)的分類(lèi)卷積神經(jīng)網(wǎng)絡(luò)在深度學(xué)習(xí)中,卷積神經(jīng)網(wǎng)絡(luò)(CNN或ConvNet)是一類(lèi)深度神經(jīng)網(wǎng)絡(luò),最常用于分析視覺(jué)圖像。CNN使用多層感知器的變體設(shè)計(jì),需要最少的預(yù)處理。它們也被稱(chēng)為移位不變或空間不變?nèi)斯ど窠?jīng)網(wǎng)絡(luò)(SIANN),基于它們的共享權(quán)重架構(gòu)和平移不變性特征。深度學(xué)習(xí)的分類(lèi)遞歸神經(jīng)網(wǎng)絡(luò)遞歸神經(jīng)網(wǎng)絡(luò)(RNN)是一個(gè)特殊的神經(jīng)網(wǎng)絡(luò)系列,旨在處理序列數(shù)據(jù),例如一系列的文本或者股票市場(chǎng)的波動(dòng)。現(xiàn)實(shí)問(wèn)題中存在著很多序列型的數(shù)據(jù),例如文本、語(yǔ)音以及視頻等。深度學(xué)習(xí)的分類(lèi)20世紀(jì)50年代到70年代初人工智能發(fā)展尚處于推理期,這一時(shí)期的機(jī)器學(xué)習(xí)只能稱(chēng)為感知,即認(rèn)為只要給機(jī)器賦予邏輯推理能力,機(jī)器就具有了智能,開(kāi)始進(jìn)入推理期。20世紀(jì)70年代中期人工智能進(jìn)入了知識(shí)期。20世紀(jì)90年代2006年Hinton教授和他的學(xué)生Salakhutdinov在《科學(xué)》上發(fā)表了一篇有關(guān)人工神經(jīng)網(wǎng)絡(luò)的論文,提出了無(wú)監(jiān)督貪心逐層訓(xùn)練(LayerwisePre-Training)算法,進(jìn)入了快速發(fā)展期。加拿大多倫多大學(xué)的GeoffreyHinton教授發(fā)明了適用于多層感知機(jī)的人工神經(jīng)網(wǎng)絡(luò)算法——反向傳播算法(BackPropagation,BP),進(jìn)入了學(xué)習(xí)期。第三節(jié)

深度學(xué)習(xí)的發(fā)展CNN網(wǎng)絡(luò)架構(gòu)的AlexNet在ImageNet圖像識(shí)別備受關(guān)注,進(jìn)入到爆發(fā)期。2012年推理期知識(shí)期學(xué)習(xí)期快速發(fā)展期爆發(fā)期圍繞著人工智能如何理解關(guān)于世界的知識(shí),科學(xué)家用不同的方法進(jìn)行了不同的探索和嘗試。在國(guó)際上,學(xué)者們對(duì)機(jī)器學(xué)習(xí)的發(fā)展階段并沒(méi)有非常明確的劃分規(guī)則,將機(jī)器學(xué)習(xí)的發(fā)展劃分為推理期、知識(shí)期、學(xué)習(xí)期、快速發(fā)展期和爆發(fā)期。階段模型特點(diǎn)深度學(xué)習(xí)的發(fā)展應(yīng)用領(lǐng)域第四節(jié)

深度學(xué)習(xí)的領(lǐng)域深度學(xué)習(xí)作為一種重要的人工智能技術(shù),在各個(gè)領(lǐng)域都有廣泛的應(yīng)用。它在計(jì)算機(jī)視覺(jué)領(lǐng)域可以進(jìn)行圖像識(shí)別、目標(biāo)檢測(cè)、人臉識(shí)別等任務(wù),為自動(dòng)駕駛、安防監(jiān)控、醫(yī)學(xué)影像分析等提供強(qiáng)大支持;在自然語(yǔ)言處理領(lǐng)域能夠?qū)崿F(xiàn)機(jī)器翻譯、文本生成、情感分析等任務(wù),應(yīng)用于智能助理、社交媒體分析、智能客服等場(chǎng)景。語(yǔ)音識(shí)別行車(chē)導(dǎo)航軟件通過(guò)語(yǔ)音合成技術(shù)為司機(jī)指引道路、播報(bào)路況,人們甚至可以選擇用自己喜歡的明星的聲音來(lái)播報(bào)軟件內(nèi)容。智能家居系統(tǒng)利用語(yǔ)音合成技術(shù)能夠?qū)崿F(xiàn)與用戶的實(shí)時(shí)交流,人們可以從智能家居的“嘴”中得知家中的一些基本情況,大大提高了生活質(zhì)量。在智能教學(xué)領(lǐng)域,學(xué)生能夠利用語(yǔ)音合成技術(shù)跟讀單詞、句子,語(yǔ)音輔導(dǎo)軟件的出現(xiàn)大大方便了教學(xué)過(guò)程,提高了教學(xué)質(zhì)量。語(yǔ)音識(shí)別(SpeechRecognition)是一門(mén)交叉學(xué)科,

近十幾年進(jìn)步顯著。除了需要數(shù)字信號(hào)

處理,

模式識(shí)別,概率論等理論知識(shí),深度學(xué)習(xí)的發(fā)展也使其有了很大幅度的效果提升。語(yǔ)音識(shí)別信號(hào)處理與特征提取音頻信號(hào)中通常包含著非常豐富的特征參數(shù),不同的特征向量表征著不同的聲學(xué)意義,從音頻信號(hào)中選擇有效的音頻表征的過(guò)程就是語(yǔ)音特征提取。二一四三目標(biāo)檢測(cè)語(yǔ)義分割行人重識(shí)別超分辨率重建第五節(jié)

深度學(xué)習(xí)的應(yīng)用場(chǎng)景-計(jì)算機(jī)的視覺(jué)目標(biāo)檢測(cè)目標(biāo)檢測(cè)(ObjectDetection)的任務(wù)是找出圖像中所有感興趣的目標(biāo)(物體),確定它們的類(lèi)別和位置,是計(jì)算機(jī)視覺(jué)領(lǐng)域的核心問(wèn)題之一。由于各類(lèi)物體有不同的外觀、形狀和姿態(tài),加上成像時(shí)光照、遮擋等因素的干擾,目標(biāo)檢測(cè)一直是計(jì)算機(jī)視覺(jué)領(lǐng)域最具有挑戰(zhàn)性的問(wèn)題。第五節(jié)

深度學(xué)習(xí)的應(yīng)用場(chǎng)景-計(jì)算機(jī)的視覺(jué)語(yǔ)義分割語(yǔ)義分割(SemanticSegmentation)旨在將圖像中的物體作為可解釋的語(yǔ)義類(lèi)別,該類(lèi)別將是DNN學(xué)習(xí)的特征聚類(lèi)得到。第五節(jié)

深度學(xué)習(xí)的應(yīng)用場(chǎng)景-計(jì)算機(jī)的視覺(jué)超分辨率重建超分辨率重建(SuperResolutionConstruction)的主要任務(wù)是通過(guò)軟件和硬件的方法,從觀測(cè)到的低分辨率圖像重建出高分辨率圖像。第五節(jié)

深度學(xué)習(xí)的應(yīng)用場(chǎng)景-計(jì)算機(jī)的視覺(jué)行人重識(shí)別行人重識(shí)別(PersonRe-identification)也稱(chēng)行人再識(shí)別,是利用計(jì)算機(jī)視覺(jué)技術(shù)判斷圖像或者視頻序列中是否存在特定行人的技術(shù)。第五節(jié)

深度學(xué)習(xí)的應(yīng)用場(chǎng)景-計(jì)算機(jī)的視覺(jué)自然語(yǔ)言第六節(jié)

深度學(xué)習(xí)的應(yīng)用場(chǎng)景-自然語(yǔ)言處理自然語(yǔ)言處理(NLP)是計(jì)算機(jī)科學(xué)和人工智能領(lǐng)域的方向之一,它是以一種智能高效的方式對(duì)人類(lèi)創(chuàng)造的文本數(shù)據(jù)進(jìn)行系統(tǒng)地分析、理解和提取信息的過(guò)程,研究能實(shí)現(xiàn)人與計(jì)算機(jī)之間用自然語(yǔ)言進(jìn)行有效通信的各種理論和方法。詞法分析詞法分析就是以詞為單位對(duì)數(shù)據(jù)進(jìn)行分析,這是NLP中最基本的工作。常見(jiàn)的詞性標(biāo)注和拼寫(xiě)校正任務(wù)就屬于詞法分析。句子分析句子分析就是以句子為單位的分析任務(wù)。語(yǔ)義分析語(yǔ)義分析就是通過(guò)對(duì)文本數(shù)據(jù)的分析,生成對(duì)應(yīng)文本數(shù)據(jù)的語(yǔ)義信息的形式化表示,常見(jiàn)任務(wù)有詞義消歧等。自然語(yǔ)言的分類(lèi)信息抽取信息抽取是NLP任務(wù)中應(yīng)用最廣泛的一個(gè),簡(jiǎn)單理解就是從非結(jié)構(gòu)化的文本數(shù)據(jù)中抽取出用戶所需的結(jié)構(gòu)化信息。頂層任務(wù)頂層任務(wù)就是直接面向用戶的任務(wù),比如機(jī)器翻譯或文本摘要,它需要多種任務(wù)結(jié)合生成對(duì)應(yīng)的可以直接讀取的輸出結(jié)果。第七節(jié)

深度學(xué)習(xí)的特點(diǎn)自適應(yīng)性非線性建模分層抽象表示多樣化的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)可擴(kuò)展性數(shù)據(jù)量大調(diào)試和驗(yàn)證計(jì)算資源要求高第八節(jié)

深度學(xué)習(xí)框架

概述深度學(xué)習(xí)框架是指一類(lèi)軟件工具,用于構(gòu)建、訓(xùn)練和部署深度學(xué)習(xí)模型。第八節(jié)

深度學(xué)習(xí)框架

概述2017年1月,F(xiàn)acebook人工智能研究院(FacebookArtificialIntelligenceResearch,FAIR)團(tuán)隊(duì)在GitHub(代碼托管平臺(tái))上開(kāi)源了PyTorch機(jī)器學(xué)習(xí)庫(kù),并迅速占領(lǐng)GitHub熱度榜榜首。PyTorch的歷史可追溯到2002年,其誕生于紐約大學(xué)的Torch。Torch使用了一種不是很“大眾”的語(yǔ)言Lua作為接口。Lua簡(jiǎn)潔高效,但由于其過(guò)于“小眾”,以至于很多人聽(tīng)說(shuō)要掌握Torch必須新學(xué)一門(mén)語(yǔ)言就望而卻步。2017年10月18日,PyTorch的熱度已然超越了其他2個(gè)框架(Caffe、Theano),并且其熱度還在持續(xù)上升中。PyTorch最大的優(yōu)勢(shì)是建立的神經(jīng)網(wǎng)絡(luò)是動(dòng)態(tài)的,可以非常容易地輸出每一步的調(diào)試結(jié)果.相比于其他框架來(lái)說(shuō),調(diào)試起來(lái)十分方便。PyTorch框架

特點(diǎn)與優(yōu)勢(shì)1.PyTorch可以看作加入了GPU支持的NumPy(Python的一個(gè)擴(kuò)展程序庫(kù))。TensorFlow與Caffe都是命令式的編程語(yǔ)言,而且是靜態(tài)的。2.PyTorch的設(shè)計(jì)思路是線性、直觀且易于使用的。3.相對(duì)于TensorFlow而言,PyTorch的代碼更加簡(jiǎn)潔、直觀。4.PyTorch的設(shè)計(jì)追求最少的封裝,盡量避免“重復(fù)造輪子”。5.PyTorch的源碼只有TensorFlow的十分之一左右,更少的抽象、更直觀的設(shè)計(jì)使得PyTorch的源碼十分易于閱讀和理解。謝謝您的聆聽(tīng)結(jié)束PyTorch深度學(xué)習(xí)框架第二章01理解PyTorch框架的基本原理和核心概念02搭建PyTorch開(kāi)發(fā)環(huán)境并配置所需的軟件和庫(kù)03使用PyTorch框架創(chuàng)建和操作張量,進(jìn)行數(shù)

學(xué)運(yùn)算和數(shù)理統(tǒng)計(jì)04利用PyTorch框架構(gòu)建和訓(xùn)練簡(jiǎn)單的線性回歸模型學(xué)習(xí)目標(biāo)CONTENTS01學(xué)習(xí)和掌握深度學(xué)習(xí)框架的能力02培養(yǎng)良好的編程習(xí)慣和實(shí)踐能力03提高問(wèn)題分析和解決問(wèn)題的能力04培養(yǎng)團(tuán)隊(duì)合作和溝通能力素質(zhì)目標(biāo)CONTENTS05培養(yǎng)持續(xù)學(xué)習(xí)的意識(shí)和能力設(shè)計(jì)模型訓(xùn)練模型實(shí)踐任務(wù)準(zhǔn)備數(shù)據(jù)預(yù)測(cè)數(shù)據(jù)認(rèn)識(shí)線性回歸2.1PyTorch介紹2.1.1PyTorch概述2.1.2使用計(jì)算圖2.1PyTorch介紹1.PyTorch概述PyTorch是一個(gè)基于Torch的Python開(kāi)源機(jī)器學(xué)習(xí)庫(kù),用于自然語(yǔ)言處理等應(yīng)用程序。它主要由Facebook的人工智能研究小組開(kāi)發(fā)。PyTorch的動(dòng)態(tài)圖使得開(kāi)發(fā)者可以更加直觀地定義和調(diào)試復(fù)雜的神經(jīng)網(wǎng)絡(luò)模型,這也是PyTorch在深度學(xué)習(xí)領(lǐng)域日益流行的原因之一。2.1PyTorch介紹2.使用計(jì)算圖計(jì)算圖是一個(gè)由節(jié)點(diǎn)和邊組成的有向無(wú)環(huán)圖(DAG)。節(jié)點(diǎn)表示計(jì)算操作,邊表示數(shù)據(jù)依賴(lài)關(guān)系。計(jì)算圖可以把模型中的計(jì)算過(guò)程可視化出來(lái),讓我們更容易理解模型的計(jì)算邏輯。計(jì)算圖也可以被用來(lái)自動(dòng)計(jì)算梯度,這在訓(xùn)練深度學(xué)習(xí)模型時(shí)非常有用。2.2環(huán)境搭建2.2.1anaconda安裝2.2.2pytorch安裝2.2.3pycharm安裝2.2.1Anaconda安裝Anaconda是專(zhuān)注于數(shù)據(jù)分析的Python發(fā)行版本。包含了Conda、Python等一大批科學(xué)包及其依賴(lài)項(xiàng)。在安裝Anaconda時(shí)預(yù)先集成了Numpy、pandas、scikit-learn等數(shù)據(jù)分析常用包,在Anaconda中可以建立多個(gè)虛擬環(huán)境,用于隔離不同項(xiàng)目所需的不同版本的工具包,以防止版本上的沖突??傊?,anaconda是一個(gè)分析利器。(1)訪問(wèn)Anaconda官網(wǎng)(),選擇適合自己的版本下載,如選擇下載Windows系統(tǒng)下的Python3.10版本,如圖所示。2.2.1Anaconda安裝(2)下載完成后,根據(jù)提示安裝Anaconda,如圖所示。2.2.1Anaconda安裝(2)下載完成后,根據(jù)提示安裝Anaconda,如圖所示。2.2.1Anaconda安裝(2)下載完成后,根據(jù)提示安裝Anaconda,如圖所示。2.2.1Anaconda安裝(2)下載完成后,根據(jù)提示安裝Anaconda,如圖所示。2.2.1Anaconda安裝(2)下載完成后,根據(jù)提示安裝Anaconda,如圖所示。2.2.1Anaconda安裝(3)安裝成功后設(shè)置系統(tǒng)環(huán)境變量的PATH值:右擊【計(jì)算機(jī)】,選擇【屬性】,進(jìn)入【高級(jí)系統(tǒng)設(shè)置】,選擇【環(huán)境變量】,雙擊【PATH】,設(shè)置Anaconda的環(huán)境變量,如圖所示2.2.1Anaconda安裝(3)安裝成功后設(shè)置系統(tǒng)環(huán)境變量的PATH值:右擊【計(jì)算機(jī)】,選擇【屬性】,進(jìn)入【高級(jí)系統(tǒng)設(shè)置】,選擇【環(huán)境變量】,雙擊【PATH】,設(shè)置Anaconda的環(huán)境變量,如圖所示2.2.1Anaconda安裝(4)完成安裝和設(shè)置后,打開(kāi)命令提示符,輸入“conda--versoin”,可以看到其版本信息和Anaconda的字樣,說(shuō)明Anaconda安裝成功,如圖所示。2.2.1Anaconda安裝Anaconda安裝成功之后,我們?cè)谙到y(tǒng)菜單中找到【anacondanavigator】進(jìn)入該界面首先是登陸界面,如圖所示。2.2.1Anaconda安裝選擇【Environments】后發(fā)現(xiàn)系統(tǒng)默認(rèn)創(chuàng)建了base環(huán)境,如圖所示。2.2.1Anaconda安裝點(diǎn)擊【Create】按鈕創(chuàng)建名為pytorch的虛擬環(huán)境,如圖所示。2.2.1Anaconda安裝如圖所示,pytorch虛擬環(huán)境創(chuàng)建完成。2.2.1Anaconda安裝2.2.2PyTorch安裝PyTorch安裝起來(lái)比較方便,根據(jù)系統(tǒng)環(huán)境選擇安裝方式,本書(shū)選用Conda方式安裝PyTorch,使用安裝好的Anaconda,能夠在同一臺(tái)機(jī)器上創(chuàng)建多個(gè)互不影響的Python環(huán)境。首先我們?nèi)yTorch的網(wǎng)站選擇合適的安裝環(huán)境,如圖所示。PyTorch官網(wǎng):2.2.2PyTorch安裝如果電腦有GPU可以查看版本后選擇CUDA,沒(méi)有就選擇CPU。復(fù)制以下命令。condainstallpytorchtorchvisiontorchaudiopytorch-cuda=11.7-cpytorch-cnvidia打開(kāi)命令行窗口,使用condaactivate環(huán)境名稱(chēng),的命令來(lái)激活環(huán)境,如圖所示我們進(jìn)入python命令環(huán)境,導(dǎo)入pytorch,輸出其版本信息進(jìn)行驗(yàn)證,如圖所示2.2.2PyTorch安裝也可以使用pip命令進(jìn)行安裝,安裝的Anaconda中包含了python環(huán)境,選擇pip安裝方式復(fù)制后面的命令,然后將下載地址改為清華大學(xué)TUNA提供的鏡像地址,下載速度會(huì)比較快。2.2.3Pycharm安裝在Python開(kāi)發(fā)領(lǐng)域中,最常用的兩種集成開(kāi)發(fā)環(huán)境是JupyterNotebook和PyCharm。2.2.3Pycharm安裝JupyterNotebookJupyterNotebook是一個(gè)交互式筆記本,支持40多種編程語(yǔ)言。其本質(zhì)是一個(gè)Web應(yīng)用程序,便于創(chuàng)建和共享文字化程序文檔,支持實(shí)時(shí)代碼、數(shù)學(xué)方程、可視化和Markdown,包含自動(dòng)補(bǔ)全、自動(dòng)縮進(jìn),支持bashshell命令等。其主要用途包括數(shù)理和轉(zhuǎn)換、數(shù)值模擬、統(tǒng)計(jì)建模、機(jī)器學(xué)習(xí)等。2.2.3Pycharm安裝PyCharmPyCharm是JetBrains公司開(kāi)發(fā)的Python集成開(kāi)發(fā)環(huán)境。PyCharm的功能十分強(qiáng)大,包括調(diào)試、項(xiàng)目管理、代碼跳轉(zhuǎn)、智能提示、自動(dòng)補(bǔ)充、單元測(cè)試、版本控制等。對(duì)編程有非常大的幫助作用,十分適合開(kāi)發(fā)較大型的項(xiàng)目,也非常適合初學(xué)者。(1)訪問(wèn)PyCharm官網(wǎng)(/pycharm/),進(jìn)入下載頁(yè)面,有兩個(gè)版本的PyCharm供下載,分別是專(zhuān)業(yè)版(Professional)和社區(qū)版(Community),由于專(zhuān)業(yè)版收費(fèi),而社區(qū)版足以滿足初學(xué)者幾乎所有的需求,可以下載社區(qū)版,如圖所示。2.2.3Pycharm安裝(2)載完成后,根據(jù)提示安裝pycharm,如圖所示。2.2.3Pycharm安裝(2)載完成后,根據(jù)提示安裝pycharm,如圖所示。2.2.3Pycharm安裝(2)載完成后,根據(jù)提示安裝pycharm,如圖所示。2.2.3Pycharm安裝(3)創(chuàng)建Python項(xiàng)目,選擇項(xiàng)目路徑和配置Python解釋器,并且將其和Anaconda關(guān)聯(lián),如圖所示。2.2.3Pycharm安裝(3)創(chuàng)建Python項(xiàng)目,選擇項(xiàng)目路徑和配置Python解釋器,并且將其和Anaconda關(guān)聯(lián),如圖所示。2.2.3Pycharm安裝(4)點(diǎn)擊【AddInterpreter】添加Anaconda中的已經(jīng)存在的運(yùn)行環(huán)境,如圖所示。可以在使用已經(jīng)存在的環(huán)境中切換Anaconda中的base環(huán)境和pytorch環(huán)境2.2.3Pycharm安裝(5)創(chuàng)建項(xiàng)目后,會(huì)自動(dòng)進(jìn)入項(xiàng)目界面,如圖所示。2.2.3Pycharm安裝(6)在項(xiàng)目中添加Python文件,如圖所示。2.2.3Pycharm安裝(7)在main.py文件中,輸入python程序,運(yùn)行后,如圖所示。可以從圖中看到程序能夠使用pytorch庫(kù)2.2.3Pycharm安裝2.3PyTorch基本使用2.3.1張量2.3.2數(shù)學(xué)運(yùn)算2.3.3數(shù)理統(tǒng)計(jì)2.3.1張量PyTorch的運(yùn)算單元叫作張量(tensor)。我們可以將張量理解為一個(gè)多維數(shù)組,一階張量即為一維數(shù)組,通常叫作向量(vector);二階張量即為二維數(shù)組,通常叫作矩陣(matrix);三階張量即為三維數(shù)組;n階張量即為n維數(shù)組,如圖所示。張量的定義圖2.1832位浮點(diǎn)型torch.FloatTensor。64位整型

torch.LongTensor。32位整型torch.IntTensor。Tensor的基本數(shù)據(jù)類(lèi)型16位整型torch.ShortTensor。64位浮點(diǎn)型torch.DoubleTensor。1.初始化張量(1)通過(guò)基礎(chǔ)構(gòu)造函數(shù)創(chuàng)建張量(2)通過(guò)數(shù)據(jù)創(chuàng)建張量(3)根據(jù)另一個(gè)張量創(chuàng)建(4)使用隨機(jī)或恒定值創(chuàng)建1.初始化張量(1)通過(guò)基礎(chǔ)構(gòu)造函數(shù)創(chuàng)建張量例如:構(gòu)造一個(gè)3×4的張量,代碼如下:importtorchtensor=torch.Tensor(3,4)print(tensor)運(yùn)行結(jié)果如下:tensor([[0.0000e+00,0.0000e+00,0.0000e+00,0.0000e+00],[-1.7160e+18,0.0000e+00,0.0000e+00,0.0000e+00],[0.0000e+00,0.0000e+00,0.0000e+00,0.0000e+00]])1.初始化張量(2)通過(guò)數(shù)據(jù)創(chuàng)建張量張量可以直接從數(shù)據(jù)中創(chuàng)建,其數(shù)據(jù)類(lèi)型是自動(dòng)推斷的,代碼如下:importtorchdata=[[3,4],[5,6]]t_data=torch.tensor(data)print(f"TensorfromData:\n{t_data}\n")程序運(yùn)行結(jié)果如下:TensorfromData:tensor([[3,4],[5,6]])1.初始化張量(3)根據(jù)另一個(gè)張量創(chuàng)建新張量保留參數(shù)張量的屬性(形狀、數(shù)據(jù)類(lèi)型),除非顯式覆蓋。data=[[3,4],[5,6]]t_data=torch.tensor(data)t_ones=torch.ones_like(t_data)#保留原有張量的形狀和數(shù)據(jù)類(lèi)型print(f"t_onesTensor:\n{t_ones}\n")t_rand=torch.rand_like(t_data,dtype=torch.float)#顯式更改張量的數(shù)據(jù)類(lèi)型print(f"t_randTensor:\n{t_rand}\n")程序運(yùn)行結(jié)果如下:t_onesTensor:tensor([[1,1],[1,1]])t_randTensor:tensor([[0.2152,0.6244],[0.1523,0.7312]])1.初始化張量(4)使用隨機(jī)或恒定值創(chuàng)建使用隨機(jī)或恒定值創(chuàng)建張量,其中參數(shù)shape是張量維度的元組,它決定了輸出張量的形狀。代碼如下:shape=(2,3,)#創(chuàng)建2行3列的張量rand_tensor=torch.rand(shape)ones_tensor=torch.ones(shape)zeros_tensor=torch.zeros(shape)#輸出各個(gè)張量的值print(f"rand_tensor:\n{rand_tensor}\n")print(f"ones_tensor:\n{ones_tensor}\n")print(f"zeros_tensor:\n{zeros_tensor}")程序運(yùn)行代碼如下:rand_tensor:tensor([[0.1750,0.1384,0.7738],[0.8761,0.5739,0.1595]])ones_tensor:tensor([[1.,1.,1.],[1.,1.,1.]])zeros_tensor:tensor([[0.,0.,0.],[0.,0.,0.]])2.張量相關(guān)的屬性張量屬性包括形狀、數(shù)據(jù)類(lèi)型和存儲(chǔ)設(shè)備等,下面我們通過(guò)程序輸出相關(guān)的屬性,代碼如下:importtorchtensor=torch.rand(2,4)print(f"Shapeoftensor:{tensor.shape}")print(f"Datatypeoftensor:{tensor.dtype}")print(f"Devicetensorisstoredon:{tensor.device}")程序運(yùn)行代碼如下:Shapeoftensor:torch.Size([2,4])Datatypeoftensor:torch.float32Devicetensorisstoredon:cpu3.張量的操作(1)將張量移動(dòng)到GPU上(2)索引和切片操作(3)連接張量3.張量的操作(1)將張量移動(dòng)到GPU上,代碼如下:tensor=torch.rand(2,4)print(f"Shapeoftensor:{tensor.shape}")print(f"Datatypeoftensor:{tensor.dtype}")print(f"Devicetensorisstoredon:{tensor.device}")#將張量移動(dòng)到GPU上iftorch.cuda.is_available():tensor=tensor.to("cuda")#輸出張量所在存儲(chǔ)設(shè)備print(f"Devicetensorisstoredon:{tensor.device}")程序運(yùn)行代碼如下:Shapeoftensor:torch.Size([2,4])DShapeoftensor:torch.Size([2,4])Datatypeoftensor:torch.float32Devicetensorisstoredon:cpuDevicetensorisstoredon:cuda:03.張量的操作(2)索引和切片操作張量的索引和切片類(lèi)似numpy的索引和切片,代碼如下:#索引和切片data=[[1,2,3],[4,5,6],[7,8,9]]t_data=torch.tensor(data)print(f"張量數(shù)據(jù)為:\n{t_data}\n")print(f"第一行:{t_data[0]}")print(f"第一列:{t_data[:,0]}")print(f"最后一列:{t_data[...,-1]}")t_data[:,1]=0#將第二列的數(shù)據(jù)賦值為0print(t_data)程序運(yùn)行代碼如下:張量數(shù)據(jù)為:tensor([[1,2,3],[4,5,6],[7,8,9]])第一行:tensor([1,2,3])第一列:tensor([1,4,7])最后一列:tensor([3,6,9])tensor([[1,0,3],[4,0,6],[7,0,9]])3.張量的操作(3)連接張量在程序中可以用torch.cat或torch.stack來(lái)拼接張量,代碼如下:。data=[[1,2,3],[4,5,6],[7,8,9]]t_data=torch.tensor(data)t1=torch.cat([t_data,t_data,t_data],dim=1)#在第1個(gè)維度拼接,即水平方向print(t1)程序輸出結(jié)果如下:tensor([[1,2,3,1,2,3,1,2,3],[4,5,6,4,5,6,4,5,6],[7,8,9,7,8,9,7,8,9]])4.張量與Numpy在CPU上的張量和NumPy數(shù)組共享它們的內(nèi)存位置,改變一個(gè)會(huì)導(dǎo)致另一個(gè)數(shù)據(jù)也變化。張量轉(zhuǎn)換為NumPy數(shù)組的代碼如下:importtorchimportnumpyasnptensor=torch.ones(2,3)print(f"tensor的值為:{tensor}")num=tensor.numpy()print(f"num的值為:{num}")程序運(yùn)行結(jié)果如下:tensor的值為:tensor([[1.,1.,1.],[1.,1.,1.]])num的值為:[[1.1.1.][1.1.1.]]4.張量與Numpy改變張量的值,numpy數(shù)組的值也隨之更改,代碼如下:importtorchimportnumpyasnptensor=torch.ones(2,3)print(f"tensor的值為:{tensor}")num=tensor.numpy()print(f"num的值為:{num}")#改變第二行的值tensor[1,:]=3print(f"修改后tensor的值為:{tensor}")print(f"修改后num的值為:{num}")程序運(yùn)行結(jié)果如下:tensor的值為:tensor([[1.,1.,1.],[1.,1.,1.]])num的值為:[[1.1.1.][1.1.1.]]修改后tensor的值為:tensor([[1.,1.,1.],[3.,3.,3.]])修改后num的值為:[[1.1.1.][3.3.3.]]4.張量與Numpy將NumPy數(shù)組num轉(zhuǎn)換為張量,代碼如下:tensor1=torch.from_numpy(num)print(f"tensor1的值:{tensor1}")改變numpy數(shù)組的值,張量的值也會(huì)發(fā)生改變,代碼如下:tensor1=torch.from_numpy(num)print(f"tensor1的值:{tensor1}")np.add(num,3,out=num)print(f"修改后num的值:{num}")print(f"修改后tensor1的值:tensor1")程序運(yùn)行結(jié)果如下:tensor1的值:tensor([[1.,1.,1.],[3.,3.,3.]])修改后num的值:[[4.4.4.][6.6.6.]]修改后tensor1的值:tensor([[4.,4.,4.],[6.,6.,6.]])5.單元素張量只有一個(gè)值的張量,可以通過(guò)item屬性轉(zhuǎn)換為數(shù)值,接著上面的操作添加如下代碼:agg=tensor1.sum()agg_item=agg.item()print(agg_item,type(agg_item))程序運(yùn)行結(jié)果為:30.0<class'float'>2.3.1

張量(1)初始化張量(2)張量的相關(guān)屬性(3)張量的操作(4)張量與numpy(5)單元素張量2.3.2數(shù)學(xué)運(yùn)算(1)矩陣相加(2)矩陣相乘(3)矩陣對(duì)應(yīng)元素相乘(4)絕對(duì)值函數(shù)(5)就地操作(1)矩陣相加在PyTorch中可以通過(guò)“+”和“torch.add(參數(shù))”方法實(shí)現(xiàn)矩陣相加操作,代碼如下:importtorcht1=torch.ones(2,3)t2=torch.ones(2,3)t3=t1+t2;print(t3)t4=torch.add(t1,t2)print(t4)程序運(yùn)行結(jié)果如下:tensor([[2.,2.,2.],[2.,2.,2.]])tensor([[2.,2.,2.],[2.,2.,2.]])2.3.2數(shù)學(xué)運(yùn)算(2)矩陣相乘矩陣相乘可以使用@,或者matmul方法,示例代碼如下:importtorchtensor=torch.ones(3,3)#矩陣相乘,y1、y2和y3的值相同y1=tensor@tensor.Ty2=tensor.matmul(tensor.T)y3=torch.rand_like(tensor)torch.matmul(tensor,tensor.T,out=y3)print(y1)print(y2)print(y3)程序運(yùn)行結(jié)果如下:tensor([[3.,3.,3.],[3.,3.,3.],[3.,3.,3.]])tensor([[3.,3.,3.],[3.,3.,3.],[3.,3.,3.]])tensor([[3.,3.,3.],[3.,3.,3.],[3.,3.,3.]])2.3.2數(shù)學(xué)運(yùn)算(3)矩陣對(duì)應(yīng)元素相乘矩陣中相對(duì)應(yīng)位置上的元素相乘可以使用“*”或mul方法來(lái)實(shí)現(xiàn),代碼如下:z1=y1*y2z2=y2.mul(y1)print(z1)print(z2)程序運(yùn)行結(jié)果如下:tensor([[9.,9.,9.],[9.,9.,9.],[9.,9.,9.]])tensor([[9.,9.,9.],[9.,9.,9.],[9.,9.,9.]])2.3.2數(shù)學(xué)運(yùn)算(4)絕對(duì)值函數(shù)計(jì)算輸入張量中每個(gè)元素的絕對(duì)值可以采用torch.abs(input,out=None),代碼如下:t1=torch.abs(torch.FloatTensor([-8,-2,-4]))print(t1)程序運(yùn)行結(jié)果如下:tensor([8.,2.,4.])2.3.2數(shù)學(xué)運(yùn)算(5)就地操作將結(jié)果存儲(chǔ)到操作數(shù)中的操作稱(chēng)為就地操作。它們由_后綴表示。例如:x.copy_(y),x.t_(),會(huì)變x的值。t1=torch.abs(torch.FloatTensor([-8,-2,-4]))print(t1)t1.add_(4)print(t1)程序運(yùn)行結(jié)果如下:tensor([8.,2.,4.])tensor([12.,6.,8.])2.3.2數(shù)學(xué)運(yùn)算1.統(tǒng)計(jì)函數(shù)2.分布函數(shù)3.隨機(jī)函數(shù)2.3.3數(shù)理統(tǒng)計(jì)(1)最小值(2)最大值(3)中位數(shù)(4)平均值(5)標(biāo)準(zhǔn)差(6)方差(7)眾數(shù)(8)分位數(shù)(9)累計(jì)求積1.統(tǒng)計(jì)函數(shù)(1)最小值:min()/amin()/argmin()/minimum()min返回最小值和對(duì)應(yīng)的索引,amin返回最小值,argmin返回索引。函數(shù)如下:torch.min(input,dim,keepdim=False,*,out=None)torch.amin(input,dim,keepdim=False,*,out=None)torch.argmin(input,dim=None,keepdim=False)1.統(tǒng)計(jì)函數(shù)示例代碼如下:importtorchx=torch.tensor([[6,3,9],[4,5,6]])#返回每行中的最小值和索引values,index=torch.min(x,dim=1)print(values,index)#返回每行中的最小值values=torch.amin(x,dim=1)print(values)#返回每行中最小值的索引index=torch.argmin(x,dim=1)print(index)程序運(yùn)行結(jié)果如下:tensor([3,4])tensor([1,0])tensor([3,4])tensor([1,0])1.統(tǒng)計(jì)函數(shù)1.統(tǒng)計(jì)函數(shù)比較兩個(gè)張量,并返回對(duì)應(yīng)位置的最小值,使用minimum()函數(shù),示例代碼如下:importtorcha=torch.tensor((6,3,9))b=torch.tensor((4,5,6))c=torch.minimum(a,b)print(c)程序運(yùn)行結(jié)果如下:tensor([4,3,6])1.統(tǒng)計(jì)函數(shù)(2)最大值:max()/amax()/argmax()/maximum()max返回最大值和對(duì)應(yīng)的索引,amax返回最大值,argmax返回索引.函數(shù)定義如下:torch.max(input,dim,keepdim=False,*,out=None)torch.amax(input,dim,keepdim=False,*,out=None)torch.argmax(input,dim=None,keepdim=False)1.統(tǒng)計(jì)函數(shù)示例代碼如下:x=torch.tensor([[6,3,9],[4,5,6]])#返回每行中的最大值和索引values,index=torch.max(x,dim=1)print(values,index)#返回每行中的最大值values=torch.amax(x,dim=1)print(values)#返回每行中最大值的索引index=torch.argmax(x,dim=1)print(index)運(yùn)行結(jié)果如下:tensor([9,6])tensor([2,2])tensor([9,6])tensor([2,2])1.統(tǒng)計(jì)函數(shù)比較兩個(gè)張量,返回對(duì)應(yīng)位置上的最大值使用maximum()函數(shù),代碼如下:a=torch.tensor((6,3,9))b=torch.tensor((4,5,6))c=torch.maximum(a,b)print(c)運(yùn)行結(jié)果如下:tensor([6,5,9])1.統(tǒng)計(jì)函數(shù)該函數(shù)支持廣播機(jī)制,可返回兩個(gè)不同形狀的張量中相同位置的最大值,代碼如下:importtorchx1=torch.tensor([[1,2,4],[10,11,12]])x2=torch.tensor([[4,5,6]])y=torch.maximum(x1,x2)print(y)運(yùn)行結(jié)果如下:tensor([[4,5,6],[10,11,12]])1.統(tǒng)計(jì)函數(shù)(3)中位數(shù):median()/nanmedian()median()函數(shù)用于返回所有元素的中位數(shù)函數(shù)定義如下:torch.median(input,dim=-1,keepdim=False,*,out=None)1.統(tǒng)計(jì)函數(shù)示例代碼如下:importtorchx=torch.tensor([[1.0,2.0,3.0]])y=torch.median(x)print(y)#tensor(2.)1.統(tǒng)計(jì)函數(shù)如果共有偶數(shù)個(gè)元素,則會(huì)有兩個(gè)中位數(shù),返回較小的那一個(gè)。importtorchx=torch.tensor([[1.0,2.0,3.0,4.0]])y=torch.median(x)print(y)#tensor(2.)1.統(tǒng)計(jì)函數(shù)返回指定維度的元素的中位數(shù)。importtorchx=torch.tensor([[1,-3,5],[7,0,2]])y=torch.median(x,1)print(y[0])#tensor([1,2])中位數(shù)print(y[1])#tensor([0,2])對(duì)應(yīng)的索引1.統(tǒng)計(jì)函數(shù)如果元素中有nan,則返回nan。importtorchx=torch.tensor([1.0,torch.nan,2.0])y=torch.median(x)print(y)#tensor(nan)1.統(tǒng)計(jì)函數(shù)如果張量中有nan元素,則忽略,采用nanmedian()函數(shù),代碼如下:importtorchx=torch.tensor([1.0,torch.nan,2.0])y=torch.nanmedian(x)print(y)#tensor(1.)1.統(tǒng)計(jì)函數(shù)(4)平均值mean()/nanmean()計(jì)算所有元素或指定維度的元素的均值采用mean()函數(shù)其定義如下:torch.mean(input,dim,keepdim=False,*,dtype=None,out=None)1.統(tǒng)計(jì)函數(shù)示例代碼如下:importtorchx=torch.tensor([[1.0,2.0],[3.0,2.0]])y=torch.mean(x)#y=x.mean()print(y)#tensor(2.)importtorchx=torch.tensor([[1.0,2.0],[3.0,2.0]])y=torch.mean(x,axis=1)#y=x.mean(dim=1)print(y)#tensor([1.5000,2.5000])1.統(tǒng)計(jì)函數(shù)如果值中有nan,則均值返回nan,代碼如下。importtorchx=torch.tensor([[torch.nan,2.0],[3.0,2.0]])y=torch.mean(x)print(y)#tensor(nan)1.統(tǒng)計(jì)函數(shù)計(jì)算指定維度的非nan元素的均值,可以采用nanmean()函數(shù),代碼如下:importtorchx=torch.tensor([[torch.nan,2.0],[3.0,2.0]])y=torch.nanmean(x,dim=1)#y=x.nanmean(dim=1)print(y)#tensor([2.0000,2.5000])1.統(tǒng)計(jì)函數(shù)(5)求和

sum()/nansum()/cumsum()計(jì)算指定維度的元素的和,采用sum()函數(shù)其定義如下:torch.sum(input,dim,keepdim=False,*,dtype=None)示例代碼如下:importtorchx=torch.tensor([[1,2],[3.,4.]])y=torch.sum(x,axis=0)print(y)#tensor([4.,6.])1.統(tǒng)計(jì)函數(shù)計(jì)算指定維度的非nan元素的和,采用nansum()函數(shù)示例代碼如下:importtorchx=torch.tensor([[1,2],[3.,float("nan")]])y=torch.nansum(x)print(y)#tensor(6.)1.統(tǒng)計(jì)函數(shù)在指定的維度累計(jì)求和需要指定dim參數(shù),示例代碼如下:importtorchx=torch.tensor([[1,2],[3.,float("nan")]])y=torch.nansum(x,dim=1)print(y)#tensor([3.,3.])1.統(tǒng)計(jì)函數(shù)累計(jì)求和采用cumsum函數(shù),cumsum函數(shù)示例代碼如下:importtorchx=torch.tensor([[1,2],[3.,4.]])y=torch.cumsum(x,axis=0)print(y)#tensor([[1.,2.],[4.,6.]])1.統(tǒng)計(jì)函數(shù)(6)標(biāo)準(zhǔn)差:std()定義如下:torch.std(input,dim,unbiased,keepdim=False,*,out=None)示例代碼如下:importtorchx=torch.tensor([[1,2],[3.,4.]])y=torch.std(x,dim=0)print(y)#tensor([1.4142,1.4142])1.統(tǒng)計(jì)函數(shù)(7)方差:var()定義如下:torch.var(input,dim,unbiased,keepdim=False,*,out=None)示例代碼如下:importtorchx=torch.tensor([[1,2],[3.,4.]])y=torch.var(x,dim=0)print(y)#tensor([2.,2.])1.統(tǒng)計(jì)函數(shù)(8)眾數(shù):mode()torch.mode(input,dim)返回的是指定維度的眾數(shù)的還有該眾數(shù)的索引;示例代碼如下:importtorchx=torch.tensor([1,2,2,3,3,3])values,index=torch.mode(x)print(values)#tensor(3)眾數(shù)print(index)#tensor(5)最后一次出現(xiàn)的位置1.統(tǒng)計(jì)函數(shù)(9)分位數(shù)quantile()/unquantile()定義如下:torch.quantile(input,q,dim=None,keepdim=False,*,out=None)示例代碼如下:importtorchx=torch.tensor([1.,2.,3.,4.,5.])q=torch.tensor([0.25,0.5,0.75])y=torch.quantile(x,q,dim=0,keepdim=True)print(y)#tensor([[2.],[3.],[4.]])1.統(tǒng)計(jì)函數(shù)使用nanquantile()函數(shù)忽略掉nan值,去求分位數(shù),示例代碼如下:importtorchx=torch.tensor([1.,2.,3.,4.,5.,float('nan')])q=torch.tensor([0.25,0.5,0.75])y=torch.quantile(x,q,dim=0,keepdim=True)print(y)#tensor([[2.],[3.],[4.]])1.統(tǒng)計(jì)函數(shù)(10)累計(jì)求積:prod()定義如下:d(input,dim,keepdim=False,*,dtype=None)示例代碼如下:importtorchx=torch.tensor([1.,2.,3.])y=d(x)print(y)#tensor(6.)#計(jì)數(shù):count_nonzero()#torch.count_nonzero(input,dim=None)importtorchx=torch.tensor([[1,2,0],[3.,4.,0]])y=torch.count_nonzero(x,dim=0)print(y)#tensor([2,2,0])2.分布函數(shù)(1)正態(tài)分布函數(shù)(2)伯努利分布函數(shù)(3)泊松分布函數(shù)(4)多元正態(tài)分布函數(shù)2.分布函數(shù)(1)正態(tài)分布:normal()正態(tài)分布函數(shù)mormal()的定義如下:torch.normal(mean,std,*,generator=None,out=None)該函數(shù)返回一個(gè)張量,包含從給定參數(shù)means,std的離散正態(tài)分布中抽取隨機(jī)數(shù)。使用該函數(shù)的示例代碼如下:importtorchx=torch.normal(mean=torch.arange(1.,6.),std=torch.arange(1,0,-0.2))print(x)#tensor([1.7975,1.8425,3.0575,3.3935,5.3791])2.分布函數(shù)共享均值的代碼如下:importtorchx=torch.normal(mean=1.,std=torch.arange(1,0,-0.2))print(x)#tensor([1.9187,1.1210,0.3641,0.9876,1.2493])共享標(biāo)準(zhǔn)差的代碼如下:importtorchx=torch.normal(mean=torch.arange(1,0,-0.2),std=1.)print(x)#tensor([0.5276,1.8708,-1.4019,-0.7807,1.0124])2.分布函數(shù)(2)伯努利分布:bernoulli()伯努利分布函數(shù)bernoulli()的定義如下:torch.bernoulli(input,*,generator=None,out=None)根據(jù)隨機(jī)矩陣,值為(0,1),產(chǎn)生隨機(jī)數(shù)0或1。importtorchx=torch.empty(3,3).uniform_(0,1)y=torch.bernoulli(x)print(x)print(y)運(yùn)行結(jié)果:tensor([[0.8473,0.8749,0.6483],[0.2148,0.9493,0.0121],[0.1809,0.1877,0.2927]])tensor([[1.,1.,1.],[0.,1.,0.],[1.,1.,1.]])2.分布函數(shù)對(duì)于1值輸入,伯努利返回的也是1值。importtorchx=torch.ones(2,2)y=torch.bernoulli(x)print(x)print(y)運(yùn)行結(jié)果:tensor([[1.,1.],[1.,1.]])tensor([[1.,1.],[1.,1.]])2.分布函數(shù)對(duì)于0值輸入,伯努利返回的也是0值。importtorchx=torch.zeros(2,2)y=torch.bernoulli(x)print(x)print(y)運(yùn)行結(jié)果:tensor([[0.,0.],[0.,0.]])tensor([[0.,0.],[0.,0.]])2.分布函數(shù)(3)泊松分布:poisson()泊松分布函數(shù)的定義如下:torch.poisson(input,generator=None)使用泊松分布的示例代碼如下:importtorchx=torch.rand(2,2)*5y=torch.poisson(x)print(x)#tensor([[2.0526,3.9384],[1.0724,2.4068]])2.分布函數(shù)(4)多元正態(tài)分布:multinomial()多元正態(tài)分布函數(shù)的定義與說(shuō)明如下:torch.multinomial(input,num_samples,replacement=False,*,generator=None,out=None)參數(shù)說(shuō)明如下:input:輸入的張量num_samples:每行的取值次數(shù),該值不能大于每一行的元素?cái)?shù),否則會(huì)報(bào)錯(cuò)。replacement:布爾值表示取樣時(shí)有無(wú)放回,True是有放回,F(xiàn)alse無(wú)放回。2.分布函數(shù)對(duì)于無(wú)放回抽樣的示例代碼如下:importtorchweights=torch.tensor([10,20,30],dtype=torch.float)x=torch.multinomial(weights,3)print(x)#tensor([1,2,0])2.分布函數(shù)對(duì)于有放回抽樣的示例代碼如下:importtorchweights=torch.tensor([10,20,30],dtype=torch.float)x=torch.multinomial(weights,4,replacement=True)print(x)#tensor([0,1,1,2])2.分布函數(shù)對(duì)于多維張量的抽樣代碼如下:importtorchweights=torch.tensor([[10,20,30],[50,60,70]],dtype=torch.float)x=torch.multinomial(weights,2)print(x)#tensor([[1,2],[2,0]])3.隨機(jī)函數(shù)(1)隨機(jī)種子函數(shù)(2)返回隨機(jī)數(shù)種子函數(shù)3.隨機(jī)函數(shù)(1)隨機(jī)種子:seed()/manual_seed()/使用seed()的代碼如下:torch.seed()#13778702264380944972在需要生成隨機(jī)數(shù)的實(shí)驗(yàn)中,確保每次運(yùn)行.py文件時(shí),使用manual_seed(seed)生成的隨機(jī)數(shù)都是固定的,這樣每次實(shí)驗(yàn)結(jié)果顯示也就一致了,其函數(shù)定義如下:torch.manual_seed(seed)使用該函數(shù)生成隨機(jī)數(shù),示例代碼如下:importtorchtorch.manual_seed(1)x=torch.rand(1,2)print(x)#tensor([[0.7576,0.2793]])3.隨機(jī)函數(shù)(2)返回隨機(jī)數(shù)種子:initial_seed()示例代碼如下:importtorchtorch.manual_seed(3)x=torch.initial_seed()print(x)#32.3PyTorch基本使用2.3PyTorch基本使用2.3.1張量(1)初始化張量(2)張量的相關(guān)屬性(3)張量的操作(4)張量與numpy(5)單元素張量2.3.2數(shù)學(xué)運(yùn)算(1)矩陣相加(2)矩陣相乘(3)矩陣對(duì)應(yīng)元素相乘(4)絕對(duì)值函數(shù)(5)就地操作2.3.3數(shù)理統(tǒng)計(jì)1.統(tǒng)計(jì)函數(shù)(1)最小值(2)最大值(3)中位數(shù)(4)平均值(5)標(biāo)準(zhǔn)差(6)方差(7)眾數(shù)(8)分位數(shù)(9)累計(jì)求積2.分布函數(shù)(1)正態(tài)分布函數(shù)(2)伯努利分布函數(shù)(3)泊松分布函數(shù)(4)多元正態(tài)分布函數(shù)3.隨機(jī)函數(shù)(1)隨機(jī)種子函數(shù)(2)返回隨機(jī)數(shù)種子函數(shù)2.4實(shí)踐任務(wù)任務(wù)1認(rèn)識(shí)線性回歸任務(wù)2準(zhǔn)備數(shù)據(jù)任務(wù)3設(shè)計(jì)模型任務(wù)4訓(xùn)練模型任務(wù)5預(yù)測(cè)數(shù)據(jù)任務(wù)1認(rèn)識(shí)線性回歸線性回歸是利用數(shù)理統(tǒng)計(jì)中回歸分析,來(lái)確定兩種或兩種以上變量間相互依賴(lài)的定量關(guān)系的

一種統(tǒng)計(jì)分析方法,

運(yùn)用十分廣泛。回歸分析中,只包括一個(gè)自變量和一個(gè)因變量,且二者的關(guān)系可用一條直線近似表示,這種回歸分析稱(chēng)為一元線性回歸分析。如果回歸分析中包括兩個(gè)或兩個(gè)以上的自變量,且因變量和自變量之間是線性關(guān)系,則稱(chēng)為多元線性回歸分析。任務(wù)1認(rèn)識(shí)線性回歸線性回歸屬于回歸算法,表達(dá)監(jiān)督學(xué)習(xí)的過(guò)程。通過(guò)屬性的線性組合來(lái)預(yù)測(cè)函數(shù),其線性模型基本形式為:一般向量形式寫(xiě)成:

其中w=(w1;w2;…;wd)。w1;w2;…;wd為模型訓(xùn)練數(shù)據(jù)中學(xué)習(xí)到的參數(shù),或賦予每個(gè)變量的“權(quán)值”。b也是一個(gè)學(xué)習(xí)到的參數(shù),這個(gè)線性函數(shù)中的常量也稱(chēng)為模型的偏置。任務(wù)2準(zhǔn)備數(shù)據(jù)為了更好地理解前面所講的概念,本節(jié)將引入一個(gè)案例:根據(jù)程序員的編程代碼量來(lái)預(yù)測(cè)其編程水平測(cè)試的成績(jī)。我們將實(shí)現(xiàn)一個(gè)線性回歸模型,并用梯度下降算法求解該模型,從而給出預(yù)測(cè)直線。這個(gè)實(shí)例問(wèn)題是:假如有歷史編程代碼量和成績(jī)的數(shù)據(jù),我們應(yīng)如何預(yù)測(cè)未來(lái)某個(gè)程序員的編程水平成績(jī)呢?針對(duì)這個(gè)問(wèn)題,我們的求解步驟包括:準(zhǔn)備數(shù)據(jù)、設(shè)計(jì)模型、訓(xùn)練和預(yù)測(cè)。

任務(wù)2準(zhǔn)備數(shù)據(jù)首先,我們編造一批代碼量的數(shù)據(jù)。代碼量數(shù)據(jù)就可以為0,1,2,3…,每個(gè)數(shù)表示以百行為單位,例如3表示300行代碼量

任務(wù)2準(zhǔn)備數(shù)據(jù)

我們可以用PyTorch的linspace來(lái)構(gòu)造0~100之間的均勻數(shù)字作為代碼量的變量x:任務(wù)2準(zhǔn)備數(shù)據(jù)然后,我們生成對(duì)應(yīng)的編程成績(jī)數(shù)據(jù),假設(shè)它就是在x的基礎(chǔ)上加上一定的噪聲,實(shí)現(xiàn)代碼如下:任務(wù)2準(zhǔn)備數(shù)據(jù)這樣我們就構(gòu)造了一個(gè)數(shù)據(jù)集,x表示代碼量,y表示編程水平成績(jī)。在這100個(gè)不同的代碼量????和每一個(gè)成績(jī)????對(duì)應(yīng),其中,每個(gè)<????,????>稱(chēng)為一個(gè)樣本點(diǎn)。任務(wù)2準(zhǔn)備數(shù)據(jù)下面,我們將數(shù)據(jù)集切分成訓(xùn)練集和測(cè)試集兩部分。任務(wù)2準(zhǔn)備數(shù)據(jù)接下來(lái),我們對(duì)訓(xùn)練數(shù)據(jù)點(diǎn)進(jìn)行可視化:圖2.19模擬編程水平數(shù)據(jù)集的散點(diǎn)圖任務(wù)3設(shè)計(jì)模型并讓它盡可能地小。任務(wù)3設(shè)計(jì)模型

任務(wù)3設(shè)計(jì)模型在計(jì)算的過(guò)程中,我們需要計(jì)算出??對(duì)??、??的偏導(dǎo)數(shù),利用PyTorch的:

backward()可以非常方便地將這兩個(gè)偏導(dǎo)數(shù)計(jì)算出來(lái)。任務(wù)4訓(xùn)練模型我們將上述思路轉(zhuǎn)化為PyTorch代碼。首先,我們需要定義兩個(gè)自動(dòng)微分變量a和b:任務(wù)4訓(xùn)練模型設(shè)置學(xué)習(xí)率:learning_rate=0.0001然后,完成對(duì)a和b的迭代計(jì)算:任務(wù)4訓(xùn)練模型另外,有幾點(diǎn)技術(shù)細(xì)節(jié)值得說(shuō)明。在計(jì)算predictions時(shí),為了讓a、b與x的維度相匹配,我們對(duì)a和b進(jìn)行了擴(kuò)維。PyTorch規(guī)定,不能直接對(duì)自動(dòng)微分變量進(jìn)行數(shù)值更新,只能對(duì)它的data屬性進(jìn)行更新。所以在更新a的時(shí)候,我們是在更新a.data,也就是a所包裹的張量。在PyTorch中,如果某個(gè)函數(shù)后面加上了“_”,就表明要用這個(gè)函數(shù)的計(jì)算結(jié)果更新當(dāng)前的變量。例如,a.data.add_(3)的作用是將a.data的數(shù)值更新為a.data加上3。任務(wù)4訓(xùn)練模型最后,將原始的數(shù)據(jù)散點(diǎn)聯(lián)合擬合的直線畫(huà)出來(lái),如下所示:圖2.20數(shù)據(jù)點(diǎn)與擬合線任務(wù)5預(yù)測(cè)數(shù)據(jù)在測(cè)試數(shù)據(jù)集上應(yīng)用我們擬合的直線來(lái)預(yù)測(cè)對(duì)應(yīng)的y,也就是編程水平成績(jī)。只需要將測(cè)試數(shù)據(jù)的x值帶入我們擬合的直線即可:任務(wù)5預(yù)測(cè)數(shù)據(jù)那么,預(yù)測(cè)結(jié)果到底準(zhǔn)不準(zhǔn)呢?我們不妨把預(yù)測(cè)數(shù)值和實(shí)際數(shù)值繪制在一起,如下所示:圖2.21擬合線與預(yù)測(cè)數(shù)據(jù)本章小節(jié)2.1PyTorch介紹2.1.1PyTorch概述2.1.2計(jì)算圖概述2.2環(huán)境搭建.2.2.1Anaconda安裝2.2.2PyTorch安裝2.2.2Pycharm安裝2.3PyTorch基本使用2.3.1張量2.3.2數(shù)學(xué)運(yùn)算2.3.3數(shù)理統(tǒng)計(jì)2.4實(shí)踐任務(wù)任務(wù)1認(rèn)識(shí)線性回歸任務(wù)2準(zhǔn)備數(shù)據(jù)任務(wù)3設(shè)計(jì)模型任務(wù)4訓(xùn)練模型任務(wù)5預(yù)測(cè)數(shù)據(jù)簡(jiǎn)單全連接網(wǎng)絡(luò)的手寫(xiě)數(shù)字識(shí)別第三章01了解全連接神經(jīng)網(wǎng)絡(luò)的發(fā)展歷程02掌握感知機(jī)模型和多層感知機(jī)的結(jié)構(gòu)03

掌握不同激活函數(shù)的定義與區(qū)別04掌握反向傳播算法的原理、梯度下降法學(xué)習(xí)目標(biāo)CONTENTS05能使用神經(jīng)網(wǎng)絡(luò)模型實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別01使用神經(jīng)網(wǎng)絡(luò)知識(shí)分析問(wèn)題和解決問(wèn)題02能主動(dòng)獲取最新的研究成果和技術(shù)發(fā)展03提高問(wèn)題分析和解決問(wèn)題的能力04

培養(yǎng)團(tuán)隊(duì)合作和溝通能力素質(zhì)目標(biāo)CONTENTS模型訓(xùn)練模型測(cè)試與評(píng)估實(shí)踐任務(wù)全連接神經(jīng)網(wǎng)絡(luò)模型搭建手寫(xiě)數(shù)字?jǐn)?shù)據(jù)集處理第一節(jié)

手寫(xiě)數(shù)字識(shí)別任務(wù)介紹業(yè)務(wù)場(chǎng)景與需求當(dāng)我們?cè)阢y行辦理業(yè)務(wù)時(shí),可能會(huì)遇到需要填寫(xiě)支票或匯票的情況。然而,由于手寫(xiě)的支票和匯票存在著字跡不清晰、寫(xiě)錯(cuò)數(shù)字等問(wèn)題,導(dǎo)致銀行工作人員需要花費(fèi)大量的時(shí)間來(lái)進(jìn)行人工識(shí)別和分類(lèi),同時(shí)還可能產(chǎn)生錯(cuò)誤。為了解決這個(gè)問(wèn)題,這時(shí)需要設(shè)計(jì)并實(shí)現(xiàn)一個(gè)手寫(xiě)數(shù)字識(shí)別模型,以滿足系統(tǒng)對(duì)于支票、匯票等的自動(dòng)分類(lèi)需求,銀行可以采用自動(dòng)化的手寫(xiě)數(shù)字識(shí)別技術(shù),通過(guò)計(jì)算機(jī)程序來(lái)自動(dòng)識(shí)別和分類(lèi)手寫(xiě)數(shù)字,提高業(yè)務(wù)效率和準(zhǔn)確率。

手寫(xiě)數(shù)字識(shí)別任務(wù)介紹技術(shù)分析手寫(xiě)數(shù)字識(shí)別是一個(gè)典型的圖像分類(lèi)問(wèn)題。在傳統(tǒng)的方法中,我們需要對(duì)數(shù)字圖像進(jìn)行特征提取,并使用分類(lèi)器對(duì)提取的特征進(jìn)行分類(lèi)。然而,這種方法存在著對(duì)特征提取的高要求和對(duì)分類(lèi)器的復(fù)雜性要求較高等問(wèn)題。相比之下,神經(jīng)網(wǎng)絡(luò)模型可以直接從原始數(shù)據(jù)中學(xué)習(xí)特征,并通過(guò)反向傳播算法優(yōu)化模型參數(shù),從而實(shí)現(xiàn)高效準(zhǔn)確的分類(lèi)。

手寫(xiě)數(shù)字識(shí)別任務(wù)介紹技術(shù)分析全連接網(wǎng)絡(luò)是基礎(chǔ)的神經(jīng)網(wǎng)絡(luò)模型之一,它由輸入層、隱藏層和輸出層構(gòu)成。輸入層接收原始的圖像數(shù)據(jù),并將其轉(zhuǎn)化為網(wǎng)絡(luò)可處理的形式,隱藏層通過(guò)一系列的線性變換和非線性變換對(duì)數(shù)據(jù)進(jìn)行特征提取,輸出層則將提取的特征與目標(biāo)標(biāo)簽進(jìn)行匹配和分類(lèi)。

手寫(xiě)數(shù)字識(shí)別任務(wù)介紹全連接網(wǎng)絡(luò)的訓(xùn)練過(guò)程通常采用梯度下降算法,即通過(guò)最小化損失函數(shù)來(lái)優(yōu)化模型參數(shù),從而實(shí)現(xiàn)分類(lèi)的準(zhǔn)確性。

手寫(xiě)數(shù)字識(shí)別任務(wù)介紹過(guò)擬合是指機(jī)器學(xué)習(xí)模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)很好,但在新數(shù)據(jù)上表現(xiàn)不佳的現(xiàn)象。簡(jiǎn)單來(lái)說(shuō),就是模型過(guò)于依賴(lài)于訓(xùn)練數(shù)據(jù),無(wú)法很好地泛化到新數(shù)據(jù)。

手寫(xiě)數(shù)字識(shí)別任務(wù)介紹

過(guò)擬合的解決方法包括:增加更多的訓(xùn)練數(shù)據(jù)、減少模型的復(fù)雜度、使用正則化等方法。這些方法的本質(zhì)是讓模型更好地理解數(shù)據(jù)的本質(zhì)規(guī)律,而不是過(guò)分依賴(lài)于訓(xùn)練數(shù)據(jù)的細(xì)節(jié)。手寫(xiě)數(shù)字識(shí)別任務(wù)介紹總之,全連接網(wǎng)絡(luò)是一種簡(jiǎn)單而有效的神經(jīng)網(wǎng)絡(luò)模型,能夠解決手寫(xiě)數(shù)字識(shí)別等圖像分類(lèi)問(wèn)題。手寫(xiě)數(shù)字識(shí)別實(shí)現(xiàn)過(guò)程如下:

第二節(jié)

神經(jīng)網(wǎng)絡(luò)搭建

前向傳播算法前向傳播的介紹前向傳播(ForwardPropagation)算法是指神經(jīng)網(wǎng)絡(luò)向前計(jì)算的過(guò)程。前向傳播算法需要神經(jīng)網(wǎng)絡(luò)的輸入、神經(jīng)網(wǎng)絡(luò)的連接結(jié)構(gòu),以及每個(gè)神經(jīng)元中的參數(shù)。如圖所示為一個(gè)兩層神經(jīng)網(wǎng)絡(luò),假設(shè)x1和x2是成績(jī)分類(lèi)的兩個(gè)指標(biāo),經(jīng)過(guò)該神經(jīng)網(wǎng)絡(luò)計(jì)算后,從y輸出成績(jī)的類(lèi)別。前向傳播算法(1)為了確認(rèn)前面的內(nèi)容,現(xiàn)在用數(shù)學(xué)式表示a1(1),通過(guò)加權(quán)信號(hào)和偏置的和按如下方式進(jìn)行計(jì)算:此外,如果使用矩陣的乘法運(yùn)算,則可以將第1層的加權(quán)和表示成下面的式子:(2)隱藏層的加權(quán)和(加權(quán)信號(hào)和偏置的總和)用a表示,被激活函數(shù)轉(zhuǎn)換后的信號(hào)用z表示。這里我們使用的是sigmoid函數(shù)。代碼如下:Z1=sigmoid(A1)前向傳播算法輸出層所用的激活函數(shù),要根據(jù)求解問(wèn)題的性質(zhì)決定。一般地,回歸問(wèn)題可以使用恒等函數(shù),二元分類(lèi)問(wèn)題可以使用sigmoid函數(shù),多元分類(lèi)問(wèn)題可以使用softmax函數(shù)。在實(shí)際建模解成績(jī)及格分類(lèi)預(yù)測(cè)問(wèn)題時(shí),首先隨機(jī)初始化網(wǎng)絡(luò)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論