导航:首页 > 五金知识 > ufldlmatlab工具箱

ufldlmatlab工具箱

发布时间:2022-09-18 11:20:25

1. ufldl tutorial logistic regression matlab代码要跑多久

ufldl学习笔记与编程作业:Logistic Regression(逻辑回归)
ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践。
在deep learning高质量群里面听一些前辈说,不必深究其他机器学习的算法,可以直接来学dl。
于是最近就开始搞这个了,教程加上matlab编程,就是完美啊。

2. python里面类似于Matlab中的fminunc方法或minfunc方法叫什么名字,怎么调用

在看完UFLDL自编码器autoencoder的代码后,发现其中的训练过程并不是使用训练的手段找到最优的参数theta,而是使用了minFunc寻找代价函数的最小值,并返回优化后的参数theta。其中的minFunc函数的说明里头提到了这个函数提供的各种选项和matlab提供的fminunc函数非常像,所以就去看了下matlab的help。
这里贴出fminunc函数help中最基本的翻译:
fminunc试图找到一个多变量函数的最小值,从一个估计的初试值开始,这通常被认为是无约束非线性优化问题。
x =fminunc(fun,x0) 试图从x0附近开始找到函数的局部最小值,x0可以是标量,向量或矩阵
x =fminunc(fun,x0,options) 根据结构体options中的设置来找到最小值,可用optimset来设置options
x =fminunc(problem) 为problem找到最小值,而problem是在Input Arguments中定义的结构体

Create thestructure problem by exporting a problem from Optimization Tool, as describedin Exporting Your Work.

[x,fval]= fminunc(...) 返回目标函数fun在解x处的函数值
[x,fval,exitflag]= fminunc(...) 返回一个描述退出条件的值exitflag
[x,fval,exitflag,output]= fminunc(...) 返回一个叫output的结构体,它包含着优化的信息
[x,fval,exitflag,output,grad]= fminunc(...) 返回函数在解x处的梯度的值,存储在grad中
[x,fval,exitflag,output,grad,hessian]= fminunc(...) 返回函数在解x处的Hessian矩阵的值,存储在hessian中

对这些说明理解的不是很透彻,然后做了几个简单的实验,如下:

定义函数fun1
function y = fun1(x)
y = (x - 2)^2;
end
显然fun1在x=2处取得最小值0

clear all;
x0 = 1.5
[x,fval,exitflag,output,grad,hessian] =fminunc(@fun1,x0)

运行结果是:
x =2.0000 fval =1.2490e-16
exitflag = 1
output =
iterations: 1
funcCount: 6
stepsize: 0.5000
firstorderopt: 7.4506e-09
algorithm: 'medium-scale: Quasi-Newtonline search'
message: [1x436 char]
grad = 7.4506e-09 hessian = 2

再做一个多变量实验,定义函数fun2
function y = fun2(x)
y = (x(1)^2)+(x(2)^2);
end

显然,fun2在x1=0,x2=0处取得最小值0

clear all;
x0 = [2;2];
[x,fval,exitflag,output,grad,hessian]= fminunc(@fun2,x0)

运行结果是:
x =
0
0
fval =0
exitflag =1
output =
iterations: 2
funcCount: 9
stepsize: 1
firstorderopt: 1.4901e-08
algorithm: 'medium-scale: Quasi-Newtonline search'
message: [1x436 char]
grad =
1.0e-07 *
0.1490
0.1490
hessian =
NaN NaN
NaN NaN
但是假如函数形如f(x,y),而且f(x,y)中还有可变的参数a,b的话如何求取其最小值呢?定义了第三个函数fun3
function y = fun3(x,a,b)
y = (x(1)-a)^2+(x(2)-b)^2;
end
这个函数含两个自变量x(1),x(2),还有参数a,b,显然函数在x(1)=a,x(2)=b时取得最小值0
clear all;
x0 = [2;2]
a = 1
b = 0
x = fminunc(@(p)fun3(p,a,b),x0)%注意此处的写法
结果是
x =
1.0000
0.0000
fminunc找到了当我定义a=1,b=0时的函数的最小值是在x=[1;0]处,以后要找到一个需要赋值,还要指定参数值的函数的最小值的时候就可以这样做了。但是不要把x(1),x(2)分开定义成x,y,这样只会给自己找麻烦。fminunc的help里头提到一个problem的结构体好像可以解决这个问题,没有深究,读者自己去看。

%==================================================================
现在我们用fminunc来找二元逻辑回归的代价函数的最小值
数据在这http://openclassroom.stanford.e/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex4/ex4.html

logistic_test.m
clear all; close all;

x = load('G:\training_data\ex4x.dat');
y = load('G:\training_data\ex4y.dat');

theta = [-15.0; 0.14; 0.15];
J = logisticCost(theta,x,y);

theta0 = zeros(3,1);%随机设置一个初始值,其实就在上面那个theta附近
data = x;
label = y;
options=optimset('MaxIter',100);
[opttheta,fval] = fminunc(@(p)logisticCost(p,data,label),theta0)
定义代价函数logisticCost.m
function cost = logisticCost(theta, data, label)

[trainNum trainLength] =size(data);
z = [ones(trainNum,1)data]*theta;

