Python编写caffe代码
有时候,我们需要将网络使用caffe代码实现,人工手写容易出问题。可以使用Python完成网络编写。
卷积层:
def generate_conv_layer_no_bias(name, bottom, top, weight, num_output, kernel_h, kernel_w, pad_h, pad_w, std=0.01):conv_layer_str = '''layer {name: "%s"bottom: "%s"top: "%s"type: "Convolution"param { name: "%s"lr_mult: 1 decay_mult: 1 }convolution_param {num_output: %dkernel_h: %dkernel_w: %dpad_h: %dpad_w: %dstride: 1bias_term: falseweight_filler { type: "gaussian" std: %.5f }}
}\n'''%(name, bottom, top, weight, num_output, kernel_h, kernel_w, pad_h, pad_w, std)return conv_layer_str
激活函数
def generate_activation_layer(name, bottom, act_type="ReLU"):act_layer_str = '''layer {name: "%s"bottom: "%s"top: "%s"type: "%s"
}\n'''%(name, bottom, bottom, act_type)return act_layer_str
Eltwise层SUM
def generate_eltwise_layer(name, bottom0, bottom1, top):eltwise_layer_str = '''layer {name: "%s"bottom: "%s"bottom: "%s"top: "%s"type: "Eltwise"eltwise_param {operation: SUM}
}\n'''%(name, bottom0, bottom1, top)return eltwise_layer_str
个人定义层:
def generate_slice_layer(name, bottom, top, axis, num):slice_layer_str = '''layer {name: "%s"bottom: "%s"type: "Slice"\n'''%(name, bottom)for i in range(num):top_i = top + '_' + str(i+1)slice_layer_str += ''' top: "%s"\n'''%(top_i)slice_layer_str += ''' slice_param {axis: %d\n'''%(axis)for i in range(num - 1):slice_layer_str += ''' slice_point: %s\n'''%(str(i+1))slice_layer_str += ''' }
}\n'''return slice_layer_strdef generate_concat_layer(name, bottom, top, last, axis, num):concat_layer_str = '''layer {name: "%s"type: "Concat"\n'''%(name)for i in range(num - 1):bottom_i = bottom + '_' + str(i+1)concat_layer_str += ''' bottom: "%s"\n'''%(bottom_i)bottom_last = last + '_' + str(num)concat_layer_str += ''' bottom: "%s"\n'''%(bottom_last)concat_layer_str += ''' top: "%s"concat_param {axis: %d}
}\n'''%(top, axis)return concat_layer_str
将这些层连接起来:
def generate_SCNN(args):network_str = generate_slice_layer('Slice1', args.bottom, 'slice1', 2, args.h)std = math.sqrt(2. / (args.kw * args.channel * 5))# Build SCNN downwardfor i in range(1, args.h):name = 'SCNN_D_' + str(i)if i == 1:bottom = 'slice1_1'else:bottom = nametop = 'SCNN_D_' + str(i) + '/message'target = 'slice1_' + str(i + 1)summation = 'SCNN_D_' + str(i + 1)network_str += generate_conv_layer_no_bias(name, bottom, top, 'SCNN_D_w', args.channel, 1, args.kw, 0, (args.kw-1)/2, std)network_str += generate_activation_layer(name+'/relu', top)network_str += generate_eltwise_layer(name+'/sum', top, target, summation)# Build SCNN upwardfor i in range(args.h, 1, -1):name = 'SCNN_U_' + str(i)top = name+ '/message'if i == args.h:bottom = 'SCNN_D_' + str(i)else:bottom = 'SCNN_U_' + str(i)if i == 2:target = 'slice1_1'else:target = 'SCNN_D_' + str(i - 1)summation = 'SCNN_U_' + str(i - 1)network_str += generate_conv_layer_no_bias(name, bottom, top, 'SCNN_U_w', args.channel, 1, args.kw, 0, (args.kw-1)/2, std)network_str += generate_activation_layer(name+'/relu', top)network_str += generate_eltwise_layer(name+'/sum', top, target, summation)network_str += generate_concat_layer('Concat1', 'SCNN_U', 'SCNN_U', 'SCNN_D', 2, args.h)network_str += generate_slice_layer('Slice2', 'SCNN_U', 'slice2', 3, args.w)# Build SCNN rightwardfor i in range(1, args.w):name = 'SCNN_R_' + str(i)if i == 1:bottom = 'slice2_1'else:bottom = nametop = 'SCNN_R_' + str(i) + '/message'target = 'slice2_' + str(i + 1)summation = 'SCNN_R_' + str(i + 1)network_str += generate_conv_layer_no_bias(name, bottom, top, 'SCNN_R_w', args.channel, args.kw, 1, (args.kw-1)/2, 0, std)network_str += generate_activation_layer(name+'/relu', top)network_str += generate_eltwise_layer(name+'/sum', top, target, summation)# Build SCNN leftwardfor i in range(args.w, 1, -1):name = 'SCNN_L_' + str(i)top = name + '/message'if i == args.w:bottom = 'SCNN_R_' + str(i)else:bottom = 'SCNN_L_' + str(i)if i == 2:target = 'slice2_1'else:target = 'SCNN_R_' + str(i - 1)summation = 'SCNN_L_' + str(i - 1)network_str += generate_conv_layer_no_bias(name, bottom, top, 'SCNN_L_w', args.channel, args.kw, 1, (args.kw-1)/2, 0, std)network_str += generate_activation_layer(name+'/relu', top)network_str += generate_eltwise_layer(name+'/sum', top, target, summation)network_str += generate_concat_layer('Concat2', 'SCNN_L', 'SCNN', 'SCNN_R', 3, args.w)return network_strdef main():args = parse_args()scnn_pt = generate_SCNN(args)fp = open(args.output, 'w')fp.write(scnn_pt)fp.close()if __name__ == '__main__':main()
其实就是将特定的参数参数传入到字符传中,写到文件中。
样例:https://download.csdn.net/download/ziyouyi111/10507394
Python编写caffe代码相关推荐
- python对电脑最低要求-用Python编写的代码瑕疵程度最低
很多人感觉用Python编写程序效率高,速度那么愉快,会不会是在牺牲很多代码可读性与完整程度的基础上建立的啊. 根据国外一家开发测试服务的公司Coverity研究的结果,Python代码瑕疵密度是最低 ...
- python编写hadoop代码
这是一个只有mapper的任务代码: 主要有两个文件,一个是shell脚本文件,主要是执行hadoop命令,一个是用python编写的mapper脚本文件 首先看下shell脚本文件, #cat ...
- 使用python编写IRC代码
IRC是一种网络聊天协议,我们可以使用Python编写IRC客户端或服务器的代码. 如果你想编写一个IRC客户端,你可以使用Python的socket模块来建立和管理TCP连接,使用socket发送和 ...
- python编写圣诞树代码_python 实现圣诞树
#python代码实现圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() ...
- python编写爬虫代码_python编写简单爬虫资料汇总
爬虫真是一件有意思的事儿啊,之前写过爬虫,用的是urllib2.BeautifulSoup实现简单爬虫,scrapy也有实现过.最近想更好的学习爬虫,那么就尽可能的做记录吧.这篇博客就我今天的一个学习 ...
- VS2010调用python编写的代码error:cannot open file 'python27_d.lib'.
转载自:http://guangboo.org/2013/01/17/solution-link-errorcannot-open-file-python27_dlib 使用C调用Python函数或解 ...
- python编写圣诞树代码_圣诞节啊,用Python写一棵圣诞树出来
实图: 效果如图:哈哈哈哈哈... Python源代码: from random import randint from time import sleepimport coloramafrom co ...
- python编写生日代码_python学习5--生成日期/生日
前言 python接口自动化添加员工信息时,需要填写生日,批量添加员工,如何随机生成生日呢? python提供了一个time和calendar模块可以用于格式化日期和时间. 一.了解python3 日 ...
- python编写时钟代码
# !/urs/bin/ python # _*_ coding: utf-8 # !/usr/bin/env python # -*- coding:utf-8 -*- import turtle ...
最新文章
- 还在 for 循环里使用 + 拼接字符串?明天不用来上班了!
- 实战:使用 OpenCV 和 PyTesseract 对文档进行OCR
- Project Euler 50 Consecutive prime sum
- 程承熊LEE微购店的买家秀
- Redis进阶-lua脚本
- python输入hello*3_python入门到实践-Hello Python3
- python分析UFO报道数据
- (八)ASP.NET自定义用户控件(1)
- idea中mapper.xml的头文件配置
- linux 终端 拼音,告诉你Ubuntu中文智能拼音输入法配置的方法及命令
- 2022-2027年(新版)中国工程造价咨询行业现状动态与未来前景预测报告
- Linux-zip和unzip命令
- 解决Tomcat乱码
- echarts 柱状图+折线图
- 转录组学分析之基因芯片的预处理
- python如何求偏导_求偏导数怎样做啊
- 安卓Dalvik VM虚拟机
- HashMap线程安全问题详细解析
- 计算机培训通讯报道,新员工培训通讯稿3篇
- c语言课设航班信息管理软件管理系统,c语言航班信息查询系统实验报告.doc
热门文章
- iOS 瀑布流布局实现详解
- CentOS 系统添加网卡
- 使用Bootstrap + Vue.js实现 添加删除数据
- 微信查询订单API与商派ecstore订单状态对接
- 优化Flash中的3D模型加载
- TRUNCATE和DELETE有以下几点区别
- opencv获取mat的指针_数字图像处理之opencv中Mat数据操作
- sdh管理单元指针_SDH设备上STM-1接口是啥玩意
- OpenJudge NOI 1.7 28:单词倒排
- 信息学奥赛一本通 1043:整数大小比较 | OpenJudge NOI 1.4 05