介绍
本文主要详细介绍了caffe的python插口形成环境变量学习培训,希望能对大家有所帮助。

使用Python插口编写环境变量
如果大家想要更方便的编程语言来达到目的,Caffe提供了Matlab接口和Python插口,这些语言表达比较简单,并且很容易开展数据可视化,以便更快地学习培训和了解深度学习。
一年前,我在学习Caffe时,为了加深记忆,写了很多生活随笔,包含了多方面的Caffe学习内容。后来好多人问我关于Python插口和数据可视化方面的相关问题。现在有点儿空余时间,就又写了一些随笔,希望与大家一起学习。下面的实际操作都是练习以前的预备处理实际操作,无论是用哪种插口,都会用到。
编写环境变量
首先,我们需要了解如何编写环境变量。根据下方的编码去学习:
#-*-coding:utf-8-*-
"""
SpyderEditor
"""
fromcaffeimportlayersasL,paramsasP,to_proto
path='/home/xxx/data/'#保存数据和配置文件的路径
train_lmdb=path+'train_db'#训练数据LMDB文件的位置
val_lmdb=path+'val_db'#验证数据LMDB文件的位置
mean_file=path+'mean.binaryproto'#均值文件的位置
train_proto=path+'train.prototxt'#生成的训练配置文件保存的位置
val_proto=path+'val.prototxt'#生成的验证配置文件保存的位置
#编写一个函数,用于生成网络
defcreate_net(lmdb,batch_size,include_acc=False):
#创建第一层:数据层。向上传递两类数据:图片数据和对应的标签
data,label=L.Data(source=lmdb,backend=P.Data.LMDB,batch_size=batch_size,ntop=2,
transform_param=dict(crop_size=40,mean_file=mean_file,mirror=True))
#创建第二屋:卷积层
conv1=L.Convolution(data,kernel_size=5,stride=1,num_output=16,pad=2,weight_filler=dict(type='xavier'))
#创建激活函数层
relu1=L.ReLU(conv1,in_place=True)
#创建池化层
pool1=L.Pooling(relu1,pool=P.Pooling.MAX,kernel_size=3,stride=2)
conv2=L.Convolution(pool1,kernel_size=3,stride=1,num_output=32,pad=1,weight_filler=dict(type='xavier'))
relu2=L.ReLU(conv2,in_place=True)
pool2=L.Pooling(relu2,pool=P.Pooling.MAX,kernel_size=3,stride=2)
#创建一个全连接层
fc3=L.InnerProduct(pool2,num_output=1024,weight_filler=dict(type='xavier'))
relu3=L.ReLU(fc3,in_place=True)
#创建一个dropout层
drop3=L.Dropout(relu3,in_place=True)
fc4=L.InnerProduct(drop3,num_output=10,weight_filler=dict(type='xavier'))
#创建一个softmax层
loss=L.SoftmaxWithLoss(fc4,label)
ifinclude_acc:#在训练阶段,不需要accuracy层,但是在验证阶段,是需要的
acc=L.Accuracy(fc4,label)
returnto_proto(loss,acc)
else:
returnto_proto(loss)
defwrite_net():
#将以上的设置写入到prototxt文件
withopen(train_proto,'w')asf:
f.write(str(create_net(train_lmdb,batch_size=64)))
#写入配置文件
withopen(val_proto,'w')asf:
f.write(str(create_net(val_lmdb,batch_size=32,include_acc=True)))
if__name__=='__main__':
write_net()
根据以上的文件信息,大家就能得到两个环境变量:train.prototxt和val.prototxt,分别用于练习环节和检验环节。
将图片转换成LMDB文件
要形成环境变量,需要先将原始图片转换成LMDB文件才行。假如我们已经将原始图片保存到一个目录中(txt文件,一列一张照片),则可以用ImageData做为数据库键入,进行如下编码:
#-*-coding:utf-8-*-
fromcaffeimportlayersasL,paramsasP,to_proto
path='/home/xxx/data/'
train_list=path+'train.txt'
val_list=path+'val.txt'
train_proto=path+'train.prototxt'
val_proto=path+'val.prototxt'
defcreate_net(img_list,batch_size,include_acc=False):
data,label=L.ImageData(source=img_list,batch_size=batch_size,new_width=48,new_height=48,ntop=2,
transform_param=dict(crop_size=40,mirror=True))
conv1=L.Convolution(data,kernel_size=5,stride=1,num_output=16,pad=2,weight_filler=dict(type='xavier'))
relu1=L.ReLU(conv1,in_place=True)
pool1=L.Pooling(relu1,pool=P.Pooling.MAX,kernel_size=3,stride=2)
conv2=L.Convolution(pool1,kernel_size=53,stride=1,num_output=32,pad=1,weight_filler=dict(type='xavier'))
relu2=L.ReLU(conv2,in_place=True)
pool2=L.Pooling(relu2,pool=P.Pooling.MAX,kernel_size=3,stride=2)
conv3=L.Convolution(pool2,kernel_size=53,stride=1,num_output=32,pad=1,weight_filler=dict(type='xavier'))
relu3=L.ReLU(conv3,in_place=True)
pool3=L.Pooling(relu3,pool=P.Pooling.MAX,kernel_size=3,stride=2)
fc4=L.InnerProduct(pool3,num_output=1024,weight_filler=dict(type=&
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6825.html
