当前位置:网站首页>Fast construction of neural network
Fast construction of neural network
2022-06-26 08:54:00 【Thick Cub with thorns】
Fast construction of neural network
Quick build method
Add the excitation function layer by layer to directly construct
# method 2
# Quickly build
net2 = torch.nn.Sequential(
torch.nn.Linear(1, 10),
torch.nn.ReLU(),
torch.nn.Linear(10, 1),
)
print(net2)
out
Sequential(
(0): Linear(in_features=1, out_features=10, bias=True)
(1): ReLU()
(2): Linear(in_features=10, out_features=1, bias=True)
)
Batch training
import torch
import torch.utils.data as Data
BATCH_SIZE = 5
x = torch.linspace(1, 10, 10)
y = torch.linspace(10, 1, 10)
torch_dataset = Data.TensorDataset(x, y)
loader = Data.DataLoader(
dataset=torch_dataset, # Data sets
batch_size=BATCH_SIZE,
shuffle=True, # Do you need to disrupt your training
# num_workers = 2 # This broken computer cannot be multithreaded
)
for epoch in range(3): # Train three times as a whole
for step, (batch_x, batch_y) in enumerate(loader):
# training
print('Epoch', epoch, '|Step:', step, '|batch x:',
batch_x.numpy(), '|batch y:', batch_y.numpy())
out
Epoch 0 |Step: 0 |batch x: [9. 2. 7. 4. 3.] |batch y: [2. 9. 4. 7. 8.]
Epoch 0 |Step: 1 |batch x: [ 8. 1. 5. 6. 10.] |batch y: [ 3. 10. 6. 5. 1.]
Epoch 1 |Step: 0 |batch x: [ 3. 7. 6. 10. 8.] |batch y: [8. 4. 5. 1. 3.]
Epoch 1 |Step: 1 |batch x: [9. 1. 2. 4. 5.] |batch y: [ 2. 10. 9. 7. 6.]
Epoch 2 |Step: 0 |batch x: [10. 5. 4. 8. 7.] |batch y: [1. 6. 7. 3. 4.]
Epoch 2 |Step: 1 |batch x: [1. 9. 3. 6. 2.] |batch y: [10. 2. 8. 5. 9.]
It can be used data_loader Conduct batch training
Accelerate the training process of neural network
SGD
stochastic Gradient Descent
Batch data into neural network training
Mumentum: m = b 1 ∗ m − l e a r n i n g r a t e ∗ d x m=b_1*m-learning\ rate*dx m=b1∗m−learning rate∗dx
adagrad: v + = d x 2 v+=dx^2 v+=dx2
After the combination, we get RMSProp
m = b 1 ∗ m + ( 1 − b 1 ) ∗ d x m=b_1*m+(1-b_1)*dx m=b1∗m+(1−b1)∗dx Momentum: downhill slope
v = b 2 ∗ v + ( 1 − b 2 ) ∗ d x 2 v=b_2*v+(1-b_2)*dx^2 v=b2∗v+(1−b2)∗dx2 AdaGrad: Too much resistance , Only in the descending direction
w + = − l e a r i n g r a t e ∗ m / v w += -learing \ rate * m / \sqrt{v} w+=−learing rate∗m/v
CNN Convolutional neural networks
Deal with picture recognition : Turn the picture into pixels , It's not about processing pixels , Instead, a pixel region is processed .
Use a filter Moving around in the picture , This is called convolution
Then output a smaller length and width , Higher picture
In the process of convolution , You may lose some information , You need to pool
pytorch Realization
We use MNIST Data sets
import torch
import torch.nn as nn
from torch.autograd import Variable
import torch.utils.data as Data
import torchvision
import matplotlib.pyplot as plt
# Hyper Parameters
EPOCH = 1
BATCH_SIZE = 50
LR = 0.001
DOWNLOAD_MNIST = True
train_data = torchvision.datasets.MNIST(
root='./mnist',
train=True,
transform=torchvision.transforms.ToTensor(), # Change to tensor Format
download=DOWNLOAD_MNIST
)
# plot one example
print(train_data.train_data.size())
print(train_data.train_labels.size())
plt.imshow(train_data.train_data[0].numpy(), cmap='gray')
plt.title('%i' % train_data.train_labels[0])
plt.show()
The output has a 5
structure cnn Convolutional neural networks
import torch
import torch.nn as nn
from torch.autograd import Variable
import torch.utils.data as Data
import torchvision
import matplotlib.pyplot as plt
# Hyper Parameters
EPOCH = 1
BATCH_SIZE = 50
LR = 0.001
DOWNLOAD_MNIST = False
train_data = torchvision.datasets.MNIST(
root='./mnist',
train=True,
transform=torchvision.transforms.ToTensor(), # Change to tensor Format
download=DOWNLOAD_MNIST
)
# plot one example
# print(train_data.train_data.size())
# print(train_data.train_labels.size())
# plt.imshow(train_data.train_data[0].numpy(), cmap='gray')
# plt.title('%i' % train_data.train_labels[0])
# plt.show()
train_loader = Data.DataLoader(dataset=train_data, batch_size=BATCH_SIZE, shuffle=True)
test_data = torchvision.datasets.MNIST(root='./mnist', train=False)
test_x = Variable(torch.unsqueeze(test_data.test_data, dim=1), volatile=True).type(torch.FloatTensor)[:2000]/255
test_y = test_data.test_labels[:2000]
class CNN(nn.Module):
# Convolution layer
def __init__(self):
super(CNN, self).__init__()
self.conv1 = nn.Sequential(
nn.Conv2d(
in_channels=1, # Height of picture
out_channels=16, # Output height ( The number of features )
kernel_size=5, # filter Both width and height are 5(5*5) Scanning form of
stride=1, # Jump every few steps
padding=2 # Surround yourself 0, padding = (kernel_size - 1) / 2
), # filter -> (16, 28, 28)
nn.ReLU(), # Convolution layer
nn.MaxPool2d(kernel_size=2), # Pooling layer , Retain important features ->(16, 14, 14)
)
self.conv2 = nn.Sequential( # (16, 14, 14)
nn.Conv2d(16,32,5,1,2), # ->(32, 14, 14)
nn.ReLU(),
nn.MaxPool2d(2) # -> (32, 7, 7)
)
self.out = nn.Linear(32 * 7 * 7, 10)
def forward(self, x):
x = self.conv1(x)
x = self.conv2(x) # (batch, 32, 7, 7)
x = x.view(x.size(0), -1) # (batch, 32 * 7 * 7)
cnn = CNN()
print(cnn)
out
CNN(
(conv1): Sequential(
(0): Conv2d(1, 16, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
(1): ReLU()
(2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(conv2): Sequential(
(0): Conv2d(16, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
(1): ReLU()
(2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(out): Linear(in_features=1568, out_features=10, bias=True)
)
Plus the optimizer and training
""" View more, visit my tutorial page: https://mofanpy.com/tutorials/ My Youtube Channel: https://www.youtube.com/user/MorvanZhou Dependencies: torch: 0.4 torchvision matplotlib """
# library
# standard library
import os
# third-party library
import torch
import torch.nn as nn
import torch.utils.data as Data
import torchvision
import matplotlib.pyplot as plt
# torch.manual_seed(1) # reproducible
# Hyper Parameters
EPOCH = 1 # train the training data n times, to save time, we just train 1 epoch
BATCH_SIZE = 50
LR = 0.001 # learning rate
DOWNLOAD_MNIST = False
# Mnist digits dataset
if not(os.path.exists('./mnist/')) or not os.listdir('./mnist/'):
# not mnist dir or mnist is empyt dir
DOWNLOAD_MNIST = True
train_data = torchvision.datasets.MNIST(
root='./mnist/',
train=True, # this is training data
transform=torchvision.transforms.ToTensor(), # Converts a PIL.Image or numpy.ndarray to
# torch.FloatTensor of shape (C x H x W) and normalize in the range [0.0, 1.0]
download=DOWNLOAD_MNIST,
)
# plot one example
print(train_data.train_data.size()) # (60000, 28, 28)
print(train_data.train_labels.size()) # (60000)
plt.imshow(train_data.train_data[0].numpy(), cmap='gray')
plt.title('%i' % train_data.train_labels[0])
plt.show()
# Data Loader for easy mini-batch return in training, the image batch shape will be (50, 1, 28, 28)
train_loader = Data.DataLoader(dataset=train_data, batch_size=BATCH_SIZE, shuffle=True)
# pick 2000 samples to speed up testing
test_data = torchvision.datasets.MNIST(root='./mnist/', train=False)
test_x = torch.unsqueeze(test_data.test_data, dim=1).type(torch.FloatTensor)[:2000]/255. # shape from (2000, 28, 28) to (2000, 1, 28, 28), value in range(0,1)
test_y = test_data.test_labels[:2000]
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
self.conv1 = nn.Sequential( # input shape (1, 28, 28)
nn.Conv2d(
in_channels=1, # input height
out_channels=16, # n_filters
kernel_size=5, # filter size
stride=1, # filter movement/step
padding=2, # if want same width and length of this image after Conv2d, padding=(kernel_size-1)/2 if stride=1
), # output shape (16, 28, 28)
nn.ReLU(), # activation
nn.MaxPool2d(kernel_size=2), # choose max value in 2x2 area, output shape (16, 14, 14)
)
self.conv2 = nn.Sequential( # input shape (16, 14, 14)
nn.Conv2d(16, 32, 5, 1, 2), # output shape (32, 14, 14)
nn.ReLU(), # activation
nn.MaxPool2d(2), # output shape (32, 7, 7)
)
self.out = nn.Linear(32 * 7 * 7, 10) # fully connected layer, output 10 classes
def forward(self, x):
x = self.conv1(x)
x = self.conv2(x)
x = x.view(x.size(0), -1) # flatten the output of conv2 to (batch_size, 32 * 7 * 7)
output = self.out(x)
return output, x # return x for visualization
cnn = CNN()
print(cnn) # net architecture
optimizer = torch.optim.Adam(cnn.parameters(), lr=LR) # optimize all cnn parameters
loss_func = nn.CrossEntropyLoss() # the target label is not one-hotted
# following function (plot_with_labels) is for visualization, can be ignored if not interested
from matplotlib import cm
try: from sklearn.manifold import TSNE; HAS_SK = True
except: HAS_SK = False; print('Please install sklearn for layer visualization')
def plot_with_labels(lowDWeights, labels):
plt.cla()
X, Y = lowDWeights[:, 0], lowDWeights[:, 1]
for x, y, s in zip(X, Y, labels):
c = cm.rainbow(int(255 * s / 9)); plt.text(x, y, s, backgroundcolor=c, fontsize=9)
plt.xlim(X.min(), X.max()); plt.ylim(Y.min(), Y.max()); plt.title('Visualize last layer'); plt.show(); plt.pause(0.01)
plt.ion()
# training and testing
for epoch in range(EPOCH):
for step, (b_x, b_y) in enumerate(train_loader): # gives batch data, normalize x when iterate train_loader
output = cnn(b_x)[0] # cnn output
loss = loss_func(output, b_y) # cross entropy loss
optimizer.zero_grad() # clear gradients for this training step
loss.backward() # backpropagation, compute gradients
optimizer.step() # apply gradients
if step % 50 == 0:
test_output, last_layer = cnn(test_x)
pred_y = torch.max(test_output, 1)[1].data.numpy()
accuracy = float((pred_y == test_y.data.numpy()).astype(int).sum()) / float(test_y.size(0))
print('Epoch: ', epoch, '| train loss: %.4f' % loss.data.numpy(), '| test accuracy: %.2f' % accuracy)
if HAS_SK:
# Visualization of trained flatten layer (T-SNE)
tsne = TSNE(perplexity=30, n_components=2, init='pca', n_iter=5000)
plot_only = 500
low_dim_embs = tsne.fit_transform(last_layer.data.numpy()[:plot_only, :])
labels = test_y.numpy()[:plot_only]
plot_with_labels(low_dim_embs, labels)
plt.ioff()
# print 10 predictions from test data
test_output, _ = cnn(test_x[:10])
pred_y = torch.max(test_output, 1)[1].data.numpy()
print(pred_y, 'prediction number')
print(test_y[:10].numpy(), 'real number')
out

[7 2 1 0 4 1 4 9 5 9] prediction number
[7 2 1 0 4 1 4 9 5 9] real number
边栏推荐
- 唯品会工作实践 : Json的deserialization应用
- Euler function: find the number of numbers less than or equal to N and coprime with n
- KNN resolution
- Backward usage
- In automated testing, there are three commonly used waiting methods: sleep, implicitly\wait, and expected\u conditions
- Convex optimization of quadruped
- Selenium 搭建 Cookies池 绕过验证反爬登录
- Batch execute SQL file
- Whale conference provides digital upgrade scheme for the event site
- Analysis of Yolo series principle
猜你喜欢

MPC learning notes (I): push MPC formula manually

Playing card image segmentation

Polka lines code recurrence

Install Anaconda + NVIDIA graphics card driver + pytorch under win10_ gpu

Convex optimization of quadruped

爬虫 对 Get/Post 请求时遇到编码问题的解决方案

利用无线技术实现分散传感器信号远程集中控制

Leetcode22 summary of types of questions brushing in 2002 (XII) and collection search

opencv学习笔记三

Yolov5进阶之二安装labelImg
随机推荐
KNN resolution
[resolved]setonnavigationitemselectedlistener() deprecated
Drawing with MATLAB (2) -- color ring
Corn image segmentation count_ nanyangjx
Slider verification - personal test (JD)
Nebula diagram_ Object detection and measurement_ nanyangjx
Exploration of webots and ROS joint simulation (II): model import
如何利用最少的钱,快速打开淘宝流量入口?
Record the problem yaml file contains Chinese message 'GBK' error
Summary of common instructions for arm assembly
关于极客时间 | MySQL实战45讲的部分总结
Remote centralized control of distributed sensor signals using wireless technology
Detailed process of generating URDF file from SW model
Whale conference one-stop intelligent conference system helps organizers realize digital conference management
FFmpeg音视频播放器实现
Isinstance() function usage
Recovering the system with Clonezilla USB disk
Recyclerview item gets the current position according to the X and Y coordinates
1.25 suggestions and design of machine learning
The best time to buy and sell stocks to get the maximum return