深度學(xué)習(xí)案例教程 課件 第6章 文本分類_第1頁(yè)
深度學(xué)習(xí)案例教程 課件 第6章 文本分類_第2頁(yè)
深度學(xué)習(xí)案例教程 課件 第6章 文本分類_第3頁(yè)
深度學(xué)習(xí)案例教程 課件 第6章 文本分類_第4頁(yè)
深度學(xué)習(xí)案例教程 課件 第6章 文本分類_第5頁(yè)
已閱讀5頁(yè),還剩142頁(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)介

文本分類第六章01理解文本分類的基本概念和應(yīng)用場(chǎng)景學(xué)習(xí)目標(biāo)CONTENTS01理解文本分類的基本概念和應(yīng)用場(chǎng)景02掌握分詞、TFIDF等文本預(yù)處理技術(shù)的基本原理學(xué)習(xí)目標(biāo)CONTENTS01理解文本分類的基本概念和應(yīng)用場(chǎng)景02掌握分詞、TFIDF等文本預(yù)處理技術(shù)的基本原理03熟悉如何劃分訓(xùn)練測(cè)試數(shù)據(jù)以及交叉驗(yàn)證的意義學(xué)習(xí)目標(biāo)CONTENTS01理解文本分類的基本概念和應(yīng)用場(chǎng)景02掌握分詞、TFIDF等文本預(yù)處理技術(shù)的基本原理03熟悉如何劃分訓(xùn)練測(cè)試數(shù)據(jù)以及交叉驗(yàn)證的意義04

理解過(guò)擬合的概念和它在模型訓(xùn)練中的影響學(xué)習(xí)目標(biāo)CONTENTS01理解文本分類的基本概念和應(yīng)用場(chǎng)景02掌握分詞、TFIDF等文本預(yù)處理技術(shù)的基本原理03熟悉如何劃分訓(xùn)練測(cè)試數(shù)據(jù)以及交叉驗(yàn)證的意義04

理解過(guò)擬合的概念和它在模型訓(xùn)練中的影響學(xué)習(xí)目標(biāo)CONTENTS05

學(xué)習(xí)并理解常見(jiàn)的文本分類算法01培養(yǎng)科學(xué)的問(wèn)題分析和解決能力,提高對(duì)實(shí)際問(wèn)題進(jìn)行抽象和建模的能力素質(zhì)目標(biāo)CONTENTS01培養(yǎng)科學(xué)的問(wèn)題分析和解決能力,提高對(duì)實(shí)際問(wèn)題進(jìn)行抽象和建模的能力02提高自我學(xué)習(xí)和獨(dú)立解決問(wèn)題的能力,能夠通過(guò)查詢文獻(xiàn)、網(wǎng)絡(luò)資源等途徑獲取解決方案素質(zhì)目標(biāo)CONTENTS01培養(yǎng)科學(xué)的問(wèn)題分析和解決能力,提高對(duì)實(shí)際問(wèn)題進(jìn)行抽象和建模的能力02提高自我學(xué)習(xí)和獨(dú)立解決問(wèn)題的能力,能夠通過(guò)查詢文獻(xiàn)、網(wǎng)絡(luò)資源等途徑獲取解決方案03培養(yǎng)良好的邏輯思維和批判性思維能力,能夠分析和評(píng)估不同的方法和模型的優(yōu)缺點(diǎn)素質(zhì)目標(biāo)CONTENTS01培養(yǎng)科學(xué)的問(wèn)題分析和解決能力,提高對(duì)實(shí)際問(wèn)題進(jìn)行抽象和建模的能力02提高自我學(xué)習(xí)和獨(dú)立解決問(wèn)題的能力,能夠通過(guò)查詢文獻(xiàn)、網(wǎng)絡(luò)資源等途徑獲取解決方案03培養(yǎng)良好的邏輯思維和批判性思維能力,能夠分析和評(píng)估不同的方法和模型的優(yōu)缺點(diǎn)04提高團(tuán)隊(duì)合作和溝通能力,可以在團(tuán)隊(duì)項(xiàng)目中有效地進(jìn)行信息交流和分享素質(zhì)目標(biāo)CONTENTS分類模型搭建訓(xùn)練新聞分類模型實(shí)踐任務(wù):新聞文本分類新聞數(shù)據(jù)處理模型評(píng)估第一節(jié)

分詞的實(shí)現(xiàn)分詞在自然語(yǔ)言處理中是極其重要的一步。在處理文本數(shù)據(jù)時(shí),我們需要將連續(xù)的文本劃分成獨(dú)立的單元,這些單元可以是單個(gè)字符,也可以是詞或短語(yǔ)。分詞就是實(shí)現(xiàn)這一過(guò)程的方法。分詞的定義第一節(jié)

分詞的實(shí)現(xiàn)在許多語(yǔ)言中,如英語(yǔ),單詞之間通過(guò)空格自然分隔。然而在一些語(yǔ)言中,如中文,文本是連續(xù)的,沒(méi)有明顯的詞語(yǔ)分隔符。在這種情況下,分詞技術(shù)就顯得尤其重要。分詞的定義第一節(jié)

分詞的實(shí)現(xiàn)分詞就是將一段連續(xù)的文本切分成一系列獨(dú)立的詞語(yǔ)。分詞的定義例如,中文句子“我愛(ài)自然語(yǔ)言處理”經(jīng)過(guò)分詞后,可以得到“我/愛(ài)/自然語(yǔ)言處理”。好的分詞可以提取出文本中的關(guān)鍵信息,對(duì)于文本分類、信息檢索、情感分析等任務(wù)有著重要的影響。分詞結(jié)果會(huì)直接影響后續(xù)任務(wù)的性能分詞的特點(diǎn)分詞的實(shí)現(xiàn)

好的分詞可以提取出文本中的關(guān)鍵信息,對(duì)于文本分類、信息檢索、情感分析等任務(wù)有著重要的影響。分詞結(jié)果會(huì)直接影響后續(xù)任務(wù)的性能例如,“我愛(ài)聽(tīng)音樂(lè)”中,“我愛(ài)聽(tīng)”和“聽(tīng)音樂(lè)”可以視為一個(gè)詞,也可以視為兩個(gè)詞。處理這種歧義是分詞的一個(gè)挑戰(zhàn)。分詞可能會(huì)產(chǎn)生歧義分詞的實(shí)現(xiàn)

分詞的特點(diǎn)好的分詞可以提取出文本中的關(guān)鍵信息,對(duì)于文本分類、信息檢索、情感分析等任務(wù)有著重要的影響。分詞結(jié)果會(huì)直接影響后續(xù)任務(wù)的性能例如,“我愛(ài)聽(tīng)音樂(lè)”中,“我愛(ài)聽(tīng)”和“聽(tīng)音樂(lè)”可以視為一個(gè)詞,也可以視為兩個(gè)詞。處理這種歧義是分詞的一個(gè)挑戰(zhàn)。分詞可能會(huì)產(chǎn)生歧義不同的語(yǔ)料庫(kù)可能會(huì)產(chǎn)生不同的分詞效果。分詞的效果受語(yǔ)料庫(kù)影響分詞的實(shí)現(xiàn)

