文中主要是给大家介绍了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/...
阅读 1143·2023-01-14 11:38
阅读 1136·2023-01-14 11:04
阅读 969·2023-01-14 10:48
阅读 2494·2023-01-14 10:34
阅读 1223·2023-01-14 10:24
阅读 1104·2023-01-14 10:18
阅读 721·2023-01-14 10:09
阅读 800·2023-01-14 10:02