使用caffe框架训练后得到的权重通过Google Protobuf来存储为.caffemodel的二进制文件,为了更好地更改网络结构和对已有的caffemodel进行finetune,通常我们需要修改一些参数,去为了更好的适应我们自己设计的网络结构并进行训练 
好在caffe的Python接口提供了针对caffemodel文件的修改方法 
为了更好地可视化,这里使用了Python的jupyter notebook工具 
1、读取caffemodel里的权值

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inlinecaffe_root = 'F:/caffe_BLVC_VS2013/caffe-windows/'  # 设置caffe的根目录
import sys
sys.path.insert(0, caffe_root + 'python')import caffe  #导入caffe
caffe.set_mode_gpu()  #设置为gpu模式
# 载入网络,列出各个层的名字
net = caffe.Net('F:/python/make_prototxt/mnist/deploy.prototxt', caffe.TEST)
print("blobs {}\nparams {}".format(net.blobs.keys(), net.params.keys()))

输出如下:

blobs [‘data’, ‘conv1’, ‘pool1’, ‘conv2’, ‘pool2’, ‘fc1’, ‘ADD’, ‘ADD2’, ‘fc2’, ‘prob’] 
params [‘conv1’, ‘conv2’, ‘fc1’, ‘ADD’, ‘ADD2’, ‘fc2’]

将全连接层的维度打印出来

# Load the original network and extract the fully connected layers' parameters.
net = caffe.Net('F:/python/make_prototxt/mnist/deploy.prototxt', 'F:/python/make_prototxt/mnist/model/mnist_iter_9380.caffemodel', caffe.TEST)
params = ['fc1','ADD','ADD2','fc2']
# fc_params = {name: (weights, biases)}
fc_params = {pr: (net.params[pr][0].data, net.params[pr][1].data) for pr in params}for fc in params:print '{} weights are {} dimensional and biases are {} dimensional'.format(fc, fc_params[fc][0].shape, fc_params[fc][1].shape)

输出如下:

fc1 weights are (500L, 800L) dimensional and biases are (500L,) dimensional 
ADD weights are (500L, 500L) dimensional and biases are (500L,) dimensional 
ADD2 weights are (500L, 500L) dimensional and biases are (500L,) dimensional 
fc2 weights are (10L, 500L) dimensional and biases are (10L,) dimensional

2、将网络中的参数保存为新的model

net.save('F:/python/make_prototxt/mnist/get.caffemodel')
# Load the original network and extract the fully connected layers' parameters.
net = caffe.Net('F:/python/make_prototxt/mnist/deploy.prototxt', 'F:/python/make_prototxt/mnist/get.caffemodel', caffe.TEST)
params = ['fc1','ADD','ADD2','fc2']
# fc_params = {name: (weights, biases)}
fc_params = {pr: (net.params[pr][0].data, net.params[pr][1].data) for pr in params}for fc in params:print '{} weights are {} dimensional and biases are {} dimensional'.format(fc, fc_params[fc][0].shape, fc_params[fc][1].shape)

输出如下:

fc1 weights are (500L, 800L) dimensional and biases are (500L,) dimensional 
ADD weights are (500L, 500L) dimensional and biases are (500L,) dimensional 
ADD2 weights are (500L, 500L) dimensional and biases are (500L,) dimensional 
fc2 weights are (10L, 500L) dimensional and biases are (10L,) dimensional

这种方法只能在原有的结构上进行权值的修改,而不能对原有结构进行修改

