pytorch二分類 視覺化

2021-09-29 05:22:32 字數 3343 閱讀 2500

110865833

trick:純demo,心在**,結果就在那裡

trick:一年沒用torch我都以為自己忘了,要什麼功能只能現查了,現在的目標是主tf2.x和keras,會用tf1.x

# -*- coding: utf-8 -*-

# author : szy

# create date : 2019/10/25

# step1:建立資料集

import torch

import matplotlib.pyplot as plt

# 假資料

n_data = torch.ones(100, 2) # 資料的基本形態

x0 = torch.normal(2*n_data, 1) # 型別0 x data (tensor), shape=(100, 2)

y0 = torch.zeros(100) # 型別0 y data (tensor), shape=(100, )

x1 = torch.normal(-2*n_data, 1) # 型別1 x data (tensor), shape=(100, 1)

y1 = torch.ones(100) # 型別1 y data (tensor), shape=(100, )

# 注意 x, y 資料的資料形式是一定要像下面一樣 (torch.cat 是在合併資料)

x = torch.cat((x0, x1), 0).type(torch.floattensor) # floattensor = 32-bit floating

y = torch.cat((y0, y1),).type(torch.longtensor) # longtensor = 64-bit integer

# 畫圖

plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=y.data.numpy(), s=100, lw=0, cmap='rdylgn')

# plt.scatter(x.data.numpy(), y.data.numpy())

# """raise valueerror("x and y must be the same size")

# valueerror: x and y must be the same size

## """

plt.show()

# step2:建立神經網路

import torch

import torch.nn.functional as f # 激勵函式都在這

class net(torch.nn.module): # 繼承 torch 的 module

def __init__(self, n_feature, n_hidden, n_output):

super(net, self).__init__() # 繼承 __init__ 功能

self.hidden = torch.nn.linear(n_feature, n_hidden) # 隱藏層線性輸出

self.out = torch.nn.linear(n_hidden, n_output) # 輸出層線性輸出

def forward(self, x):

# 正向傳播輸入值, 神經網路分析出輸出值

x = f.relu(self.hidden(x)) # 激勵函式(隱藏層的線性值)

x = self.out(x) # 輸出值, 但是這個不是**值, **值還需要再另外計算

return x

net = net(n_feature=2, n_hidden=10, n_output=2) # 幾個類別就幾個 output

print(net) # net 的結構

#訓練網路

# optimizer 是訓練的工具

optimizer = torch.optim.sgd(net.parameters(), lr=0.02) # 傳入 net 的所有引數, 學習率

# 算誤差的時候, 注意真實值!不是! one-hot 形式的, 而是1d tensor, (batch,)

# 但是**值是2d tensor (batch, n_classes)

loss_func = torch.nn.crossentropyloss()

for t in range(100):

out = net(x) # 餵給 net 訓練資料 x, 輸出分析值

loss = loss_func(out, y) # 計算兩者的誤差

optimizer.zero_grad() # 清空上一步的殘餘更新引數值

loss.backward(retain_graph=true) # 誤差反向傳播, 計算引數更新值

optimizer.step() # 將引數更新值施加到 net 的 parameters 上

# 視覺化訓練過程

import matplotlib.pyplot as plt

plt.ion() # 畫圖

plt.show()

for t in range(100):

...# loss.backward(retain_graph=true)

# print(loss)

loss.backward()

optimizer.step()

## if t % 2 == 0:

# plt.cla()

# # 過了一道 softmax 的激勵函式後的最大概率才是**值

# prediction = torch.max(f.softmax(out), 1)[1]

# pred_y = prediction.data.numpy().squeeze()

# target_y = y.data.numpy()

# plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=pred_y, s=100, lw=0, cmap='rdylgn')

# accuracy = sum(pred_y == target_y)/200. # **中有多少和真實值一樣

# plt.text(1.5, -4, 'accuracy=%.2f' % accuracy, fontdict=)

# plt.pause(0.1)

## plt.ioff() # 停止畫圖

# plt.show()

PyTorch 視覺化特徵

這個也可以參考 這篇部落格主要記錄了如何提取特定層的特徵,然後對它進行視覺化 處理單張作為網路輸入。根據給定的layer層,獲取該層的輸出結果features。考慮到features的形狀為 batch size,filter nums,h,w 提取其中的第乙個過濾器得到的結果feature。以一張...

pytorch模型視覺化

先把tensorflow和pytorch安裝好 之後在pytorch環境裡 pip install tensorboardx 將with summarywriter comment lenet as w w.add graph model,varinput,新增到模型和輸入的後面,類似這樣注意引數第...

pytorch 模型視覺化

針對pytorch有很多視覺化方式,比如,tensorboard logger visdom等,但這些比較複雜和不夠友好,則使用更強大的工具 tenorboardx from torch.utils.tensorboard import summarywriter if name main inpu...