【caffe-matlab】使用matlab训练caffe及绘制loss

前言

此博客主要介绍如何利用matlab一步一步训练caffe模型,类似使用caffe.exe 的train命令。

国际惯例,参考博客:

http://caffe.berkeleyvision.org/tutorial/interfaces.html

http://www.cnblogs.com/denny402/p/5110204.html

抱怨一下:matlab的教程是真少哇,大牛们都跑去玩Python了。。。o(╯□╰)o,开更。。。。。。。。。

【注】所有专业说法请参考caffe官网以及其它大牛博客,博主写博客可能有点白话文且没那么咬文嚼字。

一、读入模型

先去caffe主页瞄一眼。。。。。得到一个讯息:

solver = caffe.Solver('./models/bvlc_reference_caffenet/solver.prototxt');
这句话干什么的呢?读模型。

尝试一下,采用大家都有的mnist 中的solver,我采用了绝对路径,读者可采用相对路径,无影响

【注】我的solver可能修改了,前面有一篇博客介绍了修改内容和原因。贴一下下载地址:

lenet_solver1.prototxt:链接:http://pan.baidu.com/s/1qXWQrhy 密码:we0e

lenet_train_test1.prototxt:链接:http://pan.baidu.com/s/1miawrxQ 密码:ghxt

均值文件:链接:http://pan.baidu.com/s/1miFDNHe 密码:48az

下面用到的mnist_data:链接:http://pan.baidu.com/s/1bp62Enl 密码:royk

Google一下,感觉可能会有两个原因导致matlab未响应:一是dll没有链接到,就跟很多人出现caffe.set_mode_gpu()会直接未响应一样;二是prototxt内部错误。我不会说我折腾了一下午这个问题。

排除第一种情况,因为目前为止,使用caffe都是比较顺利的,dll问题可能性不大。那就是prototxt 路径问题了,去看prototxt是什么情况

net: "examples/mnist/lenet_train_test1.prototxt"
snapshot_prefix: "examples/mnist/lenet"
与路径有关的两句话,我们的matlab程序文件夹是E:\CaffeDev\caffe-master\matlab\demo,与这个路径相差十万八千里。保险起见,我的解决方法是把mnist训练需要的东西全都复制丢到matlab程序文件夹了。如下:


mnist_data文件夹存的是mnist数据集的lmdb文件以及lenet.prototxt,不想动手制作的去上面下载,想动手自己做的,前面有博客介绍。

移动完毕,那就得改改prototxt里面的路径了:

lenet_solver1.prototxt

# The train/test net protocol buffer definition
net: "lenet_train_test1.prototxt"
# test_iter specifies how many forward passes the test should carry out.
# In the case of MNIST, we have test batch size 100 and 100 test iterations,
# covering the full 10,000 testing images.
test_iter: 100
# Carry out testing every 500 training iterations.
test_interval: 500
# The base learning rate, momentum and the weight decay of the network.
base_lr: 0.01
momentum: 0.9
weight_decay: 0.0005
# The learning rate policy
lr_policy: "inv"
gamma: 0.0001
power: 0.75
# Display every 100 iterations
display: 1
# The maximum number of iterations
max_iter: 10000
# snapshot intermediate results
snapshot: 5000
snapshot_prefix: "mnist_data/lenet"
# solver mode: CPU or GPU
solver_mode: CPU
lenet_train_test1.prototxt 被修改部分
name: "LeNet"
layer {name: "mnist"type: "Data"top: "data"top: "label"include {phase: TRAIN}transform_param {mean_file: "mean.binaryproto"scale: 0.00390625}data_param {source: "mnist_data/mnist_train_lmdb"batch_size: 64backend: LMDB}
}
layer {name: "mnist"type: "Data"top: "data"top: "label"include {phase: TEST}transform_param {mean_file: "mean.binaryproto"scale: 0.00390625}data_param {source: "mnist_data/mnist_test_lmdb"batch_size: 100backend: LMDB}
}

再进行下一步操作之前,最好用bat测试一下是否能读取到这个prototxt并训练,排除这一步错误才能进行下步工作。

接下来再去读取模型:

