环境

python3.6, paddlepaddle-gpu 1.5.2.post107

# -*- coding: utf-8 -*-
# @Time : 2020/1/18 16:49
# @Author : Zhao HL
# @File : lenet5_paddle.py
import os,sys
from PIL import Image
import numpy as np
import paddle
from paddle import fluid# region parameters
# region paths
Data_path = "./data/"
TestData_path = Data_path + 'pic/'
Model_path = 'model/'
Model_file_tf = "model/lenet5_tf.ckpt"
Model_file_keras = "model/lenet5_keras.h5"
Model_file_torch = "model/lenet5_torch.pth"
Model_file_paddle = "model/lenet5_paddle.model"
# endregion# region image parameter
Img_size = 28
Img_chs = 1
Label_size = 1
Labels_classes = 10
# endregion# region net parameter
Conv1_kernel_size = 5
Conv1_chs = 6
Conv2_kernel_size = 5
Conv2_chs = 16
Conv3_kernel_size = 5
Conv3_chs = 120
Flatten_size = 120
Fc1_size = 84
Fc2_size = Labels_classes
# endregion# region hpyerparameter
Learning_rate = 1e-3
Batch_size = 64
Buffer_size = 256
Infer_size = 1
Epochs = 6
Train_num = 60000
Train_batch_num = Train_num // Batch_size
Val_num = 10000
Val_batch_num = Val_num // Batch_size
# endregion
place = fluid.CUDAPlace(0) if fluid.cuda_places() else fluid.CPUPlace()
# endregionclass Lenet5:def __init__(self,structShow=False):self.structShow = structShowself.image = fluid.layers.data(shape=[Img_chs, Img_size, Img_size], dtype='float32', name='image')self.label = fluid.layers.data(shape=[Label_size], dtype='int64', name='label')self.predict = self.net_lenet5()def net_lenet5(self):conv1 = fluid.layers.conv2d(self.image,6,filter_size=5,stride=1,padding=2,act='relu')pool1 = fluid.layers.pool2d(conv1,2,pool_stride=2,pool_type='max')conv2 = fluid.layers.conv2d(pool1,16,filter_size=5,stride=1,padding=0,act='relu')pool2 = fluid.layers.pool2d(conv2,2,pool_stride=2,pool_type='max')conv3 = fluid.layers.conv2d(pool2,120,filter_size=5,stride=1,padding=0,act='relu')flatten = fluid.layers.flatten(conv3,axis=1)fc1 = fluid.layers.fc(flatten,84,act='relu')fc2 = fluid.layers.fc(fc1,10,act='softmax')if self.structShow:print(conv1.name,conv1.shape)print(pool1.name,pool1.shape)print(conv2.name,conv2.shape)print(pool2.name,pool2.shape)print(conv3.name,conv3.shape)print(flatten.name,flatten.shape)print(fc1.name,fc1.shape)print(fc2.name,fc2.shape)return fc2def train():train_reader = paddle.batch(paddle.reader.shuffle(paddle.dataset.mnist.train(), buf_size=Buffer_size),batch_size=Batch_size)val_reader = paddle.batch(paddle.reader.shuffle(paddle.dataset.mnist.test(),buf_size=Buffer_size),batch_size=Batch_size)net = Lenet5(structShow=True)image,label,predict = net.image,net.label,net.predictfeeder = fluid.DataFeeder(place=place, feed_list=[image, label])loss = fluid.layers.cross_entropy(input=predict, label=label)loss_mean = fluid.layers.mean(loss)acc = fluid.layers.accuracy(input=predict, label=label)optimizer = fluid.optimizer.AdamOptimizer(learning_rate=Learning_rate)optimizer.minimize(loss_mean)val_program = fluid.default_main_program().clone(for_test=True)exe = fluid.Executor(place)exe.run(fluid.default_startup_program())best_loss = float("inf")best_loss_epoch = 0for epoch in range(Epochs):print('Epoch %d/%d:' % (epoch + 1, Epochs))train_sum_loss = 0train_sum_acc = 0val_sum_loss = 0val_sum_acc = 0for batch_num, data in enumerate(train_reader()):train_loss, train_acc = exe.run(program=fluid.default_main_program(),  # 运行主程序feed=feeder.feed(data),  # 给模型喂入数据fetch_list=[loss_mean, acc])  # fetch 误差、准确率train_sum_loss += train_loss[0]train_sum_acc += train_acc[0]process_show(batch_num + 1, Train_num/Batch_size, train_acc, train_loss, prefix='train:')for batch_num, data in enumerate(val_reader()):val_loss, val_acc = exe.run(program=val_program,  # 执行训练程序feed=feeder.feed(data),  # 喂入数据fetch_list=[loss_mean, acc])  # fetch 误差、准确率val_sum_loss += val_loss[0]val_sum_acc += val_acc[0]process_show(batch_num + 1, Val_num / Batch_size, val_acc, val_loss, prefix='train:')train_sum_loss /= (Train_num//Batch_size)train_sum_acc /= (Train_num//Batch_size)val_sum_loss /= (Val_num // Batch_size)val_sum_acc /= (Val_num // Batch_size)print('average summary:\ntrain acc %.4f, loss %.4f ; val acc %.4f, loss %.4f'% (train_sum_acc, train_sum_loss, val_sum_acc, val_sum_loss))if val_sum_loss < best_loss:print('val_loss improve from %.4f to %.4f, model save to %s ! \n' % (best_loss, val_sum_loss,Model_file_paddle))best_loss = val_sum_lossbest_loss_epoch = epoch+1fluid.io.save_inference_model(Model_file_paddle,  # 保存推理model的路径['image'],  # 推理(inference)需要 feed 的数据[predict],  # 保存推理(inference)结果的 Variablesexe)  # executor 保存 inference modelelse:print('val_loss do not improve from %.4f \n' % (best_loss))print('best loss %.4f at epoch %d \n'%(best_loss,best_loss_epoch))def load_image(file):img = Image.open(file).convert('L')                        #将RGB转化为灰度图像,L代表灰度图像,像素值在0~255之间img = img.resize((Img_size, Img_size), Image.ANTIALIAS)                 #resize image with high-quality 图像大小为28*28img = np.array(img).reshape(Infer_size, Img_chs, Img_size, Img_size).astype(np.float32)#返回新形状的数组,把它变成一个 numpy 数组以匹配数据馈送格式。# print(im)img = img / 255.0 * 2.0 - 1.0                               #归一化到【-1~1】之间return imgdef inference(infer_path=TestData_path,model_path = Model_file_paddle):'''推理代码:param infer_path: 推理数据:param model_path: 模型:return: '''infer_exe = fluid.Executor(place)inference_scope = fluid.core.Scope()with fluid.scope_guard(inference_scope):[inference_program,  # 推理Programfeed_target_names,  # 是一个str列表,它包含需要在推理 Program 中提供数据的变量的名称。fetch_targets] = fluid.io.load_inference_model(model_path,infer_exe)print('get model from',model_path)for image_name in os.listdir(infer_path):img = load_image(infer_path+image_name)results = infer_exe.run(program=inference_program,  # 运行推测程序feed={feed_target_names[0]: img},  # 喂入要预测的imgfetch_list=fetch_targets)  # 得到推测结果,pre = np.argsort(results)  # argsort函数返回的是result数组值从小到大的索引值print("{} predict result {}" .format(image_name,pre[0][0][-1]))def process_show(num, nums, train_acc, train_loss, prefix='', suffix=''):rate = num / numsratenum = int(round(rate, 2) * 100)bar = '\r%s batch %3d/%d:train accuracy %.4f, train loss %00.4f [%s%s]%.1f%% %s; ' % (prefix, num, nums, train_acc, train_loss, '#' * (ratenum//2), '_' * (50 - ratenum//2), ratenum, suffix)sys.stdout.write(bar)sys.stdout.flush()if num >= nums:print()if __name__ == '__main__':passtrain()inference()