分詞的特點(diǎn)分詞的實(shí)現(xiàn)分詞被廣泛用于自然語(yǔ)言處理的各個(gè)環(huán)節(jié),包括信息檢索、文本分類、情感分析、語(yǔ)義分析、機(jī)器翻譯等。在Python中,我們可以使用jieba庫(kù)進(jìn)行中文分詞。這是一個(gè)簡(jiǎn)單易用的分詞庫(kù),包含三種分詞模式:精確模式、全模式和搜索引擎模式。下面我們通過(guò)一段代碼介紹jieba分詞的使用。代碼實(shí)現(xiàn)分詞的實(shí)現(xiàn)importjiebatext="我愛(ài)自然語(yǔ)言處理"seg_list=jieba.cut(text,cut_all=False)print("精確模式:"+"/".join(seg_list))代碼實(shí)現(xiàn)分詞的實(shí)現(xiàn)importjiebatext="我愛(ài)自然語(yǔ)言處理"seg_list=jieba.cut(text,cut_all=False)print("精確模式:"+"/".join(seg_list))【結(jié)果】精確模式:我/愛(ài)/自然語(yǔ)言處理代碼實(shí)現(xiàn)分詞的實(shí)現(xiàn)importjiebatext="我愛(ài)自然語(yǔ)言處理"seg_list=jieba.cut(text,cut_all=True)print("全模式:"+"/".join(seg_list))代碼實(shí)現(xiàn)分詞的實(shí)現(xiàn)importjiebatext="我愛(ài)自然語(yǔ)言處理"seg_list=jieba.cut(text,cut_all=True)print("全模式:"+"/".join(seg_list))【結(jié)果】全模式:我/愛(ài)/自然/自然語(yǔ)言/語(yǔ)言/處理/自然語(yǔ)言處理代碼實(shí)現(xiàn)分詞的實(shí)現(xiàn)importjiebatext="我愛(ài)自然語(yǔ)言處理"seg_list=jieba.cut_for_search(text)print("搜索引擎模式:"+"/".join(seg_list))代碼實(shí)現(xiàn)分詞的實(shí)現(xiàn)importjiebatext="我愛(ài)自然語(yǔ)言處理"seg_list=jieba.cut_for_search(text)print("搜索引擎模式:"+"/".join(seg_list))【結(jié)果】搜索引擎模式:我/愛(ài)/自然/語(yǔ)言/自然語(yǔ)言/處理/自然語(yǔ)言處理代碼實(shí)現(xiàn)第二節(jié)

TF-IDF在處理文本數(shù)據(jù)時(shí),我們需要量化詞語(yǔ)在文本中的重要性。一種簡(jiǎn)單的方法是使用詞頻

(termfrequency,TF),即詞語(yǔ)在文本中出現(xiàn)的頻率。然而,這種方法并沒(méi)有考慮到一個(gè)詞在整個(gè)文檔集合(或稱語(yǔ)料庫(kù))中的重要性,這就引入了逆文檔頻率(inversedocumentfrequency,IDF)的概念。TF-IDF的定義第二節(jié)

TF-IDFTF-IDF是TermFrequency-InverseDocumentFrequency的縮寫,它是一種統(tǒng)計(jì)方法,用以評(píng)估一字詞對(duì)于一個(gè)文件集或一個(gè)語(yǔ)料庫(kù)中的其中一份文件的重要程度。TF-IDF的定義一個(gè)詞語(yǔ)的TF-IDF值越大,它在文本中的重要性就越大。能夠反映出詞語(yǔ)對(duì)文本的重要性TF-IDF

TF-IDF特點(diǎn)一個(gè)詞語(yǔ)的TF-IDF值越大,它在文本中的重要性就越大。能夠反映出詞語(yǔ)對(duì)文本的重要性即常見(jiàn)的詞語(yǔ)有較低的權(quán)重,而罕見(jiàn)的詞語(yǔ)有較高的權(quán)重。具有識(shí)別出重要單詞的能力TF-IDF

TF-IDF特點(diǎn)一個(gè)詞語(yǔ)的TF-IDF值越大,它在文本中的重要性就越大。能夠反映出詞語(yǔ)對(duì)文本的重要性即常見(jiàn)的詞語(yǔ)有較低的權(quán)重,而罕見(jiàn)的詞語(yǔ)有較高的權(quán)重。具有識(shí)別出重要單詞的能力被廣泛用于信息檢索、文本分類、文本聚類等任務(wù)。是一種常用的特征抽取方法TF-IDF

TF-IDF特點(diǎn)TF-IDFTF-IDF被廣泛用于自然語(yǔ)言處理的各個(gè)環(huán)節(jié),包括信息檢索、文本分類、情感分析、文本摘要、文本聚類等。在Python中,我們可以使用scikit-learn庫(kù)的TfidfVectorizer類來(lái)計(jì)算TF-IDF值。代碼實(shí)現(xiàn)TF-IDFfromsklearn.feature_extraction.textimportTfidfVectorizer#原始文本documents=['我愛(ài)自然語(yǔ)言處理','自然語(yǔ)言處理是一個(gè)有趣的領(lǐng)域','我們需要更多關(guān)于自然語(yǔ)言處理的研究']#使用默認(rèn)的分詞器,將文本轉(zhuǎn)化為TF-IDF特征vectorizer=TfidfVectorizer()tfidf_matrix=vectorizer.fit_transform(documents)#打印詞匯表和TF-IDF值print("詞匯表:",vectorizer.get_feature_names())print("TF-IDF值:",tfidf_matrix.toarray())代碼實(shí)現(xiàn)TF-IDFfromsklearn.feature_extraction.textimportTfidfVectorizer#原始文本documents=['我愛(ài)自然語(yǔ)言處理','自然語(yǔ)言處理是一個(gè)有趣的領(lǐng)域','我們需要更多關(guān)于自然語(yǔ)言處理的研究']代碼實(shí)現(xiàn)TF-IDF#使用默認(rèn)的分詞器,將文本轉(zhuǎn)化為TF-IDF特征vectorizer=TfidfVectorizer()tfidf_matrix=vectorizer.fit_transform(documents)#打印詞匯表和TF-IDF值print("詞匯表:",vectorizer.get_feature_names())print("TF-IDF值:",tfidf_matrix.toarray())代碼實(shí)現(xiàn)TF-IDF#使用默認(rèn)的分詞器,將文本轉(zhuǎn)化為TF-IDF特征vectorizer=TfidfVectorizer()tfidf_matrix=vectorizer.fit_transform(documents)#打印詞匯表和TF-IDF值print("詞匯表:",vectorizer.get_feature_names())print("TF-IDF值:",tfidf_matrix.toarray())代碼實(shí)現(xiàn)TF-IDFPyTorch是一個(gè)用于實(shí)現(xiàn)深度學(xué)習(xí)模型的庫(kù),而TF-IDF是一種傳統(tǒng)的特征工程技術(shù)。雖然PyTorch主要被用于創(chuàng)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型,但如果想使用PyTorch來(lái)處理TF-IDF,可以用numpy或Scikit-learn計(jì)算TF-IDF后,將其轉(zhuǎn)換為PyTorch張量。代碼實(shí)現(xiàn)TF-IDF#使用默認(rèn)的分詞器,將文本轉(zhuǎn)化為TF-IDF特征vectorizer=TfidfVectorizer()tfidf_matrix=vectorizer.fit_transform(documents)#將Scipy稀疏矩陣轉(zhuǎn)化為PyTorch張量tfidf_tensor=torch.from_numpy(tfidf_matrix.toarray())print("TF-IDF值:",tfidf_tensor)代碼實(shí)現(xiàn)TF-IDF如果文檔集合非常大,那么TF-IDF矩陣可能非常大并且非常稀疏。在這種情況下,你可能需要找到一種方法來(lái)有效地存儲(chǔ)和處理這個(gè)稀疏矩陣。PyTorch提供了一些工具來(lái)處理稀疏張量,但是這通常需要更復(fù)雜的代碼和更多的計(jì)算資源。注意TF-IDF在實(shí)際應(yīng)用中,我們可能需要處理更大的文本集合,可能需要使用自定義的分詞器,可能需要處理各種各樣的問(wèn)題,但基本的思路是相同的:我們希望將文本轉(zhuǎn)化為一種數(shù)值表示,使得我們可以在這個(gè)表示上進(jìn)行機(jī)器學(xué)習(xí)。第三節(jié)