addpath('..')
caffe.reset_all
solver = caffe.Solver('lenet_solver1.prototxt');
显示一下:

>> solversolver = Solver with properties:net: [1x1 caffe.Net]test_nets: [1x1 caffe.Net]

二、训练模型

2.1、一次性训练模型

solver.solve();
这里会有一个幌子,你会发现运行以后matlab跟待机一样,啥输出都没。我还以为出错,分析了一下上面solver读取的两个net:

模型的输入竟然是empty的,难道我们的lmdb数据没有读进去,然后尝试了leveldb,以及各种改leveldb的路径,比如添加“./”之类的,都不行。这时候便想到了一种可能性,模型载入是不读取数据的,只有在运行时候读取数据,但是solver的solve方法是一次性训练模型,没有任何输出,matlab可能已经在训练模型了。为了验证此想法,run→吃饭→回来→观察,果然在下面这个路径中发现了训练好的model

snapshot_prefix: "mnist_data/lenet"

为了避免这些模型是用空数据训练的,使用mnist的classification_demo测试一下,竟然手写数字都分类正确,这样便验证了我们的想法:solver.solve()是一次性训练数据,不会附带任何输出,matlab表现会如死机了。

2.2训练模型step-by-step

依旧去官网找:



意思是我们可以用step命令设置每次训练多少次以后,可以干一下别的事情,然后再训练。

好,卡壳了,设置完毕step为1表示我们想在每一次迭代都取出loss和accuracy,但是然后呢?怎么继续训练?找了很多教程都是Python的,受次启发,以及反复看caffe的官网,发现:

net.blobs('data').set_data(data);
net.forward_prefilled();
prob = net.blobs('prob').get_data();
给出的解释简单翻译一下是:

net.forward 函数接受n维的输入,输出output的blob的数据

net.forward_prefilled使用的则是使用在模型中已经存在的数据继续训练,并不接受任何输入,以及提供任何输出。

看完这两个解释,思考一下,用step设置训练1次停一下,那么我们的数据是否依旧在blob中存着呢?

【最开始想法】那么就可以使用net.forward_prefilled做继续训练的工作,尝试一下:

%训练
clear
clc
addpath('..')
caffe.reset_all
solver=caffe.Solver('lenet_solver1.prototxt');
loss=[];
accuracy=[];for i=1:10000disp('.')solver.step(1);iter=solver.iter();solver.net.forward_prefilled
end

更新日志2016-10-21

【试验之后】按照上面的想法能训练,但是突然发现,为什么不要backward_prefilled呢?而且,去掉solver.net.forward_prefilled也能训练。应该是solver.step自动包含了forward和backward过程了,因此正式使用的训练代码是:

%训练
clear
clc
addpath('..')
caffe.reset_all
solver=caffe.Solver('lenet_solver1.prototxt');
loss=[];
accuracy=[];for i=1:10000disp('.')solver.step(1);iter=solver.iter();
end

接下来就是取出每次迭代的loss和accuracy了,想都不用想,用blob,为了训练快点,我切换到GPU版本的caffe-windows去了,代码如下:

<pre name="code" class="cpp"><pre name="code" class="cpp">%训练
clear
clc
close all
format long %设置精度,caffe的损失貌似精度在小数点后面好几位
addpath('..')
caffe.reset_all%重设网络,否则载入两个网络会卡住
solver=caffe.Solver('lenet_solver1.prototxt'); %载入网络
loss=[];%记录相邻两个loss
accuracy=[];%记录相邻两个accuracy
hold on%画图用的
accuracy_init=0;
loss_init=0;
for i=1:10000solver.step(1);%每迭代一次就取一次loss和accuracyiter=solver.iter();loss=solver.net.blobs('loss').get_data();%取训练集的lossaccuracy=solver.test_nets.blobs('accuracy').get_data();%取验证集的accuracy%画loss折线图x=[i-1,i];y=[loss_init loss];plot(x,y,'r-')drawnowloss_init=loss;
end
 
 接下来我们便得到了实时的曲线图,每次迭代都有一个loss显示在折线图中。 


为了避免训练错误,测试一下