h = inline('1.0 ./ (1.0 + exp(-z))');
htheta = h(z);
cost =(-1/trainNum)*(label'*log(htheta) + (1-label)'*log(1-htheta));
运行[opttheta,fval]= fminunc(@(p) logisticCost(p,data,label),theta0)
的结果是
opttheta =
-16.3787
0.1483
0.1589
fval =
0.4054
这个结果跟上面下载数据的网页处提供的结果一样

其实注意到fminunc是因为稀疏自编码器autoencoder中train.m代码中步骤3:
numgrad =computeNumericalGradient( @(x) sparseAutoencoderCost(x, visibleSize,...
hiddenSize, lambda,...
sparsityParam, beta,...
patches), theta);

此处的写法和x = fminunc(@(p) fun3(p,a,b),x0)类似,我其实是模仿train.m的代码做了个更简单的实验,将参数a,b加入到了fun3中去。在UFLDL的softmax回归的代码softmaxTrain.m中也有类似的求最优的theta的做法,所以从这些实现寻找最优theta的方法中我们发现,神经网络的训练过程可能不是通过一遍一遍的for来实现,而是通过非线性优化之类的寻找最优解的方法来实现的。更多的内容可以自行网络BFGS,L-BFGS之类minFunc中提到的东西来了解。

3. CNN神经网络给图像分类(Matlab)

  1. 你要看你的图像是什么。如果是彩色数字,先转成灰度。用MNIST训练网络。如果是各种主题,用彩色的imageNET训练。如果你的数据量大到足以与数据集媲美,那么直接用你的数据训练网络即可。

    在流行的数据集上训练完,你需要固定卷积池化层,只训练后面的全连接层参数,用你自己的数据集。

  2. CNN一是调整网络结构,几层卷积几层池化,卷积的模板大小等。而是在确定结构上调整参数,weight scale,learning rate,reg等。

  3. 你用CNN做图像分类,无非是把CNN当成学习特征的手段,你可以吧网络看成两部分,前面的卷积层学习图像基本-中等-高层特征,后面的全连接层对应普通的神经网络做分类。


需要学习的话,首先你去看UFLDL教程。然后cs231n


与其问别人,首先你看了imageNet数据集了吗?


对于把流行数据集与自己数据混合训练模型的方法。如果两种数据十分相似,也未尝不可。但是对于流行数据集而言,自己的标注数据量一般不会太大,如果是1:1000,1:100这种比例,那么可能不加自己的数据,完全用数据集训练的模型就能得到一个还好的结果。

如果自己的数据和数据集有些差别,那混在一起我认为自己的是在用自己的数据当做噪声加到数据集中。cnn认为图像是局部相关的,而欺骗CNN的方法则主要出于,自然图像分布在一种流形结构中,训练的模型需要这种流形假设,而人工合成的图像由于添加非自然噪点,不满足模型假设,所以能用肉眼难分辨的噪声严重干扰分类结果。

如果二者相差过大,数据集是一种分布,你的数据是另一种,放到一起训练,我没试过,但我认为结果不会太好。

这时候只能把数据集用来训练cnn的特征提取能力。而后用于分类的全连接层,视你的数据量调整规模。

4. matlab中的autoencoder中使用的是什么方法

在看完UFLDL自编码器autoencoder的代码后,发现其中的训练过程并不是使用训练的手段找到最优的参数theta,而是使用了minFunc寻找代价函数的最小值,并返回优化后的参数theta。其中的minFunc函数的说明里头提到了这个函数提供的各种选项和matlab...

5. 在 ufldl中矢量化编码过程出现out of memory怎么解决

matlab out of memory一般是由于数据量过大,MATLAB终于找到罢工机会了,之后它就调皮了下下,我知道几种解决方法
第一种:及时释放你需要的变量;
第二种:如果你的矩阵中0很多,你可以考虑用稀疏矩阵表示;
第三种:可能和什么内存碎片有关吧!你可以查查pack;MATLAB的help pack中有这么一句话” If you run out of memory often,.....“,你懂的!!
貌似,调整计算机储存空间分配也可以处理,我不是计算机专业的,你可以问问精通计算机内存的大神...
如果都没用,那就精彩了~~~

阅读全文

与ufldlmatlab工具箱相关的资料

热点内容
光驱如何改装机械硬盘吗 浏览:480
工具箱汉化smart 浏览:133
铸造除尘器为什么要做保温层 浏览:617
怎么看机械表要保养 浏览:517
小学生雕刻工具箱 浏览:417
k5仪表信息怎么调 浏览:936
青岛泰科阀门怎么样 浏览:277
地热总阀门开关拧不动怎么办 浏览:60
03仪表盘模式怎么换 浏览:284
ktv设备有哪些设备 浏览:191
关节轴承怎么安装使用 浏览:838
生产山楂糕需要哪些设备 浏览:91
机械表后面的飞轮是什么 浏览:163
怎么实现仪表盘ar导航 浏览:722
某同学设计了如下装置来 浏览:633
超声波仪器动态范围是什么意思 浏览:11
传动装置分析 浏览:263
风机与阀门连锁怎么实现 浏览:314
消防管道阀门抽检比例 浏览:313
矿用自动除尘喷雾装置生产工艺 浏览:334