文中主要是给大家介绍了caffe的python插口之手写数字识别mnist案例详细说明,感兴趣的小伙伴可以参考借鉴一下,希望可以有一定的帮助,祝愿大家多多的发展,尽早涨薪
论文引言
机器学习第一个案例一般都是是mnist,只需这个案例彻底搞懂了,其他的便是触类旁通的事了。因为字数缘故,文中不简单介绍环境变量里边每一个指标的具体函义,如果要搞明白的,请参考我之前的微博文章:
数据访问层及主要参数
视觉效果层及主要参数
solver环境变量及主要参数
一、数据准备
官方网站给予的mnist数据信息并不是图片,但是我们之后做出来的具体新项目很有可能是图像。所以有的人并不知如何是好。在这里我们将mnist信息进行了转换,成了1张张的图片,大伙儿训练先从照片逐渐。mnist图片数据信息我放到了百度云。
mnist图片数据信息立即下载
数据信息划分成测试集(60000张共10类)和测试集(共10000张10类),每一个类型放到一个独立的文件夹里。并将所有的图片,都形成了txt目录明细(train.txt和test.txt)。大伙儿直接下载后,立即缓解压力到用户状态目录下就行了。因为我是在windows下压缩成的,所以是winrar文件。如果你们需在linux下压缩包解压,必须安装rar的linux版本,也是非常简易
sudo apt-get install rar
二、导入caffe库,并设定文件路径
我是将mnist直接放在根目录下的,所以代码如下:
#-*-coding:utf-8-*- import caffe from caffe import layers as L,params as P,proto,to_proto #设定文件的保存路径 root='/home/xxx/'#根目录 train_list=root+'mnist/train/train.txt'#训练图片列表 test_list=root+'mnist/test/test.txt'#测试图片列表 train_proto=root+'mnist/train.prototxt'#训练配置文件 test_proto=root+'mnist/test.prototxt'#测试配置文件 solver_proto=root+'mnist/solver.prototxt'#参数文件
其中train.txt和test.txt文件已经有了,其它三个文件,我们需要自己编写。
此处注意:一般caffe程序都是先将图片转换成lmdb文件,但这样做有点麻烦。因此我就不转换了,我直接用原始图片进行操作,所不同的就是直接用图片操作,均值很难计算,因此可以不减均值。
二、生成配置文件
配置文件实际上就是一些txt文档,只是后缀名是prototxt,我们可以直接到编辑器里编写,也可以用代码生成。此处,我用python来生成。
#编写一个函数,生成配置文件prototxt def Lenet(img_list,batch_size,include_acc=False): #第一层,数据输入层,以ImageData格式输入 data,label=L.ImageData(source=img_list,batch_size=batch_size,ntop=2,root_folder=root, transform_param=dict(scale=0.00390625)) #第二层:卷积层 conv1=L.Convolution(data,kernel_size=5,stride=1,num_output=20,pad=0,weight_filler=dict(type='xavier')) #池化层 pool1=L.Pooling(conv1,pool=P.Pooling.MAX,kernel_size=2,stride=2) #卷积层 conv2=L.Convolution(pool1,kernel_size=5,stride=1,num_output=50,pad=0,weight_filler=dict(type='xavier')) #池化层 pool2=L.Pooling(conv2,pool=P.Pooling.MAX,kernel_size=2,stride=2) #全连接层 fc3=L.InnerProduct(pool2,num_output=500,weight_filler=dict(type='xavier')) #激活函数层 relu3=L.ReLU(fc3,in_place=True) #全连接层 fc4=L.InnerProduct(relu3,num_output=10,weight_filler=dict(type='xavier')) #softmax层 loss=L.SoftmaxWithLoss(fc4,label) if include_acc:#test阶段需要有accuracy层 acc=L.Accuracy(fc4,label) return to_proto(loss,acc) else: return to_proto(loss) def write_net(): #写入train.prototxt with open(train_proto,'w')as f: f.write(str(Lenet(train_list,batch_size=64))) #写入test.prototxt with open(test_proto,'w')as f: f.write(str(Lenet(test_list,batch_size=100,include_acc=True)))
配置文件里面存放的,就是我们所说的network。我这里生成的network,可能和原始的Lenet不太一样,不过影响不大。
三、生成参数文件solver
同样,可以在编辑器里面直接书写,也可以用代码生成。
#编写一个函数,生成参数文件 def gen_solver(solver_file,train_net,test_net): s=proto.caffe_pb2.SolverParameter() s.train_net=train_net s.test_net.append(test_net) s.test_interval=938#60000/64,测试间隔参数:训练完一次所有的图片,进行一次测试 s.test_iter.append(100)#10000/100测试迭代次数,需要迭代100次,才完成一次所有数据的测试 s.max_iter=9380#10 epochs,938*10,最大训练次数 s.base_lr=0.01#基础学习率 s.momentum=0.9#动量 s.weight_decay=5e-4#权值衰减项 s.lr_policy='step'#学习率变化规则 s.stepsize=3000#学习率变化频率 s.gamma=0.1#学习率变化指数 s.display=20#屏幕显示间隔 s.snapshot=938#保存caffemodel的间隔 s.snapshot_prefix=root+'mnist/lenet'#caffemodel前缀 s.type='SGD'#优化算法 s.solver_mode=proto.caffe_pb2.SolverParameter.GPU#加速 #写入solver.prototxt with open(solver_file,'w')as f: f.write(str(s)) 四、开始训练模型 训练过程中,也在不停的测试。 #开始训练 def training(solver_proto): caffe.set_device(0) caffe.set_mode_gpu() solver=caffe.SGDSolver(solver_proto) solver.solve() 最后,调用以上的函数就可以了。 if __name__=='__main__': write_net() gen_solver(solver_proto,train_proto,test_proto) training(solver_proto)
五、完成的python文件
mnist.py #-*-coding:utf-8-*- import caffe from caffe import layers as L,params as P,proto,to_proto #设定文件的保存路径 root='/home/xxx/'#根目录 train_list=root+'mnist/train/train.txt'#训练图片列表 test_list=root+'mnist/test/test.txt'#测试图片列表 train_proto=root+'mnist/train.prototxt'#训练配置文件 test_proto=root+'mnist/test.prototxt'#测试配置文件 solver_proto=root+'mnist/solver.prototxt'#参数文件 #编写一个函数,生成配置文件prototxt def Lenet(img_list,batch_size,include_acc=False): #第一层,数据输入层,以ImageData格式输入 data,label=L.ImageData(source=img_list,batch_size=batch_size,ntop=2,root_folder=root, transform_param=dict(scale=0.00390625)) #第二层:卷积层 conv1=L.Convolution(data,kernel_size=5,stride=1,num_output=20,pad=0,weight_filler=dict(type='xavier')) #池化层 pool1=L.Pooling(conv1,pool=P.Pooling.MAX,kernel_size=2,stride=2) #卷积层 conv2=L.Convolution(pool1,kernel_size=5,stride=1,num_output=50,pad=0,weight_filler=dict(type='xavier')) #池化层 pool2=L.Pooling(conv2,pool=P.Pooling.MAX,kernel_size=2,stride=2) #全连接层 fc3=L.InnerProduct(pool2,num_output=500,weight_filler=dict(type='xavier')) #激活函数层 relu3=L.ReLU(fc3,in_place=True) #全连接层 fc4=L.InnerProduct(relu3,num_output=10,weight_filler=dict(type='xavier')) #softmax层 loss=L.SoftmaxWithLoss(fc4,label) if include_acc:#test阶段需要有accuracy层 acc=L.Accuracy(fc4,label) return to_proto(loss,acc) else: return to_proto(loss) def write_net(): #写入train.prototxt with open(train_proto,'w')as f: f.write(str(Lenet(train_list,batch_size=64))) #写入test.prototxt with open(test_proto,'w')as f: f.write(str(Lenet(test_list,batch_size=100,include_acc=True))) #编写一个函数,生成参数文件 def gen_solver(solver_file,train_net,test_net): s=proto.caffe_pb2.SolverParameter() s.train_net=train_net s.test_net.append(test_net) s.test_interval=938#60000/64,测试间隔参数:训练完一次所有的图片,进行一次测试 s.test_iter.append(500)#50000/100测试迭代次数,需要迭代500次,才完成一次所有数据的测试 s.max_iter=9380#10 epochs,938*10,最大训练次数 s.base_lr=0.01#基础学习率 s.momentum=0.9#动量 s.weight_decay=5e-4#权值衰减项 s.lr_policy='step'#学习率变化规则 s.stepsize=3000#学习率变化频率 s.gamma=0.1#学习率变化指数 s.display=20#屏幕显示间隔 s.snapshot=938#保存caffemodel的间隔 s.snapshot_prefix=root+'mnist/lenet'#caffemodel前缀 s.type='SGD'#优化算法 s.solver_mode=proto.caffe_pb2.SolverParameter.GPU#加速 #写入solver.prototxt with open(solver_file,'w')as f: f.write(str(s)) #开始训练 def training(solver_proto): caffe.set_device(0) caffe.set_mode_gpu() solver=caffe.SGDSolver(solver_proto) solver.solve() # if __name__=='__main__': write_net() gen_solver(solver_proto,train_proto,test_proto) training(solver_proto) 我将此文件放在根目录下的mnist文件夹下,因此可用以下代码执行 sudo python mnist/mnist.py
综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/128775.html
本文主要是给大家介绍了caffe的python插口生成deploy文件学习培训及其用练习好一点的实体模型(caffemodel)来归类新的图片实例详细说明,感兴趣的小伙伴可以参考借鉴一下,希望可以有一定的帮助,祝愿大家多多的发展,尽早涨薪 caffe的python插口生成deploy文件 假如要将练习好一点的实体模型用于检测新的图片,那必然必须得一个deploy.prototxt文件,这一...
此篇文章主要是给大家介绍了caffe的python插口制作loss和accuracy曲线图实例详细说明,感兴趣的小伙伴可以参考借鉴一下,希望可以有一定的帮助,祝愿大家多多的发展,尽早涨薪 前言 使用python插口来运行caffe程序流程,根本原因是python很容易数据可视化。所以才建议大家在cmd下边运行python程序流程。如果一定要在cmd下边运作,不如直接用c++算了。 强烈推...
此篇文章关键给大家介绍了python格式Caffe图片数据信息均值测算学习培训实例详细说明,感兴趣的小伙伴可以参考借鉴一下,希望可以一些帮助,祝愿大家多多的发展,尽早涨薪 前言 照片减掉均值后,然后再进行练习和检测,也会提高速度与精密度。因而,通常在各类实体模型中都有这种操作。 那么这样的均值是怎么来的呢,实际上是测算全部svm分类器的均值,计算出来后,储存为均值文档,在今后的检测中,就...
摘要:七强化学习玩转介绍了使用创建来玩游戏将连续的状态离散化。包括输入输出独热编码与损失函数,以及正确率的验证。 用最白话的语言,讲解机器学习、神经网络与深度学习示例基于 TensorFlow 1.4 和 TensorFlow 2.0 实现 中文文档 TensorFlow 2 / 2.0 官方文档中文版 知乎专栏 欢迎关注我的知乎专栏 https://zhuanlan.zhihu.com/...
阅读 889·2023-01-14 11:38
阅读 833·2023-01-14 11:04
阅读 684·2023-01-14 10:48
阅读 1887·2023-01-14 10:34
阅读 891·2023-01-14 10:24
阅读 750·2023-01-14 10:18
阅读 479·2023-01-14 10:09
阅读 519·2023-01-14 10:02