E:\CaffeDev-GPU\caffe-master\Build\x64\Release\caffe.exe test --model=lenet_train_test1.prototxt -weights=mnist_data/lenet_iter_10000.caffemodel -gpu=0
pause
结果如下:

I1021 21:00:07.988450  8132 net.cpp:261] This network produces output accuracy
I1021 21:00:07.989449  8132 net.cpp:261] This network produces output loss
I1021 21:00:07.989449  8132 net.cpp:274] Network initialization done.
I1021 21:00:07.992449  8132 caffe.cpp:253] Running for 50 iterations.
I1021 21:00:07.999449  8132 caffe.cpp:276] Batch 0, accuracy = 0.96
I1021 21:00:07.999449  8132 caffe.cpp:276] Batch 0, loss = 0.168208
I1021 21:00:08.002449  8132 caffe.cpp:276] Batch 1, accuracy = 0.95
I1021 21:00:08.002449  8132 caffe.cpp:276] Batch 1, loss = 0.152652
I1021 21:00:08.005450  8132 caffe.cpp:276] Batch 2, accuracy = 0.88
I1021 21:00:08.005450  8132 caffe.cpp:276] Batch 2, loss = 0.320218
I1021 21:00:08.007450  8132 caffe.cpp:276] Batch 3, accuracy = 0.92
I1021 21:00:08.008450  8132 caffe.cpp:276] Batch 3, loss = 0.320782
I1021 21:00:08.010450  8132 caffe.cpp:276] Batch 4, accuracy = 0.88
I1021 21:00:08.011451  8132 caffe.cpp:276] Batch 4, loss = 0.354194
I1021 21:00:08.013450  8132 caffe.cpp:276] Batch 5, accuracy = 0.91
I1021 21:00:08.013450  8132 caffe.cpp:276] Batch 5, loss = 0.604682
I1021 21:00:08.015450  8132 caffe.cpp:276] Batch 6, accuracy = 0.88
I1021 21:00:08.015450  8132 caffe.cpp:276] Batch 6, loss = 0.310961
I1021 21:00:08.017451  8132 caffe.cpp:276] Batch 7, accuracy = 0.95
I1021 21:00:08.017451  8132 caffe.cpp:276] Batch 7, loss = 0.18691
I1021 21:00:08.019450  8132 caffe.cpp:276] Batch 8, accuracy = 0.93
I1021 21:00:08.019450  8132 caffe.cpp:276] Batch 8, loss = 0.302631
I1021 21:00:08.022451  8132 caffe.cpp:276] Batch 9, accuracy = 0.96
I1021 21:00:08.022451  8132 caffe.cpp:276] Batch 9, loss = 0.10867
I1021 21:00:08.024451  8132 caffe.cpp:276] Batch 10, accuracy = 0.94
I1021 21:00:08.024451  8132 caffe.cpp:276] Batch 10, loss = 0.283927
I1021 21:00:08.026451  8132 caffe.cpp:276] Batch 11, accuracy = 0.91
I1021 21:00:08.027451  8132 caffe.cpp:276] Batch 11, loss = 0.389279
I1021 21:00:08.029451  8132 caffe.cpp:276] Batch 12, accuracy = 0.87
I1021 21:00:08.029451  8132 caffe.cpp:276] Batch 12, loss = 0.618325
I1021 21:00:08.031451  8132 caffe.cpp:276] Batch 13, accuracy = 0.91
I1021 21:00:08.031451  8132 caffe.cpp:276] Batch 13, loss = 0.464931
I1021 21:00:08.033452  8132 caffe.cpp:276] Batch 14, accuracy = 0.91
I1021 21:00:08.033452  8132 caffe.cpp:276] Batch 14, loss = 0.348089
I1021 21:00:08.035451  8132 caffe.cpp:276] Batch 15, accuracy = 0.88
I1021 21:00:08.035451  8132 caffe.cpp:276] Batch 15, loss = 0.45388
I1021 21:00:08.037451  8132 caffe.cpp:276] Batch 16, accuracy = 0.93
I1021 21:00:08.038452  8132 caffe.cpp:276] Batch 16, loss = 0.277403
I1021 21:00:08.040452  8132 caffe.cpp:276] Batch 17, accuracy = 0.9
I1021 21:00:08.040452  8132 caffe.cpp:276] Batch 17, loss = 0.48363
I1021 21:00:08.042453  8132 caffe.cpp:276] Batch 18, accuracy = 0.91
I1021 21:00:08.042453  8132 caffe.cpp:276] Batch 18, loss = 0.519036
I1021 21:00:08.044452  8132 caffe.cpp:276] Batch 19, accuracy = 0.88
I1021 21:00:08.045452  8132 caffe.cpp:276] Batch 19, loss = 0.364235
I1021 21:00:08.047452  8132 caffe.cpp:276] Batch 20, accuracy = 0.9
I1021 21:00:08.047452  8132 caffe.cpp:276] Batch 20, loss = 0.414757
I1021 21:00:08.049453  8132 caffe.cpp:276] Batch 21, accuracy = 0.9
I1021 21:00:08.049453  8132 caffe.cpp:276] Batch 21, loss = 0.387713
I1021 21:00:08.051452  8132 caffe.cpp:276] Batch 22, accuracy = 0.93
I1021 21:00:08.051452  8132 caffe.cpp:276] Batch 22, loss = 0.308721
I1021 21:00:08.053452  8132 caffe.cpp:276] Batch 23, accuracy = 0.93
I1021 21:00:08.053452  8132 caffe.cpp:276] Batch 23, loss = 0.328804
I1021 21:00:08.055454  8132 caffe.cpp:276] Batch 24, accuracy = 0.92
I1021 21:00:08.055454  8132 caffe.cpp:276] Batch 24, loss = 0.385196
I1021 21:00:08.058454  8132 caffe.cpp:276] Batch 25, accuracy = 0.93
I1021 21:00:08.058454  8132 caffe.cpp:276] Batch 25, loss = 0.255955
I1021 21:00:08.061453  8132 caffe.cpp:276] Batch 26, accuracy = 0.92
I1021 21:00:08.061453  8132 caffe.cpp:276] Batch 26, loss = 0.49177
I1021 21:00:08.063453  8132 caffe.cpp:276] Batch 27, accuracy = 0.89
I1021 21:00:08.064453  8132 caffe.cpp:276] Batch 27, loss = 0.366904
I1021 21:00:08.066453  8132 caffe.cpp:276] Batch 28, accuracy = 0.93
I1021 21:00:08.066453  8132 caffe.cpp:276] Batch 28, loss = 0.309272
I1021 21:00:08.068454  8132 caffe.cpp:276] Batch 29, accuracy = 0.88
I1021 21:00:08.068454  8132 caffe.cpp:276] Batch 29, loss = 0.520516
I1021 21:00:08.070453  8132 caffe.cpp:276] Batch 30, accuracy = 0.92
I1021 21:00:08.070453  8132 caffe.cpp:276] Batch 30, loss = 0.358098
I1021 21:00:08.072453  8132 caffe.cpp:276] Batch 31, accuracy = 0.94
I1021 21:00:08.072453  8132 caffe.cpp:276] Batch 31, loss = 0.157759
I1021 21:00:08.074455  8132 caffe.cpp:276] Batch 32, accuracy = 0.91
I1021 21:00:08.075454  8132 caffe.cpp:276] Batch 32, loss = 0.336977
I1021 21:00:08.077455  8132 caffe.cpp:276] Batch 33, accuracy = 0.95
I1021 21:00:08.077455  8132 caffe.cpp:276] Batch 33, loss = 0.116172
I1021 21:00:08.079454  8132 caffe.cpp:276] Batch 34, accuracy = 0.93
I1021 21:00:08.079454  8132 caffe.cpp:276] Batch 34, loss = 0.136695
I1021 21:00:08.081454  8132 caffe.cpp:276] Batch 35, accuracy = 0.89
I1021 21:00:08.082454  8132 caffe.cpp:276] Batch 35, loss = 0.648639
I1021 21:00:08.084455  8132 caffe.cpp:276] Batch 36, accuracy = 0.91
I1021 21:00:08.084455  8132 caffe.cpp:276] Batch 36, loss = 0.256923
I1021 21:00:08.086454  8132 caffe.cpp:276] Batch 37, accuracy = 0.93
I1021 21:00:08.086454  8132 caffe.cpp:276] Batch 37, loss = 0.321325
I1021 21:00:08.088454  8132 caffe.cpp:276] Batch 38, accuracy = 0.92
I1021 21:00:08.088454  8132 caffe.cpp:276] Batch 38, loss = 0.28317
I1021 21:00:08.090456  8132 caffe.cpp:276] Batch 39, accuracy = 0.9
I1021 21:00:08.090456  8132 caffe.cpp:276] Batch 39, loss = 0.352922
I1021 21:00:08.093456  8132 caffe.cpp:276] Batch 40, accuracy = 0.93
I1021 21:00:08.093456  8132 caffe.cpp:276] Batch 40, loss = 0.298536
I1021 21:00:08.095455  8132 caffe.cpp:276] Batch 41, accuracy = 0.88
I1021 21:00:08.095455  8132 caffe.cpp:276] Batch 41, loss = 0.817203
I1021 21:00:08.097455  8132 caffe.cpp:276] Batch 42, accuracy = 0.89
I1021 21:00:08.097455  8132 caffe.cpp:276] Batch 42, loss = 0.324021
I1021 21:00:08.100455  8132 caffe.cpp:276] Batch 43, accuracy = 0.92
I1021 21:00:08.100455  8132 caffe.cpp:276] Batch 43, loss = 0.270256
I1021 21:00:08.102455  8132 caffe.cpp:276] Batch 44, accuracy = 0.89
I1021 21:00:08.102455  8132 caffe.cpp:276] Batch 44, loss = 0.443635
I1021 21:00:08.104455  8132 caffe.cpp:276] Batch 45, accuracy = 0.92
I1021 21:00:08.104455  8132 caffe.cpp:276] Batch 45, loss = 0.316793
I1021 21:00:08.106456  8132 caffe.cpp:276] Batch 46, accuracy = 0.9
I1021 21:00:08.106456  8132 caffe.cpp:276] Batch 46, loss = 0.353561
I1021 21:00:08.109457  8132 caffe.cpp:276] Batch 47, accuracy = 0.94
I1021 21:00:08.109457  8132 caffe.cpp:276] Batch 47, loss = 0.304726
I1021 21:00:08.111456  8132 caffe.cpp:276] Batch 48, accuracy = 0.88
I1021 21:00:08.111456  8132 caffe.cpp:276] Batch 48, loss = 0.643014
I1021 21:00:08.113456  8132 caffe.cpp:276] Batch 49, accuracy = 0.93
I1021 21:00:08.113456  8132 caffe.cpp:276] Batch 49, loss = 0.214009
I1021 21:00:08.113456  8132 caffe.cpp:281] Loss: 0.355134
I1021 21:00:08.113456  8132 caffe.cpp:293] accuracy = 0.9134
I1021 21:00:08.113456  8132 caffe.cpp:293] loss = 0.355134 (* 1 = 0.355134 loss)



