Pyorch實戰 分類時尚物品

2021-10-21 06:32:36 字數 4090 閱讀 8953

###本篇是pytorch實戰,根據子豪兄的教程及**學習

# 資料預處理:標準化影象資料,使得灰度資料在-1到+1之間

transform = transforms.compose(

[transforms.totensor(

),transforms.normalize(

(0.5,)

,(0.5,))

])trainset = datasets.fashionmnist(

'dataset/'

, download=

true

, train=

true

, transform=transform)

trainloader = torch.utils.data.dataloader(trainset, batch_size=

64, shuffle=

true

)testset = datasets.fashionmnist(

'dataset/'

, download=

true

, train=

false

, transform=transform)

testloader = torch.utils.data.dataloader(testset, batch_size=

64, shuffle=

true

)

神經網路的輸入為28 * 28 = 784 個畫素

第乙個隱含層包含256個神經元

第二個隱含層包含128個神經元

第三個隱含層包含64個神經元

輸出層輸出10個結果,對應的10種分類

)#softmax函式進行是個種類的分類

x = f.log_softmax(self.fc4(x)

, dim=1)

return x

# 對上面定義的classifier類進行例項化

model = classifier(

)# 定義損失函式為負對數損失函式 目的:使得損失函式最小

criterion = nn.nllloss(

)# 優化方法為 adam梯度下降 方法,學習率為0.003

optimizer = optim.adam(model.parameters(

), lr=

0.003

)# 對訓練集的全部資料學習 15 遍,這個數字越大,訓練時間越長

epochs =

15# 將每次訓練的訓練誤差和測試誤差儲存在這兩個列表裡,後面繪製誤差變化折線圖用

train_losses, test_losses =

,print

('開始訓練'

)for e in

range

(epochs)

: running_loss =

0# 對訓練集中的所有都過一遍

for images, labels in trainloader:

# 將優化器中的求導結果都設為0,否則會在每次反向傳播之後疊加之前的

optimizer.zero_grad(

)# 對64張進行推斷,計算損失函式,反向傳播優化權重,將損失求和

log_ps = model(images)

loss = criterion(log_ps, labels)

loss.backward(

) optimizer.step(

) running_loss += loss.item(

)# 誤差相加

# 每次學完一遍資料集,都進行以下測試操作

else

: test_loss =

0 accuracy =

0# 測試的時候不需要開自動求導和反向傳播

with torch.no_grad():

# 關閉dropout

model.

eval()

# 對測試集中的所有都過一遍

for images, labels in testloader:

# 對傳入的測試集進行正向推斷、計算損失,accuracy為測試集一萬張中模型**正確率

log_ps = model(images)

test_loss += criterion(log_ps, labels)

ps = torch.exp(log_ps)

top_p, top_class = ps.topk(

1, dim=1)

equals = top_class == labels.view(

*top_class.shape)

# 等號右邊為每一批64張測試中**正確的佔比

accuracy += torch.mean(equals.

type

(torch.floattensor)

)# 恢復dropout

model.train(

)# 將訓練誤差和測試誤差存在兩個列表裡,後面繪製誤差變化折線圖用

len(trainloader)

)len

(testloader)

)print

("訓練集學習次數: {}/{}.. "

.format

(e+1

, epochs)

,"訓練誤差: .. "

.format

(running_loss/

len(trainloader)),

"測試誤差: .. "

.format

(test_loss/

len(testloader)),

"模型分類準確率: "

.format

(accuracy/

len(testloader)

))

# 構造dropout方法,在每次訓練過程中都隨機「掐死」百分之二十的神經元,防止過擬合。

self.dropout = nn.dropout(p=

0.2)

defforward

(self, x)

:# 確保輸入的tensor是展開的單列資料,把每張的通道、長度、寬度三個維度都壓縮為一列

x = x.view(x.shape[0]

,-1)

# 在訓練過程中對隱含層神經元的正向推斷使用dropout方法

x = self.dropout(f.relu(self.fc1(x)))

x = self.dropout(f.relu(self.fc2(x)))

x = self.dropout(f.relu(self.fc3(x)

))

斯特林數物品分類

問題描述 對於n個不同的物品分成k個非空集合,求分類方案數。對於這種分類的方法,可以採用斯特林數的方法來解決。下面說下第二類斯特林數 dp i j dp i 1 j 1 j dp i 1 j 這個問題可以看成 1,n 1個物品分成了k 1集合,那麼還有最後乙個物品就只能在最後乙個集合中 2,n 1個...

鳶尾花資料分類實戰

資料集大概是這樣子的 將資料預處理一下 def get data loc iris.csv with open loc,r as fr lines csv.reader fr data file np.array list lines data data file 1 0 1 astype floa...

機器學習實戰學習筆記 分類

k 近鄰演算法 優點 精度高 對異常值不敏感 無資料輸入假定 簡單有效 缺點 計算複雜度高 空間複雜度高 非常耗時 關鍵 對訓練集到資料向量的距離進行排序,選出到資料向量最近的k個訓練集向量,然後對k個向量標籤出現的次數進行排序,出現次數最多的就是資料向量的 標籤 備註 需要對各特徵進行歸一化 決策...