程序实现 softmax classifier, 含有三个隐含层的情况。activation function 是 ReLU : f(x)=max(0,x)

f1=w1x+b1

h1=max(0,f1)

f2=w2h1+b2

h2=max(0,f2)

f3=w3h2+b3

h3=max(0,f3)

f4=w4h3+b4

y=ef4i∑jef4j


function Out=Softmax_Classifier_3(train_x, train_y, opts) % activation function RELU. y=max(0, x); % setting learning parameters
step_size=opts.step_size;
reg=opts.reg;
batchsize = opts.batchsize;
numepochs = opts.numepochs;
K=opts.class;
h1=opts.hidden_1;
h2=opts.hidden_2;
h3=opts.hidden_3; D=size(train_x, 2); W1=0.01*randn(D, h1);
b1=zeros(1, h1);
W2=0.01*randn(h1, h2);
b2=zeros(1, h2);
W3=0.01*randn(h2, h3);
b3=zeros(1, h3);
W4=0.01*randn(h3, K);
b4=zeros(1, K); loss(1 : numepochs)=0; num_examples=size(train_x, 1);
numbatches = num_examples / batchsize; for epoch=1:numepochs kk = randperm(num_examples);
loss(epoch)=0; tic; sprintf('epoch %d: \n' , epoch) for bat=1:numbatches batch_x = train_x(kk((bat - 1) * batchsize + 1 : bat * batchsize), :);
batch_y = train_y(kk((bat - 1) * batchsize + 1 : bat * batchsize), :); %% forward
f1=batch_x*W1+repmat(b1, batchsize, 1);
hiddenval_1=max(0, f1);
f2=hiddenval_1*W2+repmat(b2, batchsize, 1);
hiddenval_2=max(0, f2);
f3=hiddenval_2*W3+repmat(b3, batchsize, 1);
hiddenval_3=max(0, f3);
scores=hiddenval_3*W4+repmat(b4, batchsize, 1); %% the loss
exp_scores=exp(scores);
dd=repmat(sum(exp_scores, 2), 1, K);
probs=exp_scores./dd;
correct_logprobs=-log(sum(probs.*batch_y, 2));
data_loss=sum(correct_logprobs)/batchsize;
reg_loss=0.5*reg*sum(sum(W1.*W1))+0.5*reg*sum(sum(W2.*W2))+0.5*reg*sum(sum(W3.*W3))+0.5*reg*sum(sum(W4.*W4));
loss(epoch) =loss(epoch)+ data_loss + reg_loss; %% back propagation
% output layer
dscores = probs-batch_y;
dscores=dscores/batchsize;
dW4=hiddenval_3'*dscores;
db4=sum(dscores); % hidden layer 3
dhiddenval_3=dscores*W4';
mask=max(sign(hiddenval_3), 0);
df_3=dhiddenval_3.*mask;
dW3=hiddenval_2'*df_3;
db3=sum(df_3); % hidden layer 2
dhiddenval_2=df_3*W3';
mask=max(sign(hiddenval_2), 0);
df_2=dhiddenval_2.*mask;
dW2=hiddenval_1'*df_2;
db2=sum(df_2); % hidden layer 1
dhiddenval_1=df_2*W2';
mask=max(sign(hiddenval_1), 0);
df_1=dhiddenval_1.*mask;
dW1=batch_x'*df_1;
db1=sum(df_1); %% update
dW4=dW4+reg*W4;
dW3=dW3+reg*W3;
dW2=dW2+reg*W2;
dW1=dW1+reg*W1; W4=W4-step_size*dW4;
b4=b4-step_size*db4; W3=W3-step_size*dW3;
b3=b3-step_size*db3; W2=W2-step_size*dW2;
b2=b2-step_size*db2; W1=W1-step_size*dW1;
b1=b1-step_size*db1; end loss(epoch)=loss(epoch)/numbatches; sprintf('training loss is %f: \n', loss(epoch)) toc; end Out.W1=W1;
Out.W2=W2;
Out.W3=W3;
Out.W4=W4; Out.b1=b1;
Out.b2=b2;
Out.b3=b3;
Out.b4=b4; Out.loss=loss;

