当前位置:网站首页>Introduction to paddle - using lenet to realize image classification method I in MNIST
Introduction to paddle - using lenet to realize image classification method I in MNIST
2022-07-08 00:17:00 【Vertira】
MNIST The data set realizes image classification
One 、 Configuration environment
import paddle
print(paddle.__version__)
How to configure paddle You can search online , My blog also has , Here is a little
Load data : There are two ways : Custom data loading ( My previous blog has ), load paddled Data prepared on the official website
We are looking for the second way , Because it's convenient
Handwritten numbers MNIST Data sets , contain 60,000 Examples and for training 10,000 An example for testing . These numbers have been dimensioned and located in the center of the image , The image is a fixed size (28x28 Pixels ), Its value is 0 To 1. The official address of the data set is :http://yann.lecun.com/exdb/mnist .
We use the built-in... Of the propeller frame paddle.vision.datasets.MNIST
complete mnist Data set loading .
from paddle.vision.transforms import Compose, Normalize
transform = Compose([Normalize(mean=[127.5],
std=[127.5],
data_format='CHW')])
# Use transform Normalize the data set
print('download training data and load training data')
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)
print('load finished')
Take a piece of data from the training set and have a look .
import numpy as np
import matplotlib.pyplot as plt
train_data0, train_label_0 = train_dataset[0][0],train_dataset[0][1]
train_data0 = train_data0.reshape([28,28])
plt.figure(figsize=(2,2))
plt.imshow(train_data0, cmap=plt.cm.binary)
print('train_data0 label is: ' + str(train_label_0))
3、 ... and 、 networking
use paddle.nn Under the API, Such as Conv2D
、MaxPool2D
、Linear
complete LeNet The construction of .
import paddle
import paddle.nn.functional as F
class LeNet(paddle.nn.Layer):
def __init__(self):
super(LeNet, self).__init__()
self.conv1 = paddle.nn.Conv2D(in_channels=1, out_channels=6, kernel_size=5, stride=1, padding=2)
self.max_pool1 = paddle.nn.MaxPool2D(kernel_size=2, stride=2)
self.conv2 = paddle.nn.Conv2D(in_channels=6, out_channels=16, kernel_size=5, stride=1)
self.max_pool2 = paddle.nn.MaxPool2D(kernel_size=2, stride=2)
self.linear1 = paddle.nn.Linear(in_features=16*5*5, out_features=120)
self.linear2 = paddle.nn.Linear(in_features=120, out_features=84)
self.linear3 = paddle.nn.Linear(in_features=84, out_features=10)
def forward(self, x):
x = self.conv1(x)
x = F.relu(x)
x = self.max_pool1(x)
x = self.conv2(x)
x = F.relu(x)
x = self.max_pool2(x)
x = paddle.flatten(x, start_axis=1,stop_axis=-1)
x = self.linear1(x)
x = F.relu(x)
x = self.linear2(x)
x = F.relu(x)
x = self.linear3(x)
return x
Four 、 The way 1: Based on high-level API, Complete the training and prediction of the model
adopt paddle Provided Model
Build instance , Use the encapsulated training and test interface , Quickly complete model training and testing .
4.1 Use Model.fit
To train the model
from paddle.metric import Accuracy
model = paddle.Model(LeNet()) # use Model Packaging model
optim = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())
# Configuration model
model.prepare(
optim,
paddle.nn.CrossEntropyLoss(),
Accuracy()
)
# Training models
model.fit(train_dataset,
epochs=2,
batch_size=64,
verbose=1
)
Training results
The loss value printed in the log is the current step, and the metric is the average value of previous steps.
Epoch 1/2
step 938/938 [==============================] - loss: 0.0329 - acc: 0.9399 - 10ms/step
Epoch 2/2
step 938/938 [==============================] - loss: 0.0092 - acc: 0.9798 - 10ms/step
4.2 Use Model.evaluate
To predict the model
model.evaluate(test_dataset, batch_size=64, verbose=1)
Eval begin...
step 157/157 [==============================] - loss: 4.4728e-04 - acc: 0.9857 - 8ms/step
Eval samples: 10000
{'loss': [0.0004472804], 'acc': 0.9857}
Way one ends
That's way one , Can quickly 、 Efficiently complete network model training and prediction .
Reference resources :
边栏推荐
- [programming problem] [scratch Level 2] March 2019 draw a square spiral
- Zhou Hongqi, 52 ans, est - il encore jeune?
- 自动化测试:Robot FrameWork框架90%的人都想知道的实用技巧
- [programming problem] [scratch Level 2] draw ten squares in December 2019
- [the most detailed in history] statistical description of overdue days in credit
- 玩转Sonar
- 华为交换机S5735S-L24T4S-QA2无法telnet远程访问
- Is 35 really a career crisis? No, my skills are accumulating, and the more I eat, the better
- Ping error: unknown name or service
- Is it safe for tongdaxin to buy funds?
猜你喜欢
Play sonar
大数据开源项目,一站式全自动化全生命周期运维管家ChengYing(承影)走向何方?
RPA cloud computer, let RPA out of the box with unlimited computing power?
35岁真就成了职业危机?不,我的技术在积累,我还越吃越香了
从Starfish OS持续对SFO的通缩消耗,长远看SFO的价值
Detailed explanation of interview questions: the history of blood and tears in implementing distributed locks with redis
[programming problem] [scratch Level 2] 2019.09 make bat Challenge Game
如何衡量产品是否“刚需、高频、痛点”
51与蓝牙模块通讯,51驱动蓝牙APP点灯
C language 001: download, install, create the first C project and execute the first C language program of CodeBlocks
随机推荐
[programming problem] [scratch Level 2] draw ten squares in December 2019
Use filters to count URL request time
How to add automatic sorting titles in typora software?
Vscode software
52歲的周鴻禕,還年輕嗎?
腾讯安全发布《BOT管理白皮书》|解读BOT攻击,探索防护之道
new和delete的底层原理以及模板
用语雀写文章了,功能真心强大!
paddle入门-使用LeNet在MNIST实现图像分类方法一
智慧监管入场,美团等互联网服务平台何去何从
redis你到底懂不懂之list
The function is really powerful!
詹姆斯·格雷克《信息简史》读后感记录
How to learn a new technology (programming language)
Solution to prompt configure: error: curses library not found when configuring and installing crosstool ng tool
【史上最详细】信贷中逾期天数统计说明
C language 001: download, install, create the first C project and execute the first C language program of CodeBlocks
Kubectl 好用的命令行工具:oh-my-zsh 技巧和窍门
[programming problem] [scratch Level 2] 2019.09 make bat Challenge Game
Play sonar