有时候,我们需要将网络使用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代码相关推荐

  1. python对电脑最低要求-用Python编写的代码瑕疵程度最低

    很多人感觉用Python编写程序效率高,速度那么愉快,会不会是在牺牲很多代码可读性与完整程度的基础上建立的啊. 根据国外一家开发测试服务的公司Coverity研究的结果,Python代码瑕疵密度是最低 ...

  2. python编写hadoop代码

    这是一个只有mapper的任务代码: 主要有两个文件,一个是shell脚本文件,主要是执行hadoop命令,一个是用python编写的mapper脚本文件 首先看下shell脚本文件, #cat    ...

  3. 使用python编写IRC代码

    IRC是一种网络聊天协议,我们可以使用Python编写IRC客户端或服务器的代码. 如果你想编写一个IRC客户端,你可以使用Python的socket模块来建立和管理TCP连接,使用socket发送和 ...

  4. python编写圣诞树代码_python 实现圣诞树

    #python代码实现圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() ...

  5. python编写爬虫代码_python编写简单爬虫资料汇总

    爬虫真是一件有意思的事儿啊,之前写过爬虫,用的是urllib2.BeautifulSoup实现简单爬虫,scrapy也有实现过.最近想更好的学习爬虫,那么就尽可能的做记录吧.这篇博客就我今天的一个学习 ...

  6. VS2010调用python编写的代码error:cannot open file 'python27_d.lib'.

    转载自:http://guangboo.org/2013/01/17/solution-link-errorcannot-open-file-python27_dlib 使用C调用Python函数或解 ...

  7. python编写圣诞树代码_圣诞节啊,用Python写一棵圣诞树出来

    实图: 效果如图:哈哈哈哈哈... Python源代码: from random import randint from time import sleepimport coloramafrom co ...

  8. python编写生日代码_python学习5--生成日期/生日

    前言 python接口自动化添加员工信息时,需要填写生日,批量添加员工,如何随机生成生日呢? python提供了一个time和calendar模块可以用于格式化日期和时间. 一.了解python3 日 ...

  9. python编写时钟代码

    # !/urs/bin/ python # _*_ coding: utf-8 # !/usr/bin/env python # -*- coding:utf-8 -*- import turtle ...

最新文章

  1. 还在 for 循环里使用 + 拼接字符串?明天不用来上班了!
  2. 实战:使用 OpenCV 和 PyTesseract 对文档进行OCR
  3. Project Euler 50 Consecutive prime sum
  4. 程承熊LEE微购店的买家秀
  5. Redis进阶-lua脚本
  6. python输入hello*3_python入门到实践-Hello Python3
  7. python分析UFO报道数据
  8. (八)ASP.NET自定义用户控件(1)
  9. idea中mapper.xml的头文件配置
  10. linux 终端 拼音,告诉你Ubuntu中文智能拼音输入法配置的方法及命令
  11. 2022-2027年(新版)中国工程造价咨询行业现状动态与未来前景预测报告
  12. Linux-zip和unzip命令
  13. 解决Tomcat乱码
  14. echarts 柱状图+折线图
  15. 转录组学分析之基因芯片的预处理
  16. python如何求偏导_求偏导数怎样做啊
  17. 安卓Dalvik VM虚拟机
  18. HashMap线程安全问题详细解析
  19. 计算机培训通讯报道,新员工培训通讯稿3篇
  20. c语言课设航班信息管理软件管理系统,c语言航班信息查询系统实验报告.doc

热门文章

  1. iOS 瀑布流布局实现详解
  2. CentOS 系统添加网卡
  3. 使用Bootstrap + Vue.js实现 添加删除数据
  4. 微信查询订单API与商派ecstore订单状态对接
  5. 优化Flash中的3D模型加载
  6. TRUNCATE和DELETE有以下几点区别
  7. opencv获取mat的指针_数字图像处理之opencv中Mat数据操作
  8. sdh管理单元指针_SDH设备上STM-1接口是啥玩意
  9. OpenJudge NOI 1.7 28:单词倒排
  10. 信息学奥赛一本通 1043:整数大小比较 | OpenJudge NOI 1.4 05