附:读取日志文件的loss

如果使用的是dos窗口caffe -train命令训练,那么提取loss和accuracy就需要定向到caffe默认的日志文件去,找的方法很简单


按时间排序,找到最近的以caffe.exe开头的文件名称,用notepad++打开可以看到日志信息:


读文件的方法有很多,我用正则表达式去匹配loss信息:

先将这个记录log的文件拷贝出来,

%my loss
clear;
clc;
close all;train_log_file = 'caffe.exe.BINGO-PC.Bingo.log.INFO.20160924-193528.13464' ;
train_interval = 100 ;
test_interval = 500 ;[~, string_output] = dos(['type ' , train_log_file ]) ;
pat='1 = .*? loss';
o1=regexp(string_output,pat,'start');%用'start'参数指定输出o1为匹配正则表达式的子串的起始位置
o2=regexp(string_output,pat,'end');%用'start'参数指定输出o1为匹配正则表达式的子串的结束位置
o3=regexp(string_output,pat,'match');%用'match'参数指定输出o2为匹配正则表达式的子串 loss=zeros(1,size(o1,2));
for i=1:size(o1,2)loss(i)=str2num(string_output(o1(i)+4:o2(i)-5));
end
plot(loss)



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【caffe-matlab】目标检测R-FCN算法于Windows下配置

