tensorflow2caffe(1) : caffemodel解析,caffemodel里面到底记录了什么?

caffe模型训练与使用(windows平台) 本文训练模型是在 windows 系统上完成的,在训练模型之前,需要在自己的设备上编译好 caffe 。windows 下编译 caffe 的教程:https://blog.youkuaiyun.com/apple_54470279/article/details/124993901程序已打包,下载地址:百度网盘下载为了方便访问文件,建议先建一个文件夹,用来存放本次训练过程中的所有文件。比如,我在桌面上新建了一个名为 的文件夹,因此在本文中,我的所有文件都是在这个文件夹中进行编写的。我在训练的过程中参考了很多文章,也 阅读详情

   在本文正式开始之前,笔者要先和各位读者朋友们道个歉。因为身为研一小白的笔者实在身不由己,除了各种任务之外,还要应付繁忙的课程,忙于各种考试像一只咸鱼。因此耽误了博文的撰写,对不起各位读者朋友,笔者在忙完6月进入研二之后一定再接再厉。下面开始干货~

   本篇还是一个插播的博客,旨在向大家分享caffemodel里面记录的信息。在我们使用caffe框架训练网络时,最终总会生成一个caffemodel,我们大概知道里面记录了模型的参数。而作为初学者的笔者,总是不分青红皂白地就直接在模型的验证阶段就调用了。从来没有去看过caffemodel里面到底讲了什么,那么,本篇中笔者就解析一下caffemodel。

   有读者朋友未免会问,笔者是出于什么目的想解析caffemodel的呢?这说来话长,是笔者最近做的项目需要将model拆开并进行改动,因此需要去解析caffemodel。那么笔者是怎么摸索的呢?各位读者朋友们是否还记得,笔者前两期的博客里面提及的caffe官方提供的classification.cpp文件,里面在执行Classifier类的构造函数的时候,有一个net_指针,并且执行了一个操作:

[cpp]  view plain  copy
  1. net_->CopyTrainedLayersFrom(trained_file);  

   这个CopyTrainedLayersFrom函数就是从caffemodel里面载入我们需要的参数了。然后笔者就从这个函数开始挖,进入net.cpp文件:

[cpp]  view plain  copy
  1. template <typename Dtype>  
  2. void Net<Dtype>::CopyTrainedLayersFrom(const string trained_filename) {  
  3.   if (H5Fis_hdf5(trained_filename.c_str())) {  
  4.     CopyTrainedLayersFromHDF5(trained_filename);  
  5.   } else {  
  6.     CopyTrainedLayersFromBinaryProto(trained_filename);  
  7.   }  
  8. }  

   在这里很明显执行了else下面的语句,从二进制文件中去读取了参数,然后,笔者又找到了CopyTrainedLayersFromBinaryProto函数,很巧就在CopyTrainedLayersFrom函数的下方:

[cpp]  view plain  copy
  1. template <typename Dtype>  
  2. void Net<Dtype>::CopyTrainedLayersFromBinaryProto(  
  3.     const string trained_filename) {  
  4.   NetParameter param;  
  5.   ReadNetParamsFromBinaryFileOrDie(trained_filename, &parm);  
  6.   CopyTrainedLayersFrom(param);  
  7. }  

   在里面首先执行了一个ReadNetParamsFromBinaryFileOrDie函数,把二进制文件中的参数读到parm里面,parm是一个NetParameter类型的,NetParameter继承了实际是一个Message,Message是proto类型的,详细的笔者后话解析。然后笔者去找了一下ReadNetParamsFromBinaryFileOrDie函数,这个函数在upgrade_proto.cpp里面:

 

[cpp]  view plain  copy
  1. void ReadNetParamsFromBinaryFileOrDie(const string& param_file,  
  2.                                       NetParameter* param) {  
  3.   CHECK(ReadProtoFromBinaryFile(param_file, param))  
  4.       << "Failed to parse NetParameter file: " << param_file;  
  5.   UpgradeNetAsNeeded(param_file, param);  
  6. }  
   这个函数完成的功能是首先进行ReadProtoFromBinaryFile,然后执行了一个更新的操作。然后笔者就去找这个ReadProtoFromBinaryFile函数,这个函数在io.cpp里面:

