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()