訓(xùn)練、測(cè)試數(shù)據(jù)訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)是用于建立和驗(yàn)證機(jī)器學(xué)習(xí)模型的數(shù)據(jù)。選擇正確的訓(xùn)練和測(cè)試數(shù)據(jù)對(duì)于建立有效的模型是至關(guān)重要的。訓(xùn)練、測(cè)試數(shù)據(jù)的含義第三節(jié)

訓(xùn)練、測(cè)試數(shù)據(jù)訓(xùn)練數(shù)據(jù)是用來(lái)訓(xùn)練機(jī)器學(xué)習(xí)模型的數(shù)據(jù)。模型通過(guò)學(xué)習(xí)訓(xùn)練數(shù)據(jù)中的特征和目標(biāo)變量的關(guān)系,來(lái)理解數(shù)據(jù)的模式和規(guī)律。訓(xùn)練數(shù)據(jù)的含義第三節(jié)

訓(xùn)練、測(cè)試數(shù)據(jù)測(cè)試數(shù)據(jù)是用來(lái)評(píng)估模型性能的數(shù)據(jù)。它提供了一種方式,讓我們能夠評(píng)估模型在未知數(shù)據(jù)上的表現(xiàn)。通過(guò)比較模型在測(cè)試數(shù)據(jù)上的預(yù)測(cè)結(jié)果和實(shí)際結(jié)果,我們可以了解模型的精度,即它的預(yù)測(cè)能力有多好。測(cè)試數(shù)據(jù)的含義這是最常見(jiàn)的劃分方式,通常將原始數(shù)據(jù)按比例(如70%:30%)劃分為訓(xùn)練集和測(cè)試集,訓(xùn)練集用于訓(xùn)練模型,測(cè)試集用于評(píng)估模型。這種方法的缺點(diǎn)是其性能高度依賴于劃分的方式。留出法(HoldoutMethod)方法訓(xùn)練、測(cè)試數(shù)據(jù)

訓(xùn)練、測(cè)試數(shù)據(jù)的分割這是最常見(jiàn)的劃分方式,通常將原始數(shù)據(jù)按比例(如70%:30%)劃分為訓(xùn)練集和測(cè)試集,訓(xùn)練集用于訓(xùn)練模型,測(cè)試集用于評(píng)估模型。這種方法的缺點(diǎn)是其性能高度依賴于劃分的方式。留出法(HoldoutMethod)方法訓(xùn)練、測(cè)試數(shù)據(jù)

交叉驗(yàn)證方法將數(shù)據(jù)集劃分為k個(gè)大小相似的互斥子集,然后每次用k-1個(gè)子集的并集作為訓(xùn)練集,剩下的1個(gè)作為測(cè)試集,這樣就可以得到k組訓(xùn)練/測(cè)試集,從而進(jìn)行k次訓(xùn)練和測(cè)試,最終返回的是這k個(gè)測(cè)試結(jié)果的均值。交叉驗(yàn)證(CrossValidation)訓(xùn)練、測(cè)試數(shù)據(jù)的分割這是最常見(jiàn)的劃分方式,通常將原始數(shù)據(jù)按比例(如70%:30%)劃分為訓(xùn)練集和測(cè)試集,訓(xùn)練集用于訓(xùn)練模型,測(cè)試集用于評(píng)估模型。這種方法的缺點(diǎn)是其性能高度依賴于劃分的方式。留出法(HoldoutMethod)方法訓(xùn)練、測(cè)試數(shù)據(jù)

交叉驗(yàn)證方法將數(shù)據(jù)集劃分為k個(gè)大小相似的互斥子集,然后每次用k-1個(gè)子集的并集作為訓(xùn)練集,剩下的1個(gè)作為測(cè)試集,這樣就可以得到k組訓(xùn)練/測(cè)試集,從而進(jìn)行k次訓(xùn)練和測(cè)試,最終返回的是這k個(gè)測(cè)試結(jié)果的均值。交叉驗(yàn)證(CrossValidation)通過(guò)有放回地進(jìn)行抽樣來(lái)創(chuàng)建新的訓(xùn)練數(shù)據(jù),自助法可以有效地使用數(shù)據(jù),但是它改變了原始數(shù)據(jù)的分布,可能會(huì)引入偏差。自助法(BootstrapMethod)訓(xùn)練、測(cè)試數(shù)據(jù)的分割訓(xùn)練、測(cè)試數(shù)據(jù)在Python中,我們通常使用scikit-learn庫(kù)的train_test_split函數(shù)進(jìn)行訓(xùn)練和測(cè)試數(shù)據(jù)的分割。代碼實(shí)現(xiàn)訓(xùn)練、測(cè)試數(shù)據(jù)fromsklearn.model_selectionimporttrain_test_splitX=...y=...X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,

random_state=42)代碼實(shí)現(xiàn)訓(xùn)練、測(cè)試數(shù)據(jù)fromsklearn.model_selectionimporttrain_test_splitX=...y=...X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,

random_state=42)代碼實(shí)現(xiàn)訓(xùn)練、測(cè)試數(shù)據(jù)fromsklearn.model_selectionimporttrain_test_splitX=...y=...X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,