[cpp]  view plain  copy
  1. bool ReadProtoFromBinaryFile(const char* filename, Message* proto) {  
  2.   int fd = open(filename, O_RDONLY);  
  3.   CHECK_NE(fd, -1) << "File not found: " << filename;  
  4.   ZeroCopyInputStream* raw_input = new FileInputStream(fd);  
  5.   CodedInputStream* coded_input = new CodedInputStream(raw_input);  
  6.   coded_input->SetTotalBytesLimit(kProtoReadBytesLimit, 536870912);  
  7.   
  8.   bool success = proto->ParseFromCodedStream(coded_input);  
  9.   
  10.   delete coded_input;  
  11.   delete raw_input;  
  12.   close(fd);  
  13.   return success;  
  14. }  

   这个函数就比较底层了,读者朋友们可以看到,这个函数里面就使用了open函数,和一些底层的google::protobuf的数据流。在这里我们其实就明白,是先把二进制文件(caffemodel)转化成文件流,再放入proto里面。

   那么,笔者大胆猜想,能读就能写。

   其实io.cpp里面已经定义了这种接口:

[cpp]  view plain  copy
  1. void WriteProtoToTextFile(const Message& proto, const char* filename) {  
  2.   int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644);  
  3.   FileOutputStream* output = new FileOutputStream(fd);  
  4.   CHECK(google::protobuf::TextFormat::Print(proto, output));  
  5.   delete output;  
  6.   close(fd);  
  7. }  

   也就是说:先用ReadProtoFromBinaryFile函数将二进制文件读入proto里面,再将proto文件读入txt文件就行了。

   笔者迫不及待地拿lenet网络训练生成的caffemodel做了个测试:

[cpp]  view plain  copy
  1. #include <caffe/caffe.hpp>  
  2. #include <google/protobuf/io/coded_stream.h>  
  3. #include <google/protobuf/io/zero_copy_stream_impl.h>  
  4. #include <google/protobuf/text_format.h>  
  5. #include <algorithm>  
  6. #include <iosfwd>  
  7. #include <memory>  
  8. #include <string>  
  9. #include <utility>  
  10. #include <vector>  
  11. #include <iostream>  
  12. #include "caffe/common.hpp"  
  13. #include "caffe/proto/caffe.pb.h"  
  14. #include "caffe/util/io.hpp"  
  15.   
  16. using namespace caffe;  
  17. using namespace std;  
  18. using google::protobuf::io::FileInputStream;  
  19. using google::protobuf::io::FileOutputStream;  
  20. using google::protobuf::io::ZeroCopyInputStream;  
  21. using google::protobuf::io::CodedInputStream;  
  22. using google::protobuf::io::ZeroCopyOutputStream;  
  23. using google::protobuf::io::CodedOutputStream;  
  24. using google::protobuf::Message;  
  25.   
  26. int main()  
  27. {  
  28.     NetParameter proto;  
  29.     ReadProtoFromBinaryFile("/home/cvlab/files/caffe-master/data/mnist/lenet_iter_10000.caffemodel", &proto);  
  30.     WriteProtoToTextFile(proto, "/home/cvlab/files/caffe-master/data/mnist/test.txt");  
  31.     return 0;  
  32. }  

   笔者训练了一个lenet训练生成的二进制文件,并将其写入了一个名为test.txt的文件中。

   其对应的CMakeLists.txt文件为:

[cpp]  view plain  copy
  1. cmake_minimum_required (VERSION 2.8)  
  2.   
  3. project (pt_test)  
  4.   
  5. add_executable(pt_test pt.cpp)  
  6.   
  7. include_directories ( /home/cvlab/files/caffe-master/include  
  8.     /usr/local/include  
  9.     /usr/local/cuda/include  
  10.     /usr/include )  
  11.   
  12. target_link_libraries(pt_test  
  13.     /home/cvlab/files/caffe-master/build/lib/libcaffe.so  
  14.     /usr/lib/x86_64-linux-gnu/libglog.so  
  15.     /usr/lib/x86_64-linux-gnu/libboost_system.so  
  16.     )  
   编译执行:



   然后我们打开test.txt文件可以见到:



   一共43万多行,记录了lenet-5的网络参数。因为lenet-5使用了全连接层,因此参数规模是庞大的(全连接层的参数约占了总体参数规模的90%)。

   同时也可以看到,读出的二进制文件中参数规格是按照caffe.proto中协定的格式来的。

   到此,我们就能清晰地看到caffemodel中记载的数据和格式了。

   欢迎阅读笔者后续博客,各位读者朋友的支持与鼓励是我最大的动力!


