caffe for windows的python接口学习(2)生成配置文件

10 篇文章 0 订阅

先验知识:
(1)如何配置caffe for windows的python接口;
(2)如何将图片转换成LMDB格式;
(3)如何计算训练数据的均值文件。

我们知道。Caffe是用C++语言写的,C++是一门相对比较复杂的语言,可能很多人不太熟悉,因此想用更为简单的脚本语言来实现。

Caffe提供matlab和python接口,这两种语言就非常简单,而且非常容易进行可视化,使得我们的学习更加快速,理解更加深入。

在初步用了caffe for windows之后,我决定采用python接口。python是一门以前没有接触过的语言,所以在此记录了一些使用过程中的笔记。

首先,我按照前面的内容配置了python接口,紧接着第一步要做的,就是写配置文件。将通过下面的代码来学习:

from __future__ import print_function
from caffe import layers as L,params as P,to_proto
from caffe.proto import caffe_pb2
path='E:/CaffeDev/caffe-master/data/mypython1/'
#保存数据和配置文件的路径
train_lmdb=path+'train_db'
val_lmdb=path+'val_db'
#意思是说train_lmdb和val_lmdb是两个路径的名字
mean_file=path+'mean.binaryproto'
#意思是说mean_file是一个路径
train_proto=path+'train.prototxt'
val_proto=path+'val.prototxt'
#意思是train.prototxt和val.prototxt同样生成后放在这个路径下面

#现在我们编写一个网络,用于生成网络
def create_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'))

    loss=L.SoftmaxWithLoss(fc4,label)

    #在训练阶段,不需要accuracy层,但是在验证阶段,是需要的
    if include_acc:
        acc=L.Accuracy(fc4,label)
        return to_proto(loss,acc)
    else:
        return to_proto(loss)

def write_net():
    #将以上的设置写入到prototxt文件
    with open(train_proto, 'w') as f:
        f.write(str(create_net(train_lmdb,batch_size=64)))

    #写入配置文件
    with open(val_proto, 'w') as f:
        f.write(str(create_net(val_lmdb,batch_size=32,include_acc=True)))


if __name__ == '__main__':
    write_net()

通过上面这个文件的执行,将会在相应的路径下得到两个配置文件:train.prototxt和val.prototxt,分别用于训练阶段和验证阶段。

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值