paddle lenet5网络搭建相关推荐

  1. [Pytorch系列-35]:卷积神经网络 - 搭建LeNet-5网络与CFAR10分类数据集

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  2. [Pytorch系列-41]:卷积神经网络 - 模型参数的恢复/加载 - 搭建LeNet-5网络与MNIST数据集手写数字识别

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  3. Pytorch搭建LeNet5网络

    本讲目标:   介绍Pytorch搭建LeNet5网络的流程. Pytorch八股法搭建LeNet5网络 1.LeNet5网络介绍 2.Pytorch搭建LeNet5网络 2.1搭建LeNet网络 2 ...

  4. 简单了解------网络搭建

    目录 一.卷积神经网络(CNN) 1.神经网络 2.卷积神经网络 二.卷积神经网络的结构 1.卷积层--CONV(convolutional layer) 2.池化层--POOL(pooling la ...

  5. 旷视MegEngine网络搭建

    旷视MegEngine网络搭建 在 基本概念 中,介绍了计算图.张量和算子,神经网络可以看成一个计算图.在 MegEngine 中,按照计算图的拓扑结构,将张量和算子连接起来,即可完成对网络的搭建.M ...

  6. 【干货】大中型企业网络搭建

    今天简单了解一下,大中型公司的网络搭建. 对于很多大型公司来讲,网络的稳定性,会直接影响到公司的收益,比如,双十一的阿里巴巴,京东,等等.如果这个时候网络出现问题,对于公司的损失将会是不可估量的.可见 ...

  7. [转]vmware 域网络搭建

    最近给一个客户做网络搭建项目,要是实现网络内部办公安全,实现文件服务器,域控.用户监控.邮件服务器等(真的是狮子大开口啊).但是,却只提供给我一台普通的服务器.在我一番摆事实,将道理的说服下,老板最终 ...

  8. tf.keras CNN网络搭建笔记

    tf.keras CNN网络搭建笔记 这里写目录标题 tf.keras CNN网络搭建笔记 基本流程,以LeNet为例 创建Sequential模型 配置模型的学习流程 数据预处理 模型训练与验证 相 ...

  9. 第十二章_网络搭建及训练

    文章目录 第十二章 网络搭建及训练 CNN训练注意事项 第十二章 TensorFlow.pytorch和caffe介绍 12.1 TensorFlow 12.1.1 TensorFlow是什么? 12 ...

最新文章

  1. TIOBE 8 月编程语言:C、Java 差距拉大,R 语言盛行
  2. 直播预告|灵动MM32 MCU助力全国大学生智能汽车竞赛——基础培训
  3. 查看静态链接和动态链接
  4. c语言中a lt 1e-9,年9月计算机二级考试C语言强化训练题
  5. Cell封面文章:跑步短短10分钟,身体近10000个分子大变样!蛋白组学破解运动有益健康之谜...
  6. mac中的csv文件到windows平台乱码的解决办法
  7. NSLog 输出格式集合
  8. java 完全背包问题算法_算法笔记(c++)--完全背包问题
  9. python是什么软件-软件开发是什么?
  10. NASA-TLX (Task Load Index)量表学习总结
  11. CAD计算机辅助设计——文件管理和界面设置
  12. 微信昵称如何设置特效
  13. 2021-07-30-DJ-006 Django模型的objects方法、参数详解
  14. 物联网和区块链:挑战与风险
  15. Linux以百万兆字节显示内存大小
  16. uedit 富文本编辑器 图片上传 图片服务器
  17. 计算机内部应用什么计算,计算机内部使用什么来计数
  18. 如何将英文文献完整翻译?公式都可以快速完整插入,比淘宝上的机翻要强一百倍!
  19. git_describe
  20. Joshua Loth Liebman

热门文章

  1. python0是true还是false_python 中的True和1及False和0是可以等价比较
  2. 深大算法实验四——流水线问题
  3. bzoj 3926: [Zjoi2015]诸神眷顾的幻想乡(广义后缀自动机)
  4. matlab中点乘和乘的区别
  5. Mysql同步到tidb,MYSQL5.7实时同步数据到TiDB
  6. PAT 1003 养兔子
  7. MATLAB 稀疏矩阵赋值——稀疏系数融合
  8. 基于Node.js的微信跳一跳辅助工具
  9. nsfocus-笔试题
  10. 以电竞的名义,一场游戏公益杯背后的思考