random_state=42)代碼實(shí)現(xiàn)訓(xùn)練、測(cè)試數(shù)據(jù)在PyTorch中,雖然沒(méi)有直接提供像scikit-learn中的train_test_split這樣的函數(shù),但是我們可以使用PyTorch的Dataset和DataLoader類以及一些Python功能輕松實(shí)現(xiàn)這一點(diǎn)。代碼實(shí)現(xiàn)訓(xùn)練、測(cè)試數(shù)據(jù)fromtorch.utils.dataimportDataset,DataLoader,random_splitclassMyDataset(Dataset):def__init__(self,X,y):self.X=Xself.y=ydef__len__(self):returnlen(self.X)def__getitem__(self,idx):returnself.X[idx],self.y[idx]代碼實(shí)現(xiàn)訓(xùn)練、測(cè)試數(shù)據(jù)fromtorch.utils.dataimportDataset,DataLoader,random_splitclassMyDataset(Dataset):def__init__(self,X,y):self.X=Xself.y=ydef__len__(self):returnlen(self.X)def__getitem__(self,idx):returnself.X[idx],self.y[idx]代碼實(shí)現(xiàn)訓(xùn)練、測(cè)試數(shù)據(jù)#假設(shè)X為特征數(shù)據(jù),y為目標(biāo)數(shù)據(jù)X=...y=...#創(chuàng)建數(shù)據(jù)集dataset=MyDataset(X,y)#定義訓(xùn)練集和測(cè)試集的大小train_size=int(0.8*len(dataset))test_size=len(dataset)-train_size代碼實(shí)現(xiàn)訓(xùn)練、測(cè)試數(shù)據(jù)#分割數(shù)據(jù)集train_dataset,test_dataset=random_split(dataset,[train_size,test_size])#創(chuàng)建數(shù)據(jù)加載器train_loader=DataLoader(train_dataset,batch_size=32,shuffle=True)test_loader=DataLoader(test_dataset,batch_size=32,shuffle=True)代碼實(shí)現(xiàn)訓(xùn)練、測(cè)試數(shù)據(jù)#分割數(shù)據(jù)集train_dataset,test_dataset=random_split(dataset,[train_size,test_size])#創(chuàng)建數(shù)據(jù)加載器train_loader=DataLoader(train_dataset,batch_size=32,shuffle=True)test_loader=DataLoader(test_dataset,batch_size=32,shuffle=True)代碼實(shí)現(xiàn)第四節(jié)

交叉驗(yàn)證交叉驗(yàn)證是一種強(qiáng)大的模型驗(yàn)證技術(shù),它能幫助我們更好地理解模型對(duì)未知數(shù)據(jù)的預(yù)測(cè)性能。在數(shù)據(jù)量不足或希望盡可能減小數(shù)據(jù)分割帶來(lái)的隨機(jī)性影響時(shí),交叉驗(yàn)證尤其有用。交叉驗(yàn)證的含義第四節(jié)

交叉驗(yàn)證交叉驗(yàn)證的基本思想是將數(shù)據(jù)集分為幾個(gè)部分(通常稱為“折”或“折疊”),然后進(jìn)行多輪訓(xùn)練和驗(yàn)證,每輪中,選擇一個(gè)折作為驗(yàn)證數(shù)據(jù),其余折作為訓(xùn)練數(shù)據(jù)。最終模型性能的評(píng)估基于各輪驗(yàn)證結(jié)果的平均值。交叉驗(yàn)證的基本思想這是最常見(jiàn)的交叉驗(yàn)證類型。首先將數(shù)據(jù)集劃分為K個(gè)大小相等的互斥子集,然后進(jìn)行K輪訓(xùn)練和測(cè)試,每輪中用K-1個(gè)子集的并集作為訓(xùn)練集,剩下的那個(gè)子集作為驗(yàn)證集。K-折交叉驗(yàn)證(K-FoldCross

Validation)類型交叉驗(yàn)證

這是最常見(jiàn)的交叉驗(yàn)證類型。首先將數(shù)據(jù)集劃分為K個(gè)大小相等的互斥子集,然后進(jìn)行K輪訓(xùn)練和測(cè)試,每輪中用K-1個(gè)子集的并集作為訓(xùn)練集,剩下的那個(gè)子集作為驗(yàn)證集。K-折交叉驗(yàn)證(K-FoldCross

Validation)類型這是一種極端的情況,K-折交叉驗(yàn)證中K等于樣本數(shù)量。對(duì)于每一輪,選擇一個(gè)樣本作為驗(yàn)證數(shù)據(jù),其余樣本作為訓(xùn)練數(shù)據(jù)。留一交叉驗(yàn)證(Leave-One-OutCross)交叉驗(yàn)證

這是最常見(jiàn)的交叉驗(yàn)證類型。首先將數(shù)據(jù)集劃分為K個(gè)大小相等的互斥子集,然后進(jìn)行K輪訓(xùn)練和測(cè)試,每輪中用K-1個(gè)子集的并集作為訓(xùn)練集,剩下的那個(gè)子集作為驗(yàn)證集。K-折交叉驗(yàn)證(K-FoldCross

Validation)類型這是一種極端的情況,K-折交叉驗(yàn)證中K等于樣本數(shù)量。對(duì)于每一輪,選擇一個(gè)樣本作為驗(yàn)證數(shù)據(jù),其余樣本作為訓(xùn)練數(shù)據(jù)。留一交叉驗(yàn)證(Leave-One-OutCross)每次都隨機(jī)選取訓(xùn)練集和測(cè)試集,可以進(jìn)行多次。隨機(jī)劃分交叉驗(yàn)證(ShuffleSplitCross)交叉驗(yàn)證

第四節(jié)