前言 首先谢谢好友推荐的这篇论文及代码&#xff0c;前面学习的caffe可能比较浅显&#xff0c;想要深入caffe就可以从这个代码下手了&#xff0c;配置方法还是挺简单的&#xff0c;但是可能会出现部分问题。在作者的论文中有github的地址。注意&#xff0c;本文只介绍如何配置…

【写作】Texlive和Texmaker学习

前言 最近要看一些论文做一下笔记&#xff0c;所以准备使用一下比较流行的Texlive和Texmaker写一下。其实CSDN的Markdown也是不错滴。 首先国际惯例&#xff0c;贴几个地址&#xff1a; Texlive镜像下载地址&#xff1a;http://mirror.lzu.edu.cn/CTAN/systems/texlive/Imag…

《Neural Networks for Machine Learning》学习一

前言 最近报了一下Hinton大牛的coursera的神经网络课程&#xff0c;奈何比较懒&#xff0c;一直没看&#xff0c;还是写个博客督促自己比较好 贴一下课程地址&#xff1a;https://www.coursera.org/learn/neural-networks/home/week/1 第一讲主题是为何需要机器学习&#xf…

《Neural Networks for Machine Learning》学习二

前言 课程地址&#xff1a;https://www.coursera.org/learn/neural-networks/home/week/1‘’ 【Lecture 2】百度云下载地址&#xff1a;链接&#xff1a;http://pan.baidu.com/s/1nvMynhR 密码&#xff1a;ru3y 神经网络架构概览 前馈神经网络(Feed-Forward neural network)…

