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...