written by jiong

故上兵伐谋,其次伐交,其次伐兵,其下攻城;攻城之法为不得已。

LED单元板驱动(HUB75接口) 开始之前先吐槽一下,搜这个的资料。要么都是Arduino,要么单片机的收费。小小的一个LED单元板,凭什么? 用Arduino是你速度快还是我ST,树莓派不好用?收费更离谱,这点东西还藏私?给你个中指凸。把原理都写出来看你怎么收费。 一、接口定义及原理 如图,有两个RGB通道,共占用6个IO。剩下的ABCDE为地址通道,LAT为行数据锁存通道,CLK为数据时钟,OE为低电平使能LED显示。图片这里没有E,证明它是16扫的,有E就会把B上面的地改为E。这样就是5位,2的5次方32扫。1. 阅读详情

相关推荐

linux 内核vxlan收发包流程

1.vxlan口收包处理流程 前面几章详细介绍了vxlan接口的使用,而且已经知道vxlan是 MAC IN UDP中的封装,因此,在解封装之前,一切按照原有流程走,在此复习一下内核收发包流程(驱动层的数据处理这次不再解析,直接从__netif_receive_skb_core开始) #物理网卡处理中断,触发softirq i40e_intr └─napi_schedule_irqoff #i40e softirq把包放到per cpu backlog,触发softirq i40e_napi_p

魏言华的博客 3823

解析caffe生成的caffemodel文件