入门 | 初学者必读:解读14个深度学习关键词

作者&#xff1a;Matthew Mayo 机器之心编译 参与&#xff1a;Xuwen Wang、Chen Chen 微信公众号&#xff1a;&#xff08;almosthuman2014&#xff09;授权转载&#xff0c;禁止二次转载&#xff0c;点此为原文链接 本文介绍了包括 LSTM、ANNS、生物神经元、反向传播、多元感知…

深度 | 一篇文章带你进入无监督学习:从基本概念到四种实现模型(附论文)

作者&#xff1a;Eugenio Culurciello 机器之心编译 参与&#xff1a;李亚洲、武竞 微信公众号&#xff1a;&#xff08;almosthuman2014&#xff09;授权转载&#xff0c;禁止二次转载&#xff0c;点此为原文链接 这是今年 6 月份普渡大学副教授 Eugenio Culurciello 写的一篇…

【caffe-Windows】微软官方caffe之 Python接口配置及图片生成实例

前言 发现许多代码还是用python写的&#xff0c;所以还是配置一下接口吧&#xff0c;虽然博主不会Python&#xff0c;咳咳。在这里使用的python安装包是anaconda2&#xff0c;注意使用Python2.7版本的那个安装包。 官网地址&#xff1a;https://www.continuum.io/downloads …

判别模型的玻尔兹曼机论文源码解读

前言 三号要去参加CAD/CG会议&#xff0c;投了一篇关于使用生成模型和判别模型的RBM做运动捕捉数据风格识别的论文。这段时间一直搞卷积RBM了&#xff0c;差点把原来的实验内容都忘记了&#xff0c;这里复习一下判别式玻尔兹曼机的训练流程。 国际惯例&#xff0c;贴几个链接…

Jacobian矩阵和Hessian矩阵

原文转自&#xff1a;http://jacoxu.com/?p146 1. Jacobian 在向量分析中, 雅可比矩阵是一阶偏导数以一定方式排列成的矩阵, 其行列式称为雅可比行列式. 还有, 在代数几何中, 代数曲线的雅可比量表示雅可比簇&#xff1a;伴随该曲线的一个代数群, 曲线可以嵌入其中. 它们全部都…

为什么梯度下降法对于非线性可分数据有效

前言 晚上逛微博看到的&#xff0c;顺便拿过来翻译一下&#xff0c;做做笔记 国际惯例&#xff0c;来个原文链接&#xff1a; 原文地址&#xff1a;Why is gradient descent robust to non-linearly separable data? PDF拷贝&#xff1a;http://download.csdn.net/detail/…

