caffe项目实战代码

 

生成solver文件:

from caffe.proto import caffe_pb2

s = caffe_pb2.SolverParameter()
s.train_net = "train.prototxt"  # 定义网络名为trai.prototxt
s.test_net.append("test.prototxt")  # 定义测试网络

s.test_interval = 100
s.test_iter.append(10)
# 定义最大迭代次数
s.max_iter = 1000
s.base_lr = 0.1
# 定义学习率衰减率
s.weight_decay = 5e-4
# 义学习率更新方式
s.lr_policy = "step"
# 定义网络打印间隔
s.display = 10
# 定义模型和存储间隔
s.snapshop = 10.
# 定义模型存放路径
s.snapshop_prefix_prefix = "model"
s.type="SGD"
s.solver_mode=caffe_pb2.SolverParameter.GPU  #定义网络优化使用gpu



#生成solver文件s.prototxt
with open('net/s.prototxt','w') as f:
    f.write(str(s))

 

创建create_net.py 生成网络:

# 生成caffe网络
import caffe

def create_net():
    net=caffe.NetSpec()  #生成网络net,用于放layer层

    # 定义数据层, 定义成lmdb数据格式
    # 参数ntop=2,表示数据种类的格式有2个分别为data和label
    net.data,net.label = caffe.layers.Data(source="data.lmdb",
                                           backend=caffe.params.Data.LMDB,
                                           batch_size=32,
                                           ntop=2,
                                           transform_param=dict(crop_size=40,mirror=True)
                                           )

    # 定义卷积层 输入为data层,核数20,weight_filter卷积核初始化参数
    net.conv1=caffe.layers.Convolution(net.data,
                                       num_output=20,
                                       kernel_size=5,
                                       weight_filter={'type':'xavier'},
                                       bias_filter={'type':'xavier'}
                                       )

    # 定义激活层
    net.relu1=caffe.layers.ReLU(net.conv1,in_place=True)

    # 定义池化层
    net.pool1=caffe.layers.Pooling(net.relu1,pool=caffe.params.Pooling.MAX,
                                   kernel_size=3,stride=2)
    # 上述是定义了一层  如果有多层  将卷积层+relu+池化 重复几遍即可, 要修改核数 or 核大小 or padding

    # 定义全连接层 fc输出为1024
    net.fc3=caffe.layers.InnerProduct(net.pool1,num_output=1024,weight_filter=dict(type='xavier'))

    #定义激活函数
    net.relu2=caffe.layers.ReLU(net.fc3,in_place=True)

    #定义dropout层
    net.drop = caffe.layers.Dropout(net.relu2,dropout_param=dict(dropout_ratio=0.5))

    # 定义输出层
    net.loss=caffe.layers.SoftmaxWithLoss(net.fc3,net.label)

    #将网络写入文件中,即生成prototxt文件
    with open('net/tt.prototxt','w') as f:
        f.write(str(net.to_proto))  # to_proto方法生成prototxt文件




if __name__ == '__main__':
    create_net()

 

posted @ 2021-06-15 01:55  yunfengding  阅读(100)  评论(0编辑  收藏  举报