卷积神经网络源码——最终输出部分的理解

  针对matlab版本的卷积神经网络的最终分类器(输出部分)的理解:   部分代码:

    '''cnnff'''
    net.fv = []; % 把最后一层得到的特征map拉成一条向量,作为最终提取到的特征向量  
    for j = 1 : numel(net.layers{n-1}.a) % 最后一层的特征map的个数 
        sa = size(net.layers{n-1}.a{j});   %得到几行几列的数
        % 将所有的特征map拉成一条列向量。还有一维就是对应的样本索引。每个样本一列,每列为对应的特征向量  
        net.fv = [net.fv; reshape(net.layers{n-1}.a{j}, sa(1) * sa(2), sa(3))];
    end;
    %  feedforward into output perceptrons
    if strcmp(net.layers{n}.objective, 'sigm')
         % 计算网络的最终输出值
        net.o = sigm(net.ffW * net.fv + repmat(net.ffb, 1, size(net.fv, 2)));
    '''cnntest'''
    net = cnnff(net, x);  %前向传播得到输出
    % [Y,I] = max(X) returns the indices of the maximum values in vector I   
    [~, h] = max(net.o);   % 找到最大的输出对应的标签 
    [~, a] = max(y);  % 找到最大的期望输出对应的索引 
    bad = find(h ~= a); % 找到他们不相同的个数,也就是错误的次数  
    er = numel(bad) / size(y, 2);

  拿MNIST手写体的十种分类来举例, 单纯的提取出CNN输出特征向量的最大值在向量里的位置,位置对应于10个数字0~9   如向量L1=[0 0.9 0.1 0.2 0 0 0 0 0 0 ], 0.9最大,在第二个位置,分类到数字1的类中。   如向量L2=[0 0.5 0.1 0.2 0 0 0 0 0 0.8 ], 0.8最大,在第十个位置,分类到数字9的类中。   说明:为什么第二个位置就代表数字1这一类呢,这和标签有关,这里面标签的设定不是1,2,3,4,5…;而是[1,0,0,0,…],1代表表示哪一类。   当然也可以进行其他分类器设计,CNN的主要任务是进行特征提取,对应分类器设计没有要求。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ml

朴素贝叶斯分类器(离散型)算法实现(一)

1. 贝叶斯定理:        (1)   P(A^B) = P(A|B)P(B) = P(B|A)P(A)   由(1)得    P(A|B) = P(B|...

3587
来自专栏Phoenix的Android之旅

Java 集合 Vector

List有三种实现,ArrayList, LinkedList, Vector, 它们的区别在于, ArrayList是非线程安全的, Vector则是线程安全...

692
来自专栏开发与安全

算法:AOV网(Activity on Vextex Network)与拓扑排序

在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Activity on Vextex ...

3977
来自专栏拭心的安卓进阶之路

Java 集合深入理解(6):AbstractList

今天心情比天蓝,来学学 AbstractList 吧! ? 什么是 AbstractList ? AbstractList 继承自 AbstractCollec...

20810
来自专栏项勇

笔记68 | 切换fragmengt的replace和add方法笔记

1524
来自专栏MelonTeam专栏

ArrayList源码完全分析

导语: 这里分析的ArrayList是使用的JDK1.8里面的类,AndroidSDK里面的ArrayList基本和这个一样。 分析的方式是逐个API进行解析 ...

4699
来自专栏java闲聊

JDK1.8 ArrayList 源码解析

当运行 ArrayList<Integer> list = new ArrayList<>() ; ,因为它没有指定初始容量,所以它调用的是它的无参构造

1232
来自专栏拭心的安卓进阶之路

Java 集合深入理解(12):古老的 Vector

今天刮台风,躲屋里看看 Vector ! 都说 Vector 是线程安全的 ArrayList,今天来根据源码看看是不是这么相...

2537
来自专栏计算机视觉与深度学习基础

Leetcode 114 Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example, Given...

2098
来自专栏刘君君

JDK8的HashMap源码学习笔记

3288

扫码关注云+社区