卷积RBM源码解读

前言 卷积RBM相对RBM来说具有很多优势&#xff0c;详细的我也不说了&#xff0c;看文章就行。主要还是为了加深自己对细节部分的理解吧。 国际惯例&#xff0c;贴几个链接 卷积RBM的创始人Honglak Lee&#xff1a;http://web.eecs.umich.edu/~honglak/hl_publications.html#…

c语言:递归法求n的阶乘|练习题

一、题目 输入一个数n&#xff0c;用递归法求n的阶乘 二、思路分析 1、因为n!(n-1)!*n,所以&#xff0c;可以选择用递归法 三、代码截图【带注释】 四、源代码【带注释】 #include <stdio.h> //思路&#xff1a; //因为n!(n-1)!*n,所以&#xff0c;可以选择用递归法 int…

【caffe-Windows】cifar实例编译之model的生成

参考&#xff1a;<span style"font-family: Arial, Helvetica, sans-serif;">http://blog.csdn.net/chengzhongxuyou/article/details/50715455</span> 准备工作 按照之前的教程&#xff0c;成功生成过caffe&#xff0c;并且编译整个caffe.sln项目工程&a…

机器学习性能改善备忘单:32个帮你做出更好预测模型的技巧和窍门

文章来源&#xff1a;大数据文摘 作者 | Jason Brownlee 选文 | Aileen 翻译 | 姜范波 校对 | 寒小阳 机器学习最有价值(实际应用最广)的部分是预测性建模。也就是在历史数据上进行训练&#xff0c;在新数据上做出预测。 而预测性建模的首要问题是&#xff1a; 如何才能得…

【caffe-Windows】新层添加——LSTM

前言 原始的【caffe-Windows】是没有LSTM层的&#xff0c;维护以后的caffe的windows版本也懒得配置了&#xff0c;因为大部分文章的代码还是基于老版caffe。其实大部分的添加层方法都可以参考本博客&#xff0c;仅限Windows。 需要的文件有&#xff1a; 1. 原始的caffe-Wind…

【caffe-Windows】关于LSTM的使用-coco数据集

前言 建议大家使用Linux&#xff0c;因为Linux下的配置就没这么麻烦&#xff0c;各种make就行啦。Linux用户请绕道&#xff0c;因为此博客只针对Windows&#xff0c;可能比Linux麻烦很多倍。 在caffe-Windows新增LSTM层以后&#xff0c;相信很多人和我一样很好奇如何使用这一…

【caffe-Windows】关于LSTM的简单小例子

前言 这里主要是看到了一个简单的LSTM例子&#xff0c;比上一个coco简单很多&#xff0c;所以在这里记录一下&#xff0c;便于后续的分析&#xff0c;参考博客在上一篇文章的末尾提到过&#xff1a;Recurrent neural nets with Caffe 需要说明的是这个例子也并非原原本本的使…

概率有向图模型

1. 前言 主要参考书籍《深度学习导论及案例分析》、维基百科“贝叶斯网络”、老笨妞的博客、PRML中文翻译&#xff0c;重点还是概念的掌握和几个小理论的推导&#xff0c;比较枯燥。加入了自己的一些简单理解。 个人感觉概率有向图模型最大的意义在于&#xff1a;一个特定的有…

概率无向图模型

1. 前言 前面看了概率有向图模型&#xff0c;必然对无向图模型也要研究一下。而且这个概率无向图模型对学习RBM有很大的帮助&#xff0c;它关系到能量函数的来源&#xff0c;所以还是看看吧。参考资料依旧是概率有向图模型中参考的三个资料。 有向图将一组变量上的联合概率分…

softmax理论及代码解读——UFLDL

前言 看了各种softmax以后迷迷糊糊的&#xff0c;还是研究一下UFLDL的教程稳点。当然还是得参考挺多教程的&#xff1a;UFLDL-softmax 、Softmax的理解与应用 、Logistic 分类器与 softmax分类器 、详解softmax函数以及相关求导过程 、Exercise:Softmax Regression 。 【UFLDL…