交叉驗(yàn)證交叉驗(yàn)證的主要優(yōu)點(diǎn)是通過(guò)平均多輪驗(yàn)證的結(jié)果,我們可以獲得模型性能的一個(gè)更準(zhǔn)確的估計(jì)。這減少了評(píng)估結(jié)果的方差,因此模型性能的估計(jì)更可靠。交叉驗(yàn)證的主要缺點(diǎn)是計(jì)算成本較高,因?yàn)樾枰M(jìn)行多次訓(xùn)練和驗(yàn)證。此外,如果數(shù)據(jù)不能很好地劃分,交叉驗(yàn)證可能不是很有效。交叉驗(yàn)證的優(yōu)缺點(diǎn)交叉驗(yàn)證fromsklearn.model_selectionimportcross_val_scorefromsklearn.ensembleimportRandomForestClassifier#假設(shè)X,y是數(shù)據(jù)和標(biāo)簽X=...y=...#創(chuàng)建模型model=RandomForestClassifier()#進(jìn)行5折交叉驗(yàn)證scores=cross_val_score(model,X,y,cv=5)print("交叉驗(yàn)證分?jǐn)?shù):",scores)print("交叉驗(yàn)證平均分?jǐn)?shù):",scores.mean())代碼實(shí)現(xiàn)交叉驗(yàn)證fromsklearn.model_selectionimportcross_val_scorefromsklearn.ensembleimportRandomForestClassifier#假設(shè)X,y是數(shù)據(jù)和標(biāo)簽X=...y=...#創(chuàng)建模型model=RandomForestClassifier()#進(jìn)行5折交叉驗(yàn)證scores=cross_val_score(model,X,y,cv=5)print("交叉驗(yàn)證分?jǐn)?shù):",scores)print("交叉驗(yàn)證平均分?jǐn)?shù):",scores.mean())代碼實(shí)現(xiàn)交叉驗(yàn)證fromsklearn.model_selectionimportcross_val_scorefromsklearn.ensembleimportRandomForestClassifier#假設(shè)X,y是數(shù)據(jù)和標(biāo)簽X=...y=...#創(chuàng)建模型model=RandomForestClassifier()#進(jìn)行5折交叉驗(yàn)證scores=cross_val_score(model,X,y,cv=5)print("交叉驗(yàn)證分?jǐn)?shù):",scores)print("交叉驗(yàn)證平均分?jǐn)?shù):",scores.mean())代碼實(shí)現(xiàn)交叉驗(yàn)證fromsklearn.model_selectionimportcross_val_scorefromsklearn.ensembleimportRandomForestClassifier#假設(shè)X,y是數(shù)據(jù)和標(biāo)簽X=...y=...#創(chuàng)建模型model=RandomForestClassifier()#進(jìn)行5折交叉驗(yàn)證scores=cross_val_score(model,X,y,cv=5)print("交叉驗(yàn)證分?jǐn)?shù):",scores)print("交叉驗(yàn)證平均分?jǐn)?shù):",scores.mean())代碼實(shí)現(xiàn)交叉驗(yàn)證fromsklearn.model_selectionimportcross_val_scorefromsklearn.ensembleimportRandomForestClassifier#假設(shè)X,y是數(shù)據(jù)和標(biāo)簽X=...y=...#創(chuàng)建模型model=RandomForestClassifier()#進(jìn)行5折交叉驗(yàn)證scores=cross_val_score(model,X,y,cv=5)print("交叉驗(yàn)證分?jǐn)?shù):",scores)print("交叉驗(yàn)證平均分?jǐn)?shù):",scores.mean())代碼實(shí)現(xiàn)交叉驗(yàn)證fromsklearn.model_selectionimportcross_val_scorefromsklearn.ensembleimportRandomForestClassifier#假設(shè)X,y是數(shù)據(jù)和標(biāo)簽X=...y=...#創(chuàng)建模型model=RandomForestClassifier()#進(jìn)行5折交叉驗(yàn)證scores=cross_val_score(model,X,y,cv=5)print("交叉驗(yàn)證分?jǐn)?shù):",scores)print("交叉驗(yàn)證平均分?jǐn)?shù):",scores.mean())代碼實(shí)現(xiàn)交叉驗(yàn)證代碼實(shí)現(xiàn)在PyTorch中,實(shí)現(xiàn)交叉驗(yàn)證需要一些手動(dòng)操作,因?yàn)镻yTorch并沒(méi)有像scikit-learn那樣的內(nèi)置交叉驗(yàn)證函數(shù)。然而,通過(guò)使用數(shù)據(jù)集劃分和數(shù)據(jù)加載器,我們可以相對(duì)容易地實(shí)現(xiàn)。交叉驗(yàn)證fromtorch.utils.dataimportDataset,DataLoader,random_splitfromsklearn.model_selectionimportKFoldimporttorch.optimasoptimimporttorch.nnasnn#假設(shè)我們有以下數(shù)據(jù)和模型X=...y=...model=...#定義損失函數(shù)和優(yōu)化器criterion=nn.CrossEntropyLoss()optimizer=optim.SGD(model.parameters(),lr=0.001,momentum=0.9)代碼實(shí)現(xiàn)交叉驗(yàn)證fromtorch.utils.dataimportDataset,DataLoader,random_splitfromsklearn.model_selectionimportKFoldimporttorch.optimasoptimimporttorch.nnasnn#假設(shè)我們有以下數(shù)據(jù)和模型X=...y=...model=...#定義損失函數(shù)和優(yōu)化器criterion=nn.CrossEntropyLoss()optimizer=optim.SGD(model.parameters(),lr=0.001,momentum=0.9)代碼實(shí)現(xiàn)交叉驗(yàn)證fromtorch.utils.dataimportDataset,DataLoader,random_splitfromsklearn.model_selectionimportKFoldimporttorch.optimasoptimimporttorch.nnasnn#假設(shè)我們有以下數(shù)據(jù)和模型X=...y=...model=...#定義損失函數(shù)和優(yōu)化器criterion=nn.CrossEntropyLoss()optimizer=optim.SGD(model.parameters(),lr=0.001,momentum=0.9)代碼實(shí)現(xiàn)交叉驗(yàn)證#定義k折數(shù)k_folds=5#定義k折交叉驗(yàn)證對(duì)象kfold=KFold(n_splits=k_folds,shuffle=True)#開(kāi)始交叉驗(yàn)證forfold,(train_ids,test_ids)inenumerate(kfold.split(dataset)):#打印當(dāng)前折數(shù)print(f'FOLD{fold}')print('--------------------------------')代碼實(shí)現(xiàn)交叉驗(yàn)證#定義k折數(shù)k_folds=5#定義k折交叉驗(yàn)證對(duì)象kfold=KFold(n_splits=k_folds,shuffle=True)#開(kāi)始交叉驗(yàn)證forfold,(train_ids,test_ids)inenumerate(kfold.split(dataset)):#打印當(dāng)前折數(shù)print(f'FOLD{fold}')print('--------------------------------')代碼實(shí)現(xiàn)交叉驗(yàn)證#定義訓(xùn)練和驗(yàn)證數(shù)據(jù)子集train_subsampler=torch.utils.data.SubsetRandomSampler(train_ids)test_subsampler=torch.utils.data.SubsetRandomSampler(test_ids)#定義數(shù)據(jù)加載器train_loader=torch.utils.data.DataLoader(dataset,batch_size=10,sampler=train_subsampler)test_loader=torch.utils.data.DataLoader(dataset,batch_size=10,sampler=test_subsampler)#初始化模型和優(yōu)化器model=...optimizer=...代碼實(shí)現(xiàn)交叉驗(yàn)證#定義訓(xùn)練和驗(yàn)證數(shù)據(jù)子集train_subsampler=torch.utils.data.SubsetRandomSampler(train_ids)test_subsampler=torch.utils.data.SubsetRandomSampler(test_ids)#定義數(shù)據(jù)加載器train_loader=torch.utils.data.DataLoader(dataset,batch_size=10,sampler=train_subsampler)test_loader=torch.utils.data.DataLoader(dataset,batch_size=10,sampler=test_subsampler)#初始化模型和優(yōu)化器model=...optimizer=...代碼實(shí)現(xiàn)交叉驗(yàn)證#訓(xùn)練過(guò)程...forepochinrange(0,num_epochs):#在訓(xùn)練集上進(jìn)行訓(xùn)練model.train()train_loss=0.0fori,datainenumerate(train_loader,0):

inputs,targets=data

optimizer.zero_grad()outputs=model(inputs)loss=criterion(outputs,targets)loss.backward()optimizer.step()train_loss+=loss.item()代碼實(shí)現(xiàn)交叉驗(yàn)證#在驗(yàn)證集上進(jìn)行驗(yàn)證model.eval()valid_loss=0.0fori,datainenumerate(test_loader,0):inputs,targets=dataoutputs=model(inputs)loss=criterion(outputs,targets)valid_loss+=loss.item()#打印訓(xùn)練和驗(yàn)證損失print('Epoch:%d,TrainingLoss:%.2f,ValidationLoss:%.2f'%(epoch,train_loss/len(train_loader),valid_loss/len(test_loader)))代碼實(shí)現(xiàn)交叉驗(yàn)證#在驗(yàn)證集上進(jìn)行驗(yàn)證model.eval()valid_loss=0.0fori,datainenumerate(test_loader,0):inputs,targets=dataoutputs=model(inputs)loss=criterion(outputs,targets)valid_loss+=loss.item()#打印訓(xùn)練和驗(yàn)證損失print('Epoch:%d,TrainingLoss:%.2f,ValidationLoss:%.2f'%(epoch,train_loss/len(train_loader),valid_loss/len(test_loader)))代碼實(shí)現(xiàn)第五節(jié)

