赞
踩
本系列是机器学习课程的系列课程,主要介绍基于paddle实现神经网络。
完成一个特定行业的算法应用全过程:
懂业务+会选择合适的算法+数据处理+算法训练+算法调优+算法融合
+算法评估+持续调优+工程化接口实现
关于机器学习的定义,Tom Michael Mitchell的这段话被广泛引用:
对于某类任务T和性能度量P,如果一个计算机程序在T上其性能P随着经验E而自我完善,那么我们称这个计算机程序从经验E中学习。
使用MNIST数据集训练和测试模型。
MNIST数据集
import paddle
from paddle.vision.datasets import MNIST
from paddle.vision.transforms import ToTensor
train_dataset = MNIST(mode='train', transform=ToTensor())
test_dataset = MNIST(mode='test', transform=ToTensor())
展示数据集图片
import matplotlib.pyplot as plt
import numpy as np
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 的标签为: ' + str(train_label_0))
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/__init__.py:107: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working from collections import MutableMapping /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/rcsetup.py:20: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working from collections import Iterable, Mapping /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/colors.py:53: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working from collections import Sized /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/cbook/__init__.py:2349: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working if isinstance(obj, collections.Iterator): /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/cbook/__init__.py:2366: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working return list(data) if isinstance(data, collections.MappingView) else data /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/image.py:425: DeprecationWarning: np.asscalar(a) is deprecated since NumPy v1.16, use a.item() instead a_min = np.asscalar(a_min.astype(scaled_dtype)) /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/image.py:426: DeprecationWarning: np.asscalar(a) is deprecated since NumPy v1.16, use a.item() instead a_max = np.asscalar(a_max.astype(scaled_dtype)) train_data0 的标签为: [5]
import paddle import paddle.nn.functional as F from paddle.nn import Conv2D, MaxPool2D, Linear class MyModel(paddle.nn.Layer): def __init__(self): super(MyModel, self).__init__() self.conv1 = paddle.nn.Conv2D(in_channels=1, out_channels=6, kernel_size=5, stride=1, padding=2) self.max_pool1 = MaxPool2D(kernel_size=2, stride=2) self.conv2 = Conv2D(in_channels=6, out_channels=16, kernel_size=5, stride=1) self.max_pool2 = MaxPool2D(kernel_size=2, stride=2) self.linear1 = Linear(in_features=16*5*5, out_features=120) self.linear2 = Linear(in_features=120, out_features=84) self.linear3 = 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 = F.relu(x) x = self.conv2(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
模型可视化
import paddle
mnist = MyModel()
paddle.summary(mnist, (1, 1, 28, 28))
--------------------------------------------------------------------------- Layer (type) Input Shape Output Shape Param # =========================================================================== Conv2D-1 [[1, 1, 28, 28]] [1, 6, 28, 28] 156 MaxPool2D-1 [[1, 6, 28, 28]] [1, 6, 14, 14] 0 Conv2D-2 [[1, 6, 14, 14]] [1, 16, 10, 10] 2,416 MaxPool2D-2 [[1, 16, 10, 10]] [1, 16, 5, 5] 0 Linear-1 [[1, 400]] [1, 120] 48,120 Linear-2 [[1, 120]] [1, 84] 10,164 Linear-3 [[1, 84]] [1, 10] 850 =========================================================================== Total params: 61,706 Trainable params: 61,706 Non-trainable params: 0 --------------------------------------------------------------------------- Input size (MB): 0.00 Forward/backward pass size (MB): 0.06 Params size (MB): 0.24 Estimated Total Size (MB): 0.30 --------------------------------------------------------------------------- {'total_params': 61706, 'trainable_params': 61706}
import paddle from paddle.metric import Accuracy from paddle.static import InputSpec inputs = InputSpec([None, 784], 'float32', 'x') labels = InputSpec([None, 10], 'float32', 'x') # 用Model封装模型 model = paddle.Model(MyModel(), inputs, labels) # 定义损失函数 optim = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters()) # 配置模型 model.prepare(optim, paddle.nn.CrossEntropyLoss(), Accuracy()) # 训练模型 model.fit(train_dataset, test_dataset, epochs=3, batch_size=64, save_dir='mnist_checkpoint', verbose=1)
The loss value printed in the log is the current step, and the metric is the average value of previous steps. Epoch 1/3 step 938/938 [==============================] - loss: 0.0208 - acc: 0.9456 - 34ms/step save checkpoint at /home/aistudio/mnist_checkpoint/0 Eval begin... step 157/157 [==============================] - loss: 0.0041 - acc: 0.9777 - 19ms/step Eval samples: 10000 Epoch 2/3 step 938/938 [==============================] - loss: 0.0021 - acc: 0.9820 - 34ms/step save checkpoint at /home/aistudio/mnist_checkpoint/1 Eval begin... step 157/157 [==============================] - loss: 2.1037e-04 - acc: 0.9858 - 19ms/step Eval samples: 10000 Epoch 3/3 step 938/938 [==============================] - loss: 0.0126 - acc: 0.9876 - 34ms/step save checkpoint at /home/aistudio/mnist_checkpoint/2 Eval begin... step 157/157 [==============================] - loss: 4.7168e-04 - acc: 0.9884 - 19ms/step Eval samples: 10000 save checkpoint at /home/aistudio/mnist_checkpoint/final
import paddle import numpy as np import matplotlib.pyplot as plt from paddle.metric import Accuracy from paddle.static import InputSpec inputs = InputSpec([None, 784], 'float32', 'x') labels = InputSpec([None, 10], 'float32', 'x') model = paddle.Model(MyModel(), inputs, labels) model.load('./mnist_checkpoint/final') model.prepare(optim, paddle.nn.CrossEntropyLoss(), Accuracy()) # results = model.evaluate(test_dataset, batch_size=64, verbose=1) # print(results) results = model.predict(test_dataset, batch_size=64) test_data0, test_label_0 = test_dataset[0][0], test_dataset[0][1] test_data0 = test_data0.reshape([28, 28]) plt.figure(figsize=(2,2)) plt.imshow(test_data0, cmap=plt.cm.binary) print('test_data0 的标签为: ' + str(test_label_0)) print('test_data0 预测的数值为:%d' % np.argsort(results[0][0])[0][-1])
Predict begin...
step 157/157 [==============================] - 27ms/step
Predict samples: 10000
test_data0 的标签为: [7]
test_data0 预测的数值为:7
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/image.py:425: DeprecationWarning: np.asscalar(a) is deprecated since NumPy v1.16, use a.item() instead
a_min = np.asscalar(a_min.astype(scaled_dtype))
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/image.py:426: DeprecationWarning: np.asscalar(a) is deprecated since NumPy v1.16, use a.item() instead
a_max = np.asscalar(a_max.astype(scaled_dtype))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。