Nvidia Jetson AGX Orin 初体验(三)实现LeNet网络
LeNet是典型的手写数字识别网络,常用于初学者的入门,我们就用它来试一下Orin的深度学习功能:
cudnn_sample 下面内置了一个LeNet网络的测试,我们来试一下:
先更新下源:
cd /usr/src/cudnn_samples_v8/mnistCUDNN/
sudo make
需要安装一些依赖包:sudo apt-get install libfreeimage3 libfreeimage-dev
重新编译:
进行测试:
从上面的例子可以看出,识别成功。
下面我们使用tensorflow+keras实现LeNet训练
先安装依赖包:
sudo apt-get install python3-numpy
sudo apt-get install python3-scipy
sudo apt-get install python3-pandas
sudo apt-get install python3-matplotlib
sudo apt-get install python3-sklearn
sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran
sudo apt-get install python3-pip
sudo pip3 install -U --no-deps numpy==1.19.4 future==0.18.2 mock==3.0.5 keras_preprocessing==1.1.2 keras_applications==1.0.8 gast==0.4.0 protobuf pybind11 cython pkgconfig -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo env H5PY_SETUP_REQUIRES=0 pip3 install -U h5py==3.1.0
查看下JetPack 5.0 tensorflow的包的地址:
安装Tensorflow 1.15:
sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v50 'tensorflow<2'
检查TensorFlow是否成功安装:
安装Keras并检查是否成功安装:
sudo pip3 install keras
准备 keras_lenet.py这个训练LeNet网络的Python代码:(代码来源:https://blog.csdn.net/mr_muli/article/details/80992600 作者:木里先森)
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 10 20:04:03 2018
@author: muli
"""
import tensorflow.keras
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D
from tensorflow.keras import backend as K
num_classes = 10
img_rows, img_cols = 28, 28
# 通过Keras封装好的API加载MNIST数据。其中trainX就是一个60000 * 28 * 28的数组,
# trainY是每一张图片对应的数字。
(trainX, trainY), (testX, testY) = mnist.load_data()
# 根据对图像编码的格式要求来设置输入层的格式。
if K.image_data_format() == 'channels_first':
trainX = trainX.reshape(trainX.shape[0], 1, img_rows, img_cols)
testX = testX.reshape(testX.shape[0], 1, img_rows, img_cols)
input_shape = (1, img_rows, img_cols)
else:
trainX = trainX.reshape(trainX.shape[0], img_rows, img_cols, 1)
testX = testX.reshape(testX.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)
trainX = trainX.astype('float32')
testX = testX.astype('float32')
trainX /= 255.0
testX /= 255.0
# 将标准答案转化为需要的格式(one-hot编码)。
trainY = tensorflow.keras.utils.to_categorical(trainY, num_classes)
testY = tensorflow.keras.utils.to_categorical(testY, num_classes)
# 2. 通过Keras的API定义卷积神经网络
# 使用Keras API定义模型。
model = Sequential()
model.add(Conv2D(32, kernel_size=(5, 5), activation='relu', input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (5, 5), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(500, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
# 定义损失函数、优化函数和评测方法。
model.compile(loss=tensorflow.keras.losses.categorical_crossentropy,
optimizer=tensorflow.keras.optimizers.SGD(),
metrics=['accuracy'])
# 3. 通过Keras的API训练模型并计算在测试数据上的准确率
model.fit(trainX, trainY,
batch_size=128,
epochs=10,
validation_data=(testX, testY))
# 在测试数据上计算准确率。
score = model.evaluate(testX, testY)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
执行训练代码:
耐心等待下载MNIST数据集,然后开始加载参数:
进行训练:
经过了几轮训练,准确率提高到了0.9821,loss降低到了0.0597左右。
(未完待续)
- 点赞
- 收藏
- 关注作者
评论(0)