读取和修改caffemodel文件相关推荐

  1. 读取和修改caffemodel文件里的参数

      基于caffe 的卷积神经网络模型训练后得到的权值是通过Google Protobuf来存储的后缀名为.caffemodel的二进制文件,这类文件一般很难直接打开进行权值的读取和修改.有的时候我们 ...

  2. java读取并修改xml文件

    java读取并修改xml文件 java如何读取xml并且修改xml文件呢?代码如下: //复制模板xnl File file = new File(xmlSavePath + "/mb.xm ...

  3. php读取大文件某行内容,PHP读取和修改大文件的某行内容_PHP教程

    最近碰到一个比较有趣的问题,就是修改某个文件的某一行字符,不过文件太大,file()直接读取是不可能的,我使用fgets来跳转到指定行,并用fwrite修改某个字符串: $fp = fopen(d:/ ...

  4. python关闭excel文件_利用Python读取和修改Excel文件(包括xls文件和xlsx文件)

    本文介绍一下使用Python对Excel文件的基本操作,包括使用xlrd模块读取excel文件,使用xlwt模块将数据写入excel文件,使用openpyxl模块读取写入和修改excel文件. 目录 ...

  5. Mac只能读取不能修改硬盘文件怎么办

    很多小伙伴在使用Mac系统的时候,往往会发现这样一个问题,插入移动硬盘后,在Mac上只能读取却不能对文件进行编辑.下面,小编将给您介绍一种便捷的解决办法. 图片1:Macbook 产生这个问题的原因大 ...

  6. java 读取带section_手把手教你实现类似ini4j的方式创建读取和修改.ini文件(支持section)...

    背景 由于这次任务是和c语言合作编写的,刚开始使用ini4j来操作.ini文件,然后由于ini4j对存储的数据做了转义处理,导致c无法正常读取,他们也是采用开源的框架,然后由于java方只有我一个人, ...

  7. python处理xml文件_Python解析并修改XML文件

    XML 本质上只是一种数据格式,它的本意并不是管理数据,因此,在 XML 应用中,数据的管理仍然要借助数据库,尤其是当数据量很大.性能要求很高的时候. XML数据库具有以下优势: XML数据库能够对半 ...

  8. python读取excel内容和写入_Python读取和写入Excel文件

    制作Excel表 常用方法说明 Workbook类 Workbook类创建一个XlswWrite的Workbook对象,相当于创建一个excel表 And_worksheet()用来创建工作表,默认为 ...

  9. [QT操作XML]QT读写XML文件,QT修改XML文件

    [QT操作XML]QT读写XML文件 XML简介 QT操作XML,写入.读取.修改 XML效果演示 XML简介 概念:Extensible Markup Language 可扩展标记语言(可扩展:标签 ...

  10. node 修改html文件路径,好程序员前端教程-nodejs如何读取文件夹目录的内容

    好程序员前端教程-nodejs如何读取文件夹目录的内容? 首先,nodejs中文件,目录的操作,我们对fs文件系统分为两类操作,第一类是xxx方法,第二类是xxxSync方法.所有的fs操作几乎都是这 ...

最新文章

  1. java adobe pdf转word_原来PDF转Word这么简单!现在才知道
  2. 计算机统考408卷子谁批,【计算机统考】你对计算机统考408了解有多少?
  3. 【面试系列】6种单例模式(Singleton)实现方法比较
  4. java task多线程_JAVA语言-多线程实现的四种方式
  5. Factorial Trailing Zeroes
  6. 人生第一个过 5K Star 的 项目 x-spreadsheet 感谢各位大佬的支持
  7. 子查询dinstinct放哪_第四关 复杂查询
  8. ngnix高并发的原理实现(转)
  9. 20年研发安全积累,5大研发安全能力让软件“天生安全”
  10. 小米机器人 尘盒配件_石头扫地机器人T6评测:一款提升生活辛福感的宝物
  11. Discuz经典函数注释之authcode
  12. 二叉树的遍历实验报告C语言,数据结构-二叉树的遍历(类C语言描写叙述)
  13. iOS开发--获取时间
  14. java componentorientation_Java JLabel.applyComponentOrientation方法代码示例
  15. ubuntu下弹框提醒
  16. android自动清缓存,折腾Android系列 一键清理自动释放缓存
  17. MKS 在线编译工具使用说明书
  18. 装机大师无法发现linux硬盘,进入pe系统找不到硬盘的解决办法
  19. GD32F4 USB DFU IAP
  20. 观「招商银行」隐私计算布局的思考(36氪收录)

热门文章

  1. oracle数据库学习相关笔记-相关约束
  2. Redis字符串类型的操作
  3. linux之正则匹配命令学习笔记
  4. nginx的location优先级
  5. MSSQL 事务,视图,索引,存储过程,触发器
  6. Mac OS X 系统修改Terminal终端配色
  7. Exchange 2013反垃圾邮件功能
  8. 解决From 192.168.1.10: icmp_seq=1 Redirect Network(New nexthop: 192.168.1.1)问题
  9. NewSQL登堂入室 数据库厂商掘金行业大数据
  10. C#技术分享【PDF转换成图片——11种方案】