model=nn.sequential(
nn.linear(
7139,10
),#實現從輸入層到隱含層的線性對映
nn.relu(),
#在隱含層的非線性部分,是非線性啟用函式
nn.linear(10,
2),#實現從隱含層到輸出層的線性對映
nn.logsoftmax(dim=1)
,#用於輸出分類的softmax函式,輸出值是概率值,取最大的值
}
3.資料處理和訓練
為了防止過擬合,我們將資料分成了訓練集(training)、驗證集(validation)、測試集(test)
訓練集訓練資料
驗證機集調整超引數,以判斷是否要停止訓練
測試集對模型進行測試,評判模型的好壞
cost=torch.nn.nllloss(
)#損失函式為交叉熵
#優化演算法是adam,可以自動調節學習率
optimizer=torch.optim.adam(model.parameter(
),lr=
0.01
)#定義迴圈訓練 迴圈10個epoch
records=
losses=
for epoch in
range(10
):for i,data in
enumerate
(zip
(train_data, train_label)):
#在每乙個epoch中對資料進行分批次迴圈
x,y=data#讀入乙個batch的資料
#調整為標準的資料格式
x=variable(torch.floattensor(x)
,view(1,
-1))
y=variable(torch.longtensor(np.array(
[y])))
optimizer.zero_grad(
)#清空優化器的梯度
predict=model(x)
#模型**
loss=cost(predict,y)
#計算損失函式)[
0])#將損失函式的數值加入到列表中
loss.backward(
)#開始進行梯度反向傳播
optimizer.step(
)#開始對引數進行進一步優化
if i%
3000==0
: val_losses=
rights=
#在驗證集上實驗
for j, val in
enumerate
(zip
(valid_data,valid_label)):
x,y=val
x=variable(torch.floattensor(x)
,view(1,
-1))
y=variable(torch.longtensor(np.array(
[y])))
predict=model(x)
#呼叫rightness函式計算準確度
right=rightness(predict,y)
loss=cost(predict,y))[
0])#將驗證集上的平均準確度計算出來
right_radio=
1.0*np.
sum(
[i[0
]for i in rights]
)/np.
sum(
[i[1
]for i in rights]
)print
('第{}輪,訓練損失:,驗證損失:,驗證準確率:'
.format
(epoch,np.mean(losses)
,np.
[np.mean(
),np.mean(val_losses)
,right_ratio]
)
文字分類 libsvm
關於 libsvm 的介紹以及相關 網上很多,感興趣可以找找。這是libsvm 這裡主要是針對之前學習過的幾種特徵篩選演算法用 libsvm 進行比較。採用搜狗實驗室的資料,選擇商業類文字 1001 篇,娛樂類文字 1208 篇,測試集 29904 篇。分別採用文件頻次,卡方分布,互資訊,資訊增益來...
文字分類四
下面是使用knn演算法來做的。資料均是由前面的程式生成的。做完這個之後,就是將每一步整合起來。然後再盡可能的優化,使得程式效率更好。然後可以嘗試不同的特徵選擇演算法和分類演算法,當然最後要是能有自己的一些小小改進就好了。不過至少有了乙個還可以的結果了。include include include ...
文字分類概論
通過新增特定規則做分類任務,費時費力,覆蓋的範圍和準確率都非常有限。維護停用詞表 包括高頻的代詞連詞介詞等 特徵提取過程中刪除停用表 現的詞等 1.詞袋模型 one hot編碼 缺點 高緯度 高稀疏 無法編碼上下文的關聯資訊,無法表達語義資訊。2.向量空間模型 通過特徵選擇降低維度,特徵權重計算增加...