【MATLAB深度学习】神经网络与分类问题

神经网络与分类问题

1.多元分类

  根据分类的数量确定输出节点的数量是最可能得到良好效果的方法。输出的类别表示可以使用one-hot编码。通常情况下,二分类使用Sigmoid函数,多元分类使用Softmax函数。Softmax函数不仅考虑输入的加权和,而且考虑其他输出节点的输出。正确地诠释神经网络多元分类的输出结果需要考虑所有节点输出的相对大小。Softmax函数保证输出值之和为1。其也适用于二分类。

  多元分类程序示例,输入数据为5个5*5矩阵,分别表示1,2,3,4,5。网络结构为输入节点25个,输出节点5个,隐含节点50个。代码如下:

function [W1, W2] = MultiClass(W1, W2, X, D)
  alpha = 0.9;

  N = 5;
  for k = 1:N
    x = reshape(X(:, :, k), 25, 1); % k表示第k幅图,25*1向量
    d = D(k, :)‘;

    v1 = W1*x;
    y1 = Sigmoid(v1);
    v  = W2*y1;
    y  = Softmax(v);

    e     = d - y;
    delta = e;

    e1     = W2‘*delta;
    delta1 = y1.*(1-y1).*e1; 

    dW1 = alpha*delta1*x‘;
    W1 = W1 + dW1;

    dW2 = alpha*delta*y1‘;
    W2 = W2 + dW2;
  end
end

  Softmax函数定义如下:

function y = Softmax(x)
  ex = exp(x);
  y  = ex / sum(ex);
end

  Sigmoid函数定义如下:

function y = Sigmoid(x)
  y = 1 ./ (1 + exp(-x));
end

  测试代码如下:

clear all

rng(3);

X  = zeros(5, 5, 5);

X(:, :, 1) = [ 0 1 1 0 0;
               0 0 1 0 0;
               0 0 1 0 0;
               0 0 1 0 0;
               0 1 1 1 0
             ];

X(:, :, 2) = [ 1 1 1 1 0;
               0 0 0 0 1;
               0 1 1 1 0;
               1 0 0 0 0;
               1 1 1 1 1
             ];

X(:, :, 3) = [ 1 1 1 1 0;
               0 0 0 0 1;
               0 1 1 1 0;
               0 0 0 0 1;
               1 1 1 1 0
             ];

X(:, :, 4) = [ 0 0 0 1 0;
               0 0 1 1 0;
               0 1 0 1 0;
               1 1 1 1 1;
               0 0 0 1 0
             ];

X(:, :, 5) = [ 1 1 1 1 1;
               1 0 0 0 0;
               1 1 1 1 0;
               0 0 0 0 1;
               1 1 1 1 0
             ];

D = [ 1 0 0 0 0;
      0 1 0 0 0;
      0 0 1 0 0;
      0 0 0 1 0;
      0 0 0 0 1
    ];

W1 = 2*rand(50, 25) - 1;
W2 = 2*rand( 5, 50) - 1;

for epoch = 1:10000           % train
  [W1 W2] = MultiClass(W1, W2, X, D);
end

N = 5;                        % inference
for k = 1:N
  x  = reshape(X(:, :, k), 25, 1);
  v1 = W1*x;
  y1 = Sigmoid(v1);
  v  = W2*y1;
  y  = Softmax(v)
end

  最终得到了正确的分类

2.微污染的多元分类示例

  真实数据未必与训练数据相符,用微微污染的数据简单检验一下上面所构建的神经网络。代码如下:

clear all

TestMultiClass;                 % W1, W2

X  = zeros(5, 5, 5);

X(:, :, 1) = [ 0 0 1 1 0;
               0 0 1 1 0;
               0 1 0 1 0;
               0 0 0 1 0;
               0 1 1 1 0
             ];

X(:, :, 2) = [ 1 1 1 1 0;
               0 0 0 0 1;
               0 1 1 1 0;
               1 0 0 0 1;
               1 1 1 1 1
             ];

X(:, :, 3) = [ 1 1 1 1 0;
               0 0 0 0 1;
               0 1 1 1 0;
               1 0 0 0 1;
               1 1 1 1 0
             ];

X(:, :, 4) = [ 0 1 1 1 0;
               0 1 0 0 0;
               0 1 1 1 0;
               0 0 0 1 0;
               0 1 1 1 0
             ];     

X(:, :, 5) = [ 0 1 1 1 1;
               0 1 0 0 0;
               0 1 1 1 0;
               0 0 0 1 0;
               1 1 1 1 0
             ];    

N = 5;                        % inference
for k = 1:N
  x  = reshape(X(:, :, k), 25, 1);
  v1 = W1*x;
  y1 = Sigmoid(v1);
  v  = W2*y1;
  y  = Softmax(v)
end

  输出结果为 [0.0208,0.0006,0.0363,0.9164,0.0259] , [0.0000,0.9961,0.0038,0.0000,0.0000] ,[0.0001,0.0198,0.9798,0.0001,0.0002] ,[0.0930,0.3057,0.5397,0.0408,0.0208] ,[0.0363,0.3214,0.0717,0.0199,0.5506]。

  以上代码中rng函数为:

function rng(x)
  randn(‘seed‘, x)
  rand(‘seed‘, x)
end

  

原文地址:https://www.cnblogs.com/Negan-ZW/p/9613233.html

时间: 2024-10-10 01:02:53