要想了解caffe生成的caffemodel文件里的内容,我们就需要解析.caffemodel文件(caffemodel里不仅存储了权重和偏置等信息,还存储了整个训练网络的结构信息,即.prototxt信息,当然solver.prototxt信息是看不见的)。 1.单独查看 要是只是想看看权重信息正不正确(有时候学习率设置的太大,可能会导致梯度爆炸,但是又不确定的情况下,可以查看下caffem...

qq_21368481的博客 2万+

matlab 图像合成_用MATLAB做图像合成加雾的处理

众所周知,现在有很多算法来对图像进行去雾处理。但反之,对图像增加雾的代码却少之又少,本代码就是基于Matlab实现了对图像的加雾处理。该方法可用做雾天图像的合成数据集。代码公开如下:clear;clc; % close all; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%i...

weixin_35719260的博客 2060

Caffe到底训练出了个什么东西:caffemodel解析

Caffe中,数据的读取、运算、存储都是采用Google Protocol Buffer来进行的,所以首先来较为详细的介绍下Protocol Buffer(PB)。 PB是一种轻便、高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。是一种效率和兼容性都很优秀的二进制数

zzou清月灵兮的博客 8087

如何利用ADS中的耦合线设计带通滤波器并转换为HFSS模型

耦合线带通滤波器是一种常用的微带滤波器形式,由多个长度为四分之一波长的耦合线节组成,在所需频点形成谐振,构成滤波器的频率响应特性。首先我们先来了解一下耦合线带通滤波器的电路结构,见下图:包括两对耦合线,中间为公共连接点,其中两对耦合线的偶奇模阻抗为(Z1e,Z1o)和(Z2e,Z2o,端口输入阻抗为Z0)。2.指定一个初始奇偶模值,ADS优化出一个合适的结果,通过奇偶模值利用linecalc工具计算出微带耦合线尺寸。假设中心频率为2GHz,则对应频点的电长度为。5.运行结果,两个软件仿真结果基本一致。

auqihc的博客 2226

【Stata双重差分模型】双重差分DID的具体操作步骤

本案例将详细阐述如何使用双重差分法进行实证分析,并展示具体的STATA操作代码。

a519573917的博客 2万+

【Caffe】caffe框架讲解,解析修改caffemodel与prototxt

背景 pytorch转onnx后,onnx转tensorRT 各种问题。主要是TX2安装的tensorRT版本较低,也没有去刷机升级的想法。 尝试了 onnx-tensorRT 以及torch2trt 项目,完全没心思搞了。 还是按照标准流程 转caffe 然后部署到tensorRT ,TX2也有官方支持的caffe的脚本。 参考 1、Pytorch模型转Caffe模型小记 https://zhuanlan.zhihu.com/p/352750171 得到了pytorch2caffe工具: github.c

AbiUni(YY熊) 6658

SAP CPI 如何代理第三方接口?

代理接口是指在系统 A 和系统 B 之间引入一个中间层(如 SAP CPI),由中间层负责接收来自系统 A 的请求,进行必要的处理或转换,然后将请求转发给系统 B。由于 OData 服务通常使用 JSON 格式的数据,而某些内部系统可能需要 XML 格式,因此我们添加一个 JSON 到 XML 的转换器,以确保数据格式的兼容性。为了确保返回的数据格式符合内部系统的要求,添加一个 XML 到 JSON 的转换器,将 OData 服务的响应从 XML 转换为 JSON。在集成包中,添加一个新的集成流,命名为。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1747

caffe生成caffemodel以及利用caffemodel进行对自己的图片分类

前言:     前面介绍了在win10系统下搭建caffe的环境,其中也讲述了包括caffe对 python的接口支持,环境搭建成功后会在..\caffe-master\Build\x64\Release\下生成如下文件 并且在pycaffe目录下有caffe文件,caffe文件里面是如下文件,那么caffe对python的接口就成功了。 上面caffe对python的接口,我会在后

Forward no stop 7955

手把手教你用 Cursor 写一个完整的 Web 应用(含前后端 + 部署)

本文介绍如何利用Cursor AI工具从零开发一个完整的全栈待办事项Web应用。文章针对开发者常见痛点——无法独立完成项目闭环,提供了一套AI驱动的全栈开发范式。通过Vue3+Node.js+MySQL技术栈,全程由Cursor自动生成项目架构、前后端代码、数据库设计,并解决联调、部署等关键问题。重点展示了如何用AI完成:项目规划与架构设计、后端接口开发、前端页面实现、跨域联调、打包优化及云端部署全流程。该方法将传统需要3-5天的开发工作压缩至1小时内完成,产出规范可上线的项目,特别适合想突破"碎

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 632

结构力学本构模型:复合材料模型:复合材料热力学行为技术教程_2024-08-07_06-54-53.Tex

热塑性复合材料是一种由热塑性树脂基体和增强纤维组成的复合材料。与热固性复合材料不同,热塑性复合材料在加热时可以软化,冷却时硬化,这一过程可以重复进行,因此它们具有可回收和可再加工的特性。热塑性树脂,如聚酰胺(尼龙)、聚碳酸酯、聚醚醚酮(PEEK)等,与碳纤维、玻璃纤维等增强材料结合,可以制备出具有高强度、高刚度和良好耐热性的复合材料。热粘弹性理论是研究材料在温度变化和时间依赖性载荷作用下的变形和应力响应。复合材料,由于其独特的微观结构,展现出复杂的热粘弹性行为。

807

【tensorflow2caffe】一、caffemodel存储解析

在博客开始前,首先郑重感谢博主jiongnima的博客对我的帮助,我按照博主的方法顺利的把bcnn模型的tensorflow版转为caffe版,关于bcnn模型,它是个细粒度分类模型,我将在后续的博客中详细介绍。 首先隆重呈上博主的链接: https://blog.youkuaiyun.com/jiongnima/article/details/72904526 转模型系列博文的操作主...

zl3090的博客 916

2、TrustZone(内含链接)——长期学习内容

ARM系列学习路径整理,希望对大家有用。

HoneyIC的博客 231

【深度学习】Caffe: tensorflow的模型到底怎么转成caffemodel??(完整的流程+代码讲解)

tensorflow的模型到底怎么转成caffemodel? 1. 简介 一般情况下,LZ是使用tensorflow的,好像之前在学校只要python跑通,benchmark再刷高一点就行了。现在在公司,要把自己的模型进行移植,之前是后端的移植,最近前端也提了需求,前端一般都是用海思芯片,只支持caffe,所以为了先测试时间得把tf的模型转成caffemodel。 程序猿总有不会的,总有要学习的不...

Felaim的博客 1669

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

tensorflow2caffe(4) : caffemodel的生成与tensorflow2caffe框架转换的总结

本篇是tensorflow2caffe模型转换的最终章,描述了如何生成caffemodel和对tensorflow2caffe模型转换的一些总结,欢迎阅读与分享~

jiongnima的博客 6090

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

tensorflow框架到caffe框架的模型转换

本文参考以下系列内容: tensorflow2caffe(1) : caffemodel解析,caffemodel里面到底记录了什么? tensorflow2caffe(2) : 如何在tensorflow中取出模型参数 tensorflow2caffe(3) : 如何将tensorflow框架下训练得到的权重转化为caffe框架下的权重参数 tensorflow2caffe(4) : c...

loveliuzz的博客 1456

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

tensorflow训练出的参数转化为caffe框架下的.caffemodel模型

转https://my.youkuaiyun.com/jiongnima 1.目的:介绍caffemodel里面记录的信息。我们大概知道里面记录了模型的参数。 针对tensoeflow训练所得的结果,我们来看一下我们得到下面的文件         1.有一个checkpoint,这是一个训练结果的索引,里面记录的是我们在训练不同阶段保存的模型。首先大家要记住,这是一个很有用的文件。 2.有一...

shajie的博客 9453

【tensorflow2caffe】二 、tensorflow模型介绍以及参数提取

在博客开始前,首先郑重感谢博主jiongnima的博客对我的帮助,我按照博主的方法顺利的把bcnn模型的tensorflow版转为caffe版,关于bcnn模型,它是个细粒度分类模型,我将在后续的博客中详细介绍。 首先隆重呈上博主的链接: https://blog.youkuaiyun.com/jiongnima/article/details/78326515 转模型系列博文的操作主要基于博主...

zl3090的博客 982

tensorflow 转 caffe(4)

转自:https://blog.youkuaiyun.com/jiongnima/article/details/78435500 在笔者的上一篇博客中,提到了如何从tensorflow框架下提取出模型参数并转化为caffe框架下的模型参数,并在最后生成了一个1.1GB的.prototxt格式的参数文件,该文件里面主要记录了网络架构以及各层对应的参数。可是我们在使用caffe进行网络前传得到结果的时候,是需...

gaotihong的博客 700

Tensorflow模型转caffe模型再转ncnn模型

Tensorflow模型转caffe模型再转ncnn模型 Tensorflow模型转caffe模型网上有很多教程,我参照这个https://blog.youkuaiyun.com/weixin_42699651/article/details/88932597,成功把例子vgg_16.ckpt转换为vgg16.caffemodel。 一、Tensorflow模型转caffe模型 接下来我就要因地制宜了,尝试把...

工地搬砖第一年的博客 1403

tensorflow 转 caffe(2)

转自:https://blog.youkuaiyun.com/jiongnima/article/details/78326515 经过一段时间,笔者又回来了! 从2017年7月开始,笔者结束了研一繁重的考试月任务(因为平常不常上课,突击考试大家懂的),然后就进入了研二生涯。在七八月笔者就开始了自己的课题实验(由于太忙累坏了身体,先是眼睛不太好,然后又犯了胃病被迫去做胃镜,在此深切提醒各位,工作的...

gaotihong的博客 212

tensorflow2caffe(3) : 如何将tensorflow框架下训练得到的权重转化为caffe框架下的权重参数

   在前两期专栏tensorflow2caffe(1)和tensorflow2caffe(2)中,笔者向大家介绍了caffemodel文件类型下的参数架构和如何取出tensorflow框架下训练参数。在本期中,笔者将向大家阐述,如何去将tensorflow框架下训练得到的参数转化为caffe框架下的规定格式的参数。首先,我们来捋一捋目前我们手里面已经有了哪些东西: 1. 我们有自己的tenso...

jiongnima的博客 1万+

用vs2008获取caffe模型数据(caffemodel格式)

看了一些博客,要读取caffe模型数据(caffemodel格式),都需要编译caffe。 编译caffe除了 caffe-master 外还要 boost、OpenCV、OpenBlas、glog、leveldb、protobuf 等,好象还只支持64位。 所以,这里不准备完全编译caffe,只用caffe中和模型相关的一部分。 《tensorflow2caffe(1) : caffemo...

juebai123的博客 474

caffe安装_keras/tensorflow1.x模型转换为caffe推理模型

前言在工业界混的人,每个人都有自己习惯的框架,有时为了部署不得不在框架之间进行模型转换。踩了几个坑之后,终于转换成功,这里记录一下分享一下。gayhub链接:xggIoU/tensorflow_keras_to_caffe​github.comenvs/toolstensorflow1.13.2、keras2.2.4、caffe1.0、python3.6、pycharm、Anoconda、MMdn...

weixin_39662142的博客 204
上一篇: Caffe学习系列(19): 绘制loss和accuracy曲线
下一篇: caffe-ssd编译、训练、测试全过程(最后有彩蛋)
浩瀚之水_csdn
博客等级 码龄18年 6万+粉丝 1660原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值