過(guò)擬合過(guò)擬合是在機(jī)器學(xué)習(xí)中非常重要的一個(gè)概念,它發(fā)生在模型在訓(xùn)練數(shù)據(jù)上的表現(xiàn)很好,但在新的、未見(jiàn)過(guò)的數(shù)據(jù)上的表現(xiàn)卻很差的情況下。過(guò)擬合通常是由于模型過(guò)于復(fù)雜,而導(dǎo)致的。模型可能會(huì)“記住”訓(xùn)練數(shù)據(jù)中的噪聲和異常值,而不是學(xué)習(xí)其潛在的趨勢(shì)和模式。因此,當(dāng)模型面對(duì)新的數(shù)據(jù)時(shí),它可能無(wú)法準(zhǔn)確地進(jìn)行預(yù)測(cè)。過(guò)擬合的含義第五節(jié)

過(guò)擬合過(guò)擬合的一個(gè)主要標(biāo)志是模型在訓(xùn)練數(shù)據(jù)上的表現(xiàn)明顯好于在驗(yàn)證數(shù)據(jù)上的表現(xiàn)。如果你看到你的模型在訓(xùn)練數(shù)據(jù)上的損失隨著時(shí)間的推移持續(xù)降低,但在驗(yàn)證數(shù)據(jù)上的損失卻開(kāi)始上升,那么你可能遇到了過(guò)擬合。過(guò)擬合的含義文本分類任務(wù)中有很多使用場(chǎng)景,如新聞文本分類、評(píng)論情感分類。自動(dòng)新聞文本分類任務(wù)是以新聞報(bào)道中的文本描述內(nèi)容為輸入,使用模型幫助我們判斷它最有可能屬于哪一種類型的新聞。評(píng)論文本情感分類任務(wù)中,我們要構(gòu)建一個(gè)能夠分析社交媒體評(píng)論并進(jìn)行情感分類的模型。學(xué)習(xí)場(chǎng)景第五節(jié)

過(guò)擬合在文本分類問(wèn)題中,過(guò)擬合可能會(huì)發(fā)生在我們的模型過(guò)于復(fù)雜,或者訓(xùn)練數(shù)據(jù)太少的情況下。例如,如果我們的模型試圖學(xué)習(xí)訓(xùn)練集中每個(gè)單詞的特定出現(xiàn),而沒(méi)有學(xué)習(xí)到單詞之間的更廣泛的模式,那么它可能在未見(jiàn)過(guò)的數(shù)據(jù)上表現(xiàn)不佳。過(guò)擬合的場(chǎng)景第五節(jié)

過(guò)擬合如何防止過(guò)擬合?第五節(jié)

過(guò)擬合使用更簡(jiǎn)單的模型過(guò)于復(fù)雜的模型更容易過(guò)擬合。通過(guò)選擇一個(gè)更簡(jiǎn)單的模型(即具有更少參數(shù)或較小容量的模型),可以降低過(guò)擬合的風(fēng)險(xiǎn)。第五節(jié)

過(guò)擬合使用更簡(jiǎn)單的模型過(guò)于復(fù)雜的模型更容易過(guò)擬合。通過(guò)選擇一個(gè)更簡(jiǎn)單的模型(即具有更少參數(shù)或較小容量的模型),可以降低過(guò)擬合的風(fēng)險(xiǎn)。提供更多的訓(xùn)練數(shù)據(jù)模型在更大的數(shù)據(jù)集上訓(xùn)練,能夠更好地學(xué)習(xí)數(shù)據(jù)中的趨勢(shì),而不是噪聲。第五節(jié)

過(guò)擬合使用更簡(jiǎn)單的模型過(guò)于復(fù)雜的模型更容易過(guò)擬合。通過(guò)選擇一個(gè)更簡(jiǎn)單的模型(即具有更少參數(shù)或較小容量的模型),可以降低過(guò)擬合的風(fēng)險(xiǎn)。提供更多的訓(xùn)練數(shù)據(jù)模型在更大的數(shù)據(jù)集上訓(xùn)練,能夠更好地學(xué)習(xí)數(shù)據(jù)中的趨勢(shì),而不是噪聲。正則化正則化是一種約束模型復(fù)雜度的技術(shù)。它在模型的損失函數(shù)中添加一個(gè)項(xiàng),用來(lái)懲罰模型的復(fù)雜度。最常見(jiàn)的正則化形式包括L1正則化和L2正則化。第五節(jié)

過(guò)擬合使用更簡(jiǎn)單的模型過(guò)于復(fù)雜的模型更容易過(guò)擬合。通過(guò)選擇一個(gè)更簡(jiǎn)單的模型(即具有更少參數(shù)或較小容量的模型),可以降低過(guò)擬合的風(fēng)險(xiǎn)。提供更多的訓(xùn)練數(shù)據(jù)模型在更大的數(shù)據(jù)集上訓(xùn)練,能夠更好地學(xué)習(xí)數(shù)據(jù)中的趨勢(shì),而不是噪聲。正則化正則化是一種約束模型復(fù)雜度的技術(shù)。它在模型的損失函數(shù)中添加一個(gè)項(xiàng),用來(lái)懲罰模型的復(fù)雜度。最常見(jiàn)的正則化形式包括L1正則化和L2正則化。早停在訓(xùn)練過(guò)程中,一旦發(fā)現(xiàn)模型在驗(yàn)證集上的性能開(kāi)始下降,就停止訓(xùn)練。第五節(jié)

過(guò)擬合使用更簡(jiǎn)單的模型過(guò)于復(fù)雜的模型更容易過(guò)擬合。通過(guò)選擇一個(gè)更簡(jiǎn)單的模型(即具有更少參數(shù)或較小容量的模型),可以降低過(guò)擬合的風(fēng)險(xiǎn)。提供更多的訓(xùn)練數(shù)據(jù)模型在更大的數(shù)據(jù)集上訓(xùn)練,能夠更好地學(xué)習(xí)數(shù)據(jù)中的趨勢(shì),而不是噪聲。正則化正則化是一種約束模型復(fù)雜度的技術(shù)。它在模型的損失函數(shù)中添加一個(gè)項(xiàng),用來(lái)懲罰模型的復(fù)雜度。最常見(jiàn)的正則化形式包括L1正則化和L2正則化。早停在訓(xùn)練過(guò)程中,一旦發(fā)現(xiàn)模型在驗(yàn)證集上的性能開(kāi)始下降,就停止訓(xùn)練。DropoutDropout是神經(jīng)網(wǎng)絡(luò)中防止過(guò)擬合的常用技術(shù)。它在訓(xùn)練過(guò)程中隨機(jī)丟棄一部分神經(jīng)元,以減少模型的復(fù)雜性。第五節(jié)

過(guò)擬合#定義模型classTextClassifier(nn.Module):def__init__(self,vocab_size,embed_dim,num_class):super().__init__()self.embedding=nn.EmbeddingBag(vocab_size,embed_dim,

sparse=True)

self.fc=nn.Linear(embed_dim,num_class)self.dropout=nn.Dropout(0.5)#添加Dropout層

defforward(self,text):embedded=self.dropout(self.embedding(text))

#在嵌入后應(yīng)用Dropoutreturnself.fc(embedded)代碼實(shí)現(xiàn)第五節(jié)

過(guò)擬合#創(chuàng)建模型model=TextClassifier(vocab_size,embed_dim,num_class)#創(chuàng)建優(yōu)化器,添加L2正則化(權(quán)重衰減)optimizer=optim.SGD(model.parameters(),lr=0.01,weight_decay=0.01)#定義損失函數(shù)criterion=nn.CrossEntropyLoss()#訓(xùn)練模型...代碼實(shí)現(xiàn)第五節(jié)