【MATLAB深度学习】神经网络与分类问题的相关文章

(转)Matlab深度学习工具试玩手册一:基本操作与迁移学习

原贴博客:https://blog.csdn.net/zfrycw/article/details/80633979 目录 前言 一.利用现成网络进行分类 二.构建简单的分类网络 三.迁移学习 前言 Matlab从2016a版本开始提供了深度学习的相关工具,可以很方便地构建自己的网络或下载一些现成的经典网络(如AlexNet,GoogLeNet和VGG系列)进行迁移学习.作为一个初学者,我粗浅地认为,对于深度学习,我们实际的操作步骤可以分三大块:数据集(包括载入图片,制作训练集验证集,送入网络前

深度学习用于文本分类的论文及代码集锦

深度学习用于文本分类的论文及代码集锦 原创: FrankLearningMachine 机器学习blog 4天前 [1] Convolutional Neural Networks for Sentence Classification Yoon Kim New York University EMNLP 2014 http://www.aclweb.org/anthology/D14-1181 这篇文章主要利用CNN基于预训练好的词向量中对句子进行分类.作者发现利用微调来学习任务相关的词向量可

Spark MLlib Deep Learning Neural Net(深度学习-神经网络)1.1

Spark MLlib Deep Learning Neural Net(深度学习-神经网络)1.1 http://blog.csdn.net/sunbow0/ Spark MLlib Deep Learning工具箱,是根据现有深度学习教程<UFLDL教程>中的算法,在SparkMLlib中的实现.具体Spark MLlib Deep Learning(深度学习)目录结构: 第一章Neural Net(NN) 1.源码 2.源码解析 3.实例 第二章Deep Belief Nets(DBNs

Spark MLlib Deep Learning Neural Net(深度学习-神经网络)1.2

Spark MLlib Deep Learning Neural Net(深度学习-神经网络)1.2 http://blog.csdn.net/sunbow0/ 第一章Neural Net(神经网络) 2基础及源码解析 2.1 Neural Net神经网络基础知识 2.1.1 神经网络 基础知识参照: http://deeplearning.stanford.edu/wiki/index.php/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C 2.1.2 反向传导算法

Spark MLlib Deep Learning Neural Net(深度学习-神经网络)1.3

Spark MLlib Deep Learning Neural Net(深度学习-神经网络)1.3 http://blog.csdn.net/sunbow0/ 第一章Neural Net(神经网络) 3实例 3.1 测试数据 3.1.1 测试函数 采用智能优化算法的经典测试函数,如下: (1)Sphere Model 函数表达式 搜索范围 全局最优值 函数简介:此函数为非线性的对称单峰函数,不同维之间是不可分离的.此函数相对比较简单,大多数算法都能够轻松地达到优化效果,其主要用于测试算法的寻优

深度学习神经网络纯C语言基础版

当今Deep-Learning已经是火到一定境界了,深度学习神经网络(DNN)在计算机视觉领域的表现可谓见效非凡.当然,工程上运用了卷积神经网络来减少计算量而不是全连结的神经网络-这样计算量实在太大了.但是,对于神经网络来说计算量真的不是问题,因为它的结构能够确保它能够并行计算,一旦网络的每一个单元都能够独立的进行计算,每一层再多的连结也是同时进行计算的.期待硬件神经网络的发展. 下面手写了一套任意隐层数神经网络构建的C语言函数,能够方便移植到嵌入式设备中.该程序只是一个基于矩阵全连结形式的基础

人工智能深度学习神经网络在双色球彩票中的应用研究

人工神经网络(Neural Networks)在双色球彩票中的应用研究网上已经有比较多的研究论文和资料,最近比较火的AlphaGo中用到的深度学习在双色球预测上还没有相关论文,以后研究成果出来将逐步更新内容. 人工智能神经网络是什么? 神经网络的好处就是可以自己纠正,可以自己生成节点,错误的输入也可以给你输出接近正确的结果.这个就是为什么叫做智能,他会自动根据情况跟人脑思维一样进行学习,进化而不是单纯的执行命令了. 普通过滤算法就是单线的执行,根据我的输入根据写好的逻辑算法直接给出输出,没有自动

【转载】深度学习&amp;神经网络 科普及八卦 学习笔记

上一篇文章提到了数据挖掘.机器学习.深度学习的区别:http://www.cnblogs.com/charlesblc/p/6159355.html 深度学习具体的内容可以看这里: 参考了这篇文章:https://zhuanlan.zhihu.com/p/20582907?refer=wangchuan  <王川: 深度学习有多深, 学了究竟有几分? (一)> 笔记:神经网络的研究,因为人工智能的一位大牛Marvin Minsky的不看好,并且出书说明其局限性,而出现二十年的长期低潮. 第二篇

深度学习遥感影像分类(1)_数据集批量准备

近年来,深度学习在遥感影像地物分类中取得了一系列显著的效果.CNN可以很好的获取影像纹理信息,捕捉像素与像素之间的空间特征,因此,一个训练好的深度学习模型在地物提取中具有很大的优势.但模型的训练却是一个很繁琐的任务,需要人工准备数据集,贴标签,训练模型等.本文将以sar影像为例实现冰水二分类的数据集批量准备工作(划线取点截取小图片保存): 1.原始sar遥感影像 2.预处理思路: a.人工划线:对应在冰和水上画n条线(自己设置,注意自己需要针对类别所占比例控制线条数量和长度) b.保存小图片:获