机器学习: Softmax Classifier (三个隐含层)的更多相关文章

  1. 机器学习:Softmax Classifier (两个隐含层)

    程序实现 softmax classifier, 含有两个隐含层的情况.activation function 是 ReLU : f(x)=max(0,x) f1=w1x+b1 h1=max(0,f1 ...

  2. 机器学习 Softmax classifier (一个隐含层)

    程序实现 softmax classifier, 含有一个隐含层的情况.activation function 是 ReLU : f(x)=max(0,x) f1=w1x+b1 h1=max(0,f1 ...

  3. 机器学习 Softmax classifier (无隐含层)

    程序实现 Softmax classifer, 没有隐含层, f=wx+b y=efi∑jefj %% Softmax classifier function Out=Softmax_Classifi ...

  4. python机器学习实战(三)

    python机器学习实战(三) 版权声明:本文为博主原创文章,转载请指明转载地址 www.cnblogs.com/fydeblog/p/7277205.html  前言 这篇notebook是关于机器 ...

  5. 基于MNIST数据集使用TensorFlow训练一个包含一个隐含层的全连接神经网络

    包含一个隐含层的全连接神经网络结构如下: 包含一个隐含层的神经网络结构图 以MNIST数据集为例,以上结构的神经网络训练如下: #coding=utf-8 from tensorflow.exampl ...

  6. 基于MNIST数据集使用TensorFlow训练一个没有隐含层的浅层神经网络

    基础 在参考①中我们详细介绍了没有隐含层的神经网络结构,该神经网络只有输入层和输出层,并且输入层和输出层是通过全连接方式进行连接的.具体结构如下: 我们用此网络结构基于MNIST数据集(参考②)进行训 ...

  7. 理解dropout——本质是通过阻止特征检测器的共同作用来防止过拟合 Dropout是指在模型训练时随机让网络某些隐含层节点的权重不工作,不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了

    理解dropout from:http://blog.csdn.net/stdcoutzyx/article/details/49022443 http://www.cnblogs.com/torna ...

  8. ubuntu之路——day13 只用python的numpy在较为底层的阶段实现单隐含层神经网络

    首先感谢这位博主整理的Andrew Ng的deeplearning.ai的相关作业:https://blog.csdn.net/u013733326/article/details/79827273 ...

  9. MLP神经网络 隐含层节点数的设置】如何设置神经网络隐藏层 的神经元个数

    神经网络 隐含层节点数的设置]如何设置神经网络隐藏层 的神经元个数 置顶 2017年10月24日 14:25:07 开心果汁 阅读数:12968    版权声明:本文为博主原创文章,未经博主允许不得转 ...

随机推荐

  1. PHP: php_ldap.dll不能加载解决方案

    PHP: php_ldap.dll不能加载解决方案 php.ini中开启 ldap的扩展后,重启服务:phpinfo();中没有ldap apache_error.log 提示:PHP Warning ...

  2. iOS Threading编程指南 官方文档翻译第一篇(序言)

    序言   Thread是能够使多个code paths 在同一个APP内并发运行的几种技术之一.虽然新的技术为并发运行提供了先进.高效的工具(例如operation 对象和GCD),但是OS X和iO ...

  3. jsonp跨域实例丨利用百度数据制作搜索页面

    <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">      ...

  4. 用jquery获取单选按钮选中的内容 和 获取select下拉列表选中的值

    1.<label><input name='reason' type='radio' value='您的评论内容涉嫌谣言' />您的评论内容涉嫌谣言</label> ...

  5. C#泛型(一)泛型方法

    namespace GenericsTest { class Program { // https://www.cnblogs.com/dotnet261010/p/9034594.html stat ...

  6. ThinkPHP5.0的安装

    ThinkPHP5.0的安装很简单: 1.下载“phpstudy”安装 2.下载thinkphp源文件 3.把thinkphp源文件解压并放到phpstudy目录下的“WWW”目录 4.然后开启服务并 ...

  7. ClickOnce

    Clic WPF ClickOnce应用程序IIS部署发布攻略   WPF程序非常适合公司内网使用,唯一缺点就是客户端要安装.net框架4.0.优势也很明显,在客户端运行的是一个WinForm程序,自 ...

  8. vc 常用语句

    1) CMainFrame* pmainframe=(CMainFrame*)AfxGetMainWnd();CChildFrame *m_finderframe=(CChildFrame*)pmai ...

  9. maven的pom.xml配置文件讲解

    <project xmlns="http://maven.apache.org/POM/4.0.0 "     xmlns:xsi="http://www.w3.o ...

  10. 限制tomcat仅响应本机请求(转)

    http://blog.bbzhh.com/index.php/archives/135.html 在VPS上搭建了nginx和tomcat应用,想通过nginx来反向代理127.0.0.1:8080 ...