過(guò)擬合第六節(jié)

實(shí)踐任務(wù)-新聞主題分類本章的實(shí)踐任務(wù)是關(guān)于新聞主題的分類,以一段新聞報(bào)道中的文本描述內(nèi)容為輸入,使用模型幫助我們判斷它最有可能屬于哪一種類型的新聞,這是典型的文本分類問(wèn)題,我們這里假定每種類型是互斥的,即文本描述有且只有一種類型。實(shí)踐任務(wù)第六節(jié)

實(shí)踐任務(wù)-新聞主題分類AG_NEWS數(shù)據(jù)集是一個(gè)包含了100多萬(wàn)篇文章的集合。學(xué)術(shù)社區(qū)為了數(shù)據(jù)挖掘、信息檢索、數(shù)據(jù)壓縮等方面的學(xué)術(shù)研究整理了這個(gè)數(shù)據(jù)集。AG_NEWS數(shù)據(jù)集有4個(gè)標(biāo)簽,即模型中的數(shù)據(jù)分類數(shù)量為4,這4個(gè)標(biāo)簽為:World、Sports、Business和Sci/Tec。Torchtext庫(kù)提供了一些原始數(shù)據(jù)迭代器,這些迭代器可以查看原始的字符串?dāng)?shù)據(jù)。例如,AG_NEWS數(shù)據(jù)集迭代器可以生成包含文本和標(biāo)簽的元組。實(shí)踐1數(shù)據(jù)處理importtorchfromtorchtext.datasetsimportAG_NEWStrain_iter=iter(AG_NEWS(split='train'))print(next(train_iter))代碼實(shí)現(xiàn)實(shí)踐任務(wù)1-數(shù)據(jù)處理【結(jié)果】(3,"WallSt.BearsClawBackIntotheBlack(Reuters)Reuters-Short-sellers,WallStreet'sdwindling\\bandofultra-cynics,areseeinggreen

again.")實(shí)踐任務(wù)1-數(shù)據(jù)處理tokenizer=get_tokenizer('basic_english') train_iter=AG_NEWS(split='train') #分詞生成器defyield_tokens(data_iter):for_,textindata_iter:yieldtokenizer(text)vocab=build_vocab_from_iterator(yield_tokens(train_iter),specials=["<unk>"])vocab.set_default_index(vocab["<unk>"])print(vocab(['here','is','an','example']))

#結(jié)果:[475,21,30,5297]代碼實(shí)現(xiàn)實(shí)踐任務(wù)1-數(shù)據(jù)處理tokenizer=get_tokenizer('basic_english') train_iter=AG_NEWS(split='train') #分詞生成器defyield_tokens(data_iter):for_,textindata_iter:yieldtokenizer(text)vocab=build_vocab_from_iterator(yield_tokens(train_iter),specials=["<unk>"])vocab.set_default_index(vocab["<unk>"])print(vocab(['here','is','an','example']))

#結(jié)果:[475,21,30,5297]代碼實(shí)現(xiàn)實(shí)踐任務(wù)1-數(shù)據(jù)處理tokenizer=get_tokenizer('basic_english') train_iter=AG_NEWS(split='train') #分詞生成器defyield_tokens(data_iter):for_,textindata_iter:yieldtokenizer(text)vocab=build_vocab_from_iterator(yield_tokens(train_iter),specials=["<unk>"])vocab.set_default_index(vocab["<unk>"])print(vocab(['here','is','an','example']))

#結(jié)果:[475,21,30,5297]代碼實(shí)現(xiàn)實(shí)踐任務(wù)1-數(shù)據(jù)處理tokenizer=get_tokenizer('basic_english') train_iter=AG_NEWS(split='train') #分詞生成器defyield_tokens(data_iter):for_,textindata_iter:yieldtokenizer(text)vocab=build_vocab_from_iterator(yield_tokens(train_iter),specials=["<unk>"])vocab.set_default_index(vocab["<unk>"])print(vocab(['here','is','an','example']))

#結(jié)果:[475,21,30,5297]代碼實(shí)現(xiàn)實(shí)踐任務(wù)1-數(shù)據(jù)處理tokenizer=get_tokenizer('basic_english') train_iter=AG_NEWS(split='train') #分詞生成器defyield_tokens(data_iter):for_,textindata_iter:yieldtokenizer(text)vocab=build_vocab_from_iterator(yield_tokens(train_iter),specials=["<unk>"])vocab.set_default_index(vocab["<unk>"])print(vocab(['here','is','an','example']))

#結(jié)果:[475,21,30,5297]代碼實(shí)現(xiàn)實(shí)踐任務(wù)1-數(shù)據(jù)處理tokenizer=get_tokenizer('basic_english') train_iter=AG_NEWS(split='train') #分詞生成器defyield_tokens(data_iter):for_,textindata_iter:yieldtokenizer(text)vocab=build_vocab_from_iterator(yield_tokens(train_iter),specials=["<unk>"])vocab.set_default_index(vocab["<unk>"])print(vocab(['here','is','an','example']))

#結(jié)果:[475,21,30,5297]代碼實(shí)現(xiàn)實(shí)踐任務(wù)-新聞主題分類文本分類模型是由PyTorch庫(kù)中的nn.EmbeddingBag層和一個(gè)用于分類的線性連接層組成。nn.EmbeddingBag在默認(rèn)狀態(tài)下計(jì)算所有詞向量的平均值。雖然,文本文章由不同的長(zhǎng)度,但是nn.EmbeddingBag模型不需要填充,因?yàn)槲谋镜拈L(zhǎng)度保存在偏移量中了。實(shí)踐2模型搭建實(shí)踐任務(wù)-新聞主題分類classTextClassificationModel(nn.Module):def__init__(self,vocab_size,embed_dim,num_class):super(TextClassificationModel,self).__init__()self.embedding=nn.EmbeddingBag(vocab_size,embed_dim,sparse=True)self.fc=nn.Linear(embed_dim,num_class)self.init_weights()definit_weights(self):initrange=0.5self.embedding.weight.data.uniform_(-initrange,initrange)self.fc.weight.data.uniform_(-initrange,initrange)self.fc.bias.data.zero_()代碼實(shí)現(xiàn)實(shí)踐任務(wù)-新聞主題分類classTextClassificationModel(nn.Module):def__init__(self,vocab_size,embed_dim,num_class):super(TextClassificationModel,self).__init__()self.embedding=nn.EmbeddingBag(vocab_size,embed_dim,sparse=True)self.fc=nn.Linear(embed_dim,num_class)self.init_weights()definit_weights(self):initrange=0.5self.embedding.weight.data.uniform_(-initrange,initrange)self.fc.weight.data.uniform_(-initrange,initrange)self.fc.bias.data.zero_()代碼實(shí)現(xiàn)實(shí)踐任務(wù)-新聞主題分類classTextClassificationModel(nn.Module):def__init__(self,vocab_size,embed_dim,num_class):super(TextClassificationModel,self).__init__()self.embedding=nn.EmbeddingBag(vocab_size,embed_dim,sparse=True)self.fc=nn.Linear(embed_dim,num_class)self.init_weights()definit_weights(self):initrange=0.5self.embedding.weight.data.uniform_(-initrange,initrange)self.fc.weight.data.uniform_(-initrange,initrange)self.fc.bias.data.zero_()代碼實(shí)現(xiàn)實(shí)踐任務(wù)-新聞主題分類defforward(self,text,offsets):embedded=self.embedding(text,offsets)returnself.fc(embedded)deftrain(dataloader):model.train()total_acc,total_count=0,0log_interval=500start_time=time.time()代碼實(shí)現(xiàn)實(shí)踐任務(wù)-新聞主題分類defforward(self,text,offsets):embedded=self.embedding(text,offsets)returnself.fc(embedded)deftrain(dataloader):model.train()total_acc,total_count=0,0log_interval=500start_time=time.time()代碼實(shí)現(xiàn)實(shí)踐任務(wù)-新聞主題分類foridx,(label,text,offsets)inenumerate(dataloader):optimizer.zero_grad()predicted_label=model(text,offsets)loss=criterion(predicted_label,label)loss.backward()torch.nn.utils.clip_grad_norm_(model.parameters(),0.1)optimizer.step()total_acc+=(predicted_label.argmax(1)==label).sum().item()total_count+=

label.size(0)ifidx%log_interval==0andidx>0:elapsed=time.time()-start_timeprint('|epoch{:3d}|{:5d}/{:5d}batches''|accuracy{:8.3f}'.format(epoch,idx,len(dataloader),total_acc/total_count))total_acc,total_count=0,0start_time=time.time()代碼實(shí)現(xiàn)實(shí)踐任務(wù)-新聞主題分類foridx,(label,text,offsets)inenumerate(dataloader):optimizer.zero_grad()predicted_label=model(text,offsets)loss=criterion(predicted_label,label)loss.backward()torch.nn.utils.clip_grad_norm_(model.parameters(),0.1)optimizer.step()total_acc+=(predicted_label.argmax(1)==label).sum().item()total_count+=

label.size(0)ifidx%log_interval==0andidx>0:elapsed=time.time()-start_timeprint('|epoch{:3d}|{:5d}/{:5d}batches''|accuracy{:8.3f}'.format(epoch,idx,len(dataloader),total_acc/total_count))total_acc,total_count=0,0start_time=time.time()代碼實(shí)現(xiàn)實(shí)踐任務(wù)-新聞主題分類foridx,(label,text,offsets)inenumerate(dataloader):optimizer.zero_grad()predicted_label=model(text,offsets)loss=criterion(predicted_label,label)loss.backward()torch.nn.utils.clip_grad_norm_(model.parameters(),0.1)optimizer.step()total_acc+=(predicted_label.argmax(1)==label).sum().item()total_count+=

label.size(0)ifidx%log_interval==0andidx>0:elapsed=time.time()-start_timeprint('|epoch{:3d}|{:5d}/{:5d}batches''|accuracy{:8.3f}'.format(epoch,idx,len(dataloader),total_acc/total_count))total_acc,total_count=0,0start_time=time.time()代碼實(shí)現(xiàn)實(shí)踐任務(wù)-新聞主題分類foridx,(label,text,offsets)inenumerate(dataloader):optimizer.zero_grad()predicted_label=model(text,offsets)loss=criterion(predicted_label,label)loss.backward()torch.nn.utils.clip_grad_norm_(model.parameters(),0.1)optimizer.step()total_acc+=(predicted_label.argmax(1)==label).sum().item()total_count+=

label.size(0)ifidx%log_interval==0andidx>0:elapsed=time.time()-start_timeprint('|epoch{:3d}|{:5d}/{:5d}batches''|accuracy{:8.3f}'.format(epoch,idx,len(dataloader),total_acc/total_count))total_acc,total_count=0,0start_time=time.time()代碼實(shí)現(xiàn)實(shí)踐任務(wù)-新聞主題分類foridx,(label,text,offsets)inenumerate(dataloader):optimizer.zero_grad()predicted_label=model(text,offsets)loss=criterion(predicted_label,label)loss.backward()torch.nn.utils.clip_grad_norm_(model.parameters(),0.1)optimizer.step()total_acc+=(predicted_label.argmax(1)==label).sum().item()total_count+=

label.size(0)ifidx%log_interval==0andidx>0:elapsed=time.time()-start_timeprint('|epoch{:3d}|{:5d}/{:5d}batches''|accuracy{:8.3f}'.format(epoch,idx,len(dataloader),total_acc/total_count))total_acc,total_count=0,0start_time=time.time()代碼實(shí)現(xiàn)實(shí)踐任務(wù)-新聞主題分類foridx,(label,text,offsets)inenumerate(dataloader):optimizer.zero_grad()predicted_label=model(text,offsets)loss=criterion(predicted_label,label)loss.backward()torch.nn.utils.clip_grad_norm_(model.parameters(),0.1)optimizer.step()total_acc+=(predicted_label.argmax(1)==label).sum().item()total_count+=

label.size(0)ifidx%log_interval==0andidx>0:elapsed=time.time()-start_timeprint('|epoch{:3d}|{:5d}/{:5d}batches''|accuracy{:8.3f}'.format(epoch,idx,len(dataloader),total_acc/total_count))total_acc,total_count=0,0start_time=time.time()代碼實(shí)現(xiàn)實(shí)踐任務(wù)-新聞主題分類foridx,(label,text,offsets)inenumerate(dataloader):optimizer.zero_grad()predicted_label=model(text,offsets)loss=criterion(predicted_label,label)loss.backward()torch.nn.utils.clip_grad_norm_(model.parameters(),0.1)optimizer.step()total_acc+=(predicted_label.argmax(1)==label).sum().item()total_count+=

label.size(0)ifidx%log_interval==0andidx>0:elapsed=time.time()-start_timeprint('|epoch{:3d}|{:5d}/{:5d}batches''|accuracy{:8.3f}'.format(epoch,idx,len(dataloader),total_acc/total_count))total_acc,total_count=0,0start_time=time.time()代碼實(shí)現(xiàn)實(shí)踐任務(wù)-新聞主題分類defevaluate(dataloader):model.eval()total_acc,total_count=0,0withtorch.no_grad():foridx,(label,text,offsets)inenumerate(dataloader):predicted_label=model(text,offsets)loss=criterion(predicted_label,label)total_acc+=(predicted_label.argmax(1)==label).sum().item()total_count+=label.size(0)returntotal_acc/total_count實(shí)踐任務(wù)-新聞主題分類defevaluate(dataloader):model.eval()total_acc,total_count=0,0withtorch.no_grad():foridx,(label,text,offsets)inenumerate(dataloader):predicted_label=model(text,offsets)loss=criterion(predicted_label,label)total_acc+=(predicted_label.argmax(1)==label).sum().item()total_count+=label.size(0)returntotal_acc/total_count實(shí)踐任務(wù)-新聞主題分類defevaluate(dataloader):model.eval()total_acc,total_count=0,0withtorch.no_grad():foridx,(label,text,offsets)inenumerate(dataloader):predicted_label=model(text,offsets)loss=criterion(predicted_label,label)total_acc+=(predicted_label.argmax(1)==label).sum().item()total_count+=label.size(0)returntotal_acc/total_count實(shí)踐任務(wù)-新聞主題分類因?yàn)樵嫉腁G_NEWS沒(méi)有測(cè)試數(shù)據(jù)

溫馨提示

  • 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)論