欢迎小伙伴贴出更高的识别率9159.com,反卷积网络

作者: 编程  发布:2019-09-06

这是一篇发表于2014年很经典的论文,形成了很多对卷积神经网络的普遍认识,目前的引用数为1315,主要工作是AlexNet的可视化,以及在此基础上做了一些分析,对于理解卷积神经网络很有裨益。

这一章主要是讲深度学习,首先介绍了卷积神经网络的概念。在之前的章节中我们的神经网络每一层的每一个神经元都是和前面一层的所有神经元相连,这样的结构叫全连接层,这样也使得我们的网络参数比较多。但实际上,这样的结构可能是有些冗余的。我们人类要识别图片中的一只猫,实际上只需要根据某一个局部的特征就能够识别出来,而不需要关注一张图片的所有像素。因此,如果能提取这样的局部特征,那么应该会提高识别的效率。卷积神经网络就是这样一个提取局部特征的工具。(关于卷积神经网络这个术语的由来,卷积网络的提出者之一Yann LeCun认为卷积网络受神经网络的启发很少,因此它喜欢叫卷积网络而不是卷积神经网络)

接着上篇 CS231n : Assignment 1 继续:

在所有深度网络中,卷积神经网和图像处理最为密切相关,卷积网在很多图片分类竞赛中都取得了很好的效果,但卷积网调参过程很不直观,很多时候都是碰运气。为此,卷积网发明者Yann LeCun的得意门生Matthew Zeiler在2013年专门写了一篇论文,阐述了如何用反卷积网络可视化整个卷积网络,并进行分析和调优。称之为ZFNet,其网络结构没什么改进,只是将AlexNet第一层卷积核由11变成7,步长由4变为2,第3,4,5卷积层转变为384,384,256--》512,1024,512。以下首先给出网上找的论文翻译版,使自己清晰地理解论文。然后给出一些对论文的分析和总结。

可视化方法主要是通过deconv的方法将某一层特征图的Top-k激活反向投射到原图像上,从而判断该激活值主要识别图像的什么部分。这就要求针对每一层都必须有对应的逆向操作。具体而言,对于MaxPooling层,在前馈时使用switch变量来记录最大值来源的index,然后以此近似得到Unpooling。对于Relu层,直接使用Relu层。而对于conv层,使用deconv,即使用原来卷积核的转置作为卷积核(PS:此文作者在2011年提出了deconvnet。本文引用了该文献。)。反向重建过程如下图所示:

卷积神经网络的基本思想有三个,分别是局部接受域,共享权重,和pooling。


一、中文版论文

9159.com 1

局部接受域是指下一层网络中的神经元只与上一层中的局部神经元相连,而不是全连接,如下图所示:

这里,我给出我的最优模型代码和第一层权重W1的可视化结果,识别率还有上升空间,欢迎小伙伴贴出更高的识别率。

9159.com 2

通过上面的可视化方法,作者对‘AlexNet的各层的Top-9`激活值进行了可视化,如下图所示:

9159.com 3第一隐层神经元与输入神经元的局部连接

nn_twolayer_best.py 代码如下:

9159.com 4

9159.com 59159.com 6

上图中,输入神经元中的5*5的区域我们可以称之为窗,第一隐层的神经元就是由这个窗在输入层上不断滑动得到的。如果滑动是沿着两个方向,如上图所示,就叫做二维卷积,如果滑动是沿着一个方向,则叫一维卷积。

__coauthor__ = 'Deeplayer'
# 6.16.2016 

import numpy as np
import matplotlib.pyplot as plt
from neural_net import TwoLayerNet
from data_utils import load_CIFAR10
from vis_utils import visualize_grid

# Load the data
def get_CIFAR10_data(num_training=49000, num_validation=1000, num_test=1000):    
    """    
    Load the CIFAR-10 dataset from disk and perform preprocessing to prepare    
    it for the two-layer neural net classifier. These are the same steps as    
    we used for the SVM, but condensed to a single function.    
    """    
    # Load the raw CIFAR-10 data    
    cifar10_dir = 'E:/PycharmProjects/ML/CS231n/cifar-10-batches-py'   # make a change
    X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir)    
    # Subsample the data    
    mask = range(num_training, num_training   num_validation)    
    X_val = X_train[mask]                   # (1000,32,32,3)    
    y_val = y_train[mask]                   # (1000L,)   
    mask = range(num_training)    
    X_train = X_train[mask]                 # (49000,32,32,3)    
    y_train = y_train[mask]                 # (49000L,)    
    mask = range(num_test)   
    X_test = X_test[mask]                   # (1000,32,32,3)    
    y_test = y_test[mask]                   # (1000L,)    

    # preprocessing: subtract the mean image    
    mean_image = np.mean(X_train, axis=0)    
    X_train -= mean_image   
    X_val -= mean_image    
    X_test -= mean_image    

    # Reshape data to rows    
    X_train = X_train.reshape(num_training, -1)      # (49000,3072)    
    X_val = X_val.reshape(num_validation, -1)        # (1000,3072)    
    X_test = X_test.reshape(num_test, -1)            # (1000,3072)    

    return X_train, y_train, X_val, y_val, X_test, y_test

# Invoke the above function to get our data.
X_train, y_train, X_val, y_val, X_test, y_test = get_CIFAR10_data()
print 'Train data shape: ', X_train.shape
print 'Train labels shape: ', y_train.shape
print 'Validation data shape: ', X_val.shape
print 'Validation labels shape: ', y_val.shape
print 'Test data shape: ', X_test.shape
print 'Test labels shape: ', y_test.shape

# Look for the best net
best_net = None      # store the best model into this
input_size = 32 * 32 * 3
hidden_size = 100
num_classes = 10
net = TwoLayerNet(input_size, hidden_size, num_classes)

"""
max_count = 100
for count in xrange(1, max_count   1):    
    reg = 10 ** np.random.uniform(-4, 1)    
    lr = 10 ** np.random.uniform(-5, -3)   
    stats = net.train(X_train, y_train, X_val, y_val, num_epochs=5, 
                  batch_size=200, mu=0.5, mu_increase=1.0, learning_rate=lr, 
                  learning_rate_decay=0.95, reg=reg, verbose=True)  

    print 'val_acc: %f, lr: %s, reg: %s, (%d / %d)' % 
     (stats['val_acc_history'][-1], format(lr, 'e'), format(reg, 'e'), count, max_count)

# according to the above experiment, reg ~= 0.9,  lr ~= 5e-4
"""

stats = net.train(X_train, y_train, X_val, y_val,  
                    num_epochs=40, batch_size=400, mu=0.5,                      
                    mu_increase=1.0, learning_rate=5e-4,     
                    learning_rate_decay=0.95, reg=0.9, verbose=True)

# Predict on the validation set
val_acc = (net.predict(X_val) == y_val).mean()
print 'Validation accuracy: ', val_acc         # about 52.7%

# Plot the loss function and train / validation accuracies
plt.subplot(2, 1, 1)
plt.plot(stats['loss_history'])
plt.title('Loss history')
plt.xlabel('Iteration')
plt.ylabel('Loss')
plt.subplot(2, 1, 2)
plt.plot(stats['train_acc_history'], label='train')
plt.plot(stats['val_acc_history'], label='val')
plt.ylim([0, 0.8])
plt.title('Classification accuracy history')
plt.xlabel('Epoch')
plt.ylabel('Classification accuracy')
plt.legend(bbox_to_anchor=(1.0, 0.4))
plt.grid(True)
plt.show()

best_net = net
# Run on the test set
test_acc = (best_net.predict(X_test) == y_test).mean()
print 'Test accuracy: ', test_acc              # about 54.6%

# Visualize the weights of the best network
def show_net_weights(net):    
    W1 = net.params['W1']    
    W1 = W1.reshape(32, 32, 3, -1).transpose(3, 0, 1, 2)    
    plt.imshow(visualize_grid(W1, padding=3).astype('uint8'))    
    plt.gca().axis('off')   
    plt.show()

show_net_weights(best_net)

9159.com 7

分析上述特征图,作者发现了网络特征的层级特性。第二层对应边、角、颜色的识别,而第三层具有更多的不变性,捕获了一些纹理特征。第四层显示了类别的重要差异,比如狗的脸啊,鸟的脚等等。第五层则开始关注目标整体。这形成了对于神经网络的认识,底层网络专注于识别低级特征,更高层网络通过对下层低级特征的组合抽象形成更高级的特征。

共享权重:上面的每个窗对应着一组权重,而共享权重就是说这些窗的权重都是一样的,这也意味着第一隐层的神经元所检测的都是同一类特征,只是不同位置。共享权重的意义在于,一是减少了参数数量,二是也对应于图片的平移不变性,一张猫的图片,平移几个像素,仍然还是猫,共享权重这种不考虑区域差异的设计,可以满足平移不变性的需求。

9159.com 8

9159.com 9

作者利用这种可视化方法,找出了原AlexNet结构的问题(比如第一层缺少中频信息,第二层由于步长太大导致了一些叠加效应等等)并对结构进行了改变,之后进行了对比,发现改变之后的模型top-5性能高于原网络。作者还进行了遮挡敏感性和一致性分析,具体详见论文。

上面的窗实际上也可以叫卷积核,而经过卷积核处理得到的新一层神经元可以称之为特征图。如果想检测多个特征,则可以使用多个卷积核,得到多个特征图,在基于这些特征图进行下一层传播的时候,又可以选取新的卷积核,但是卷积核的厚度(除二维卷积核的长宽以外的另一维度)可能就不为1了,但是卷积过程是相似的,对应元素相乘再叠加即可。

loss.png

9159.com 10

此处的结果是最令我震撼的,它回答了一个久久困扰我的问题:为什么目前用的卷积网络都是VGG, ZF, ResNet之类的基于Imagenet的网络架构作为backbone network

在卷积层以外常常要加上Pooling层,这一层的作用是类似于抽样,即在卷积层得到的结果中每一个小区域选出一个代表元素组成一个新的图,其他的元素则不再考虑。这样做的意义是减少需要处理的数据量,同时又能保证一定的效果,毕竟真正有用的元素有可能出现在一个局部区域里的不同位置点中,我们只需要把它们提取出来就行了。常用的pooling方法是max pooling,即选出某一个局部区域中的元素最大值组成新的特征图。

9159.com 11

9159.com 12

首先,作者进行了网络结构尺寸调整实验。去除掉包含大部分网络参数最后两个全连接层之后,网络性能下降很少;去掉中间两层卷积层之后,网络性能下降也很少;但是当把上述的全连接层和卷积层都去掉之后,网络性能急剧下降,由此作者得出结论:模型深度对于模型性能很重要,存在一个最小深度,当小于此深度时,模型性能大幅下降。

而在设置完了卷积层和pooling层后,在输出层之前,往往会再加上一个全连接层,从而使得输出的结果可以利用尽量多的特征进行判断。

W1.png

9159.com 13

然后,就是最震撼的结果了。作者使用AlexNet去做Caltech-101, Caltech-256PASCAL VOC 2012,得到以下结果:

除深度卷积神经网络外,还有其他种类的深度网络,包括:


9159.com 14

9159.com 159159.com 16

循环神经网络:在前馈网络中神经元的激活只取决于一个静态单输入,即神经网络中的所有东西都是静态的。但实际上某一个神经元的激活不一定只取决于它前面层的激活值,也可能取决于时间上更早的激活值(比如两幅图片连续输入,从静态卷积神经网络看来,每一次每个神经元的激活值都只和当前这张图片有关,但实际上有可能与上一张图片的某些激活值有关。)

最后再说两句,神经网络和线性分类器(SVM and Softmax)有什么区别与联系?神经网络可以看成是非线性分类器(不仅仅如此),其实对于分类问题,还有一个更重要的步骤我们没讲,就是特征提取 (feature extraction),好的特征提取,可以使我们的分类水平大大提高。前面的线性分类器做的只是在原始像素(预处理后的)上进行分类,所以效果并不好。而神经网络(全连接)隐藏层的作用可以看成是进行(全局)特征提取,实际上基本没有提取到什么特征(更像是一个模板)。但好在这些特征不需要人工选择,完全是神经网络自己学习到的!所以,对于分类问题的神经网络,可以分成两个部分:特征提取 线性分类器。严格来讲,卷积神经网络才真正做到了这一点。

9159.com 17

解释一下,表中的Non-pretr表示没有使用Imagenet预训练结果,而是使用新的训练集重新训练,结果表现非常糟糕;而ImageNet-pretr表示使用了Imagenet的预训练结果,作者固定了原来网络的权值,只是使用新数据训练了softmax分类器,效果非常好。这就形成了目前的人们对于卷积神经网络的共识:卷积网络相当于一个特征提取器。特征提取器是通用的,因为ImageNet数据量,类别多,所以由ImageNet训练出来的特征提取器更具有普遍性。也正是因为此,目前的卷积神经网络的Backbone Network基本上都是Imagenet上训练出来的网络。那么试想一下,如果继续增加数据量,将类别扩展到10k、100k、 1M等等,是不是能够得到更加通用更好的特征提取器,如此,是不是就能向General AI更近一步呢?当然,这样做的话需要大量的投入,那么可不可以像人类基因组计划那样分工合作呢,那样的话,必将是一番很壮丽的景象。另外,也可以从其他角度进行考虑,可以类似于人类的认知方式,采用人类陪同教导的方式让机器持续学习,最后再综合起来,或许可以得到更好的AI。

RNN的一个作用是使得神经网络更像算法传统的思维方式,即从顺序的角度去看待问题,先解决什么,再解决什么,最后得到答案,因此RNN可以用来制造神经图灵机,可以用来推断排序或者复制算法。

遗憾的是,随着神经网络层数的加深,损失函数越来越容易陷入局部最优解,并且这个“陷阱”越来越偏离真正的全局最优(因为我们的权重都是随机初始化的)。所以利用有限数据训练的(全连接)深度神经网络(DNN),性能还不如层数较浅的网络;此外,随着层数的增加,“梯度消失”现象也会越发严重。不过这两个问题都已经得到了很大缓解:

 

推荐一个很好的交互神经网络可视化网站:3D convolutional network visualization,可以很好地帮助理解神经网络的过程。友情提示:

长短时记忆网络:RNN面临的一个挑战是非常难训练,甚至比深度前馈网络还难。原因是RNN中梯度不仅在空间上反向传播,而且在时间上反向传播,因此梯度消失或爆炸的现象会更明显。而长短时记忆单元则可以用来解决这个问题。

1、2006年,Hinton发表的两篇论文Reducing the Dimensionality of Data with Neural Networks、A Fast Learning Algorithm for Deep Belief Nets利用预训练方法缓解了局部最优解问题,具体思想就是:利用无监督的逐层贪婪学习算法,一层一层地预训练神经网络的权重(每一层通过一个稀疏自编码器完成训练),最后再用有标签的数据通过反向传播微调所有权重。
2、我们之前讲过的ReLU、Maxout等激活函数,可以很好地克服“梯度消失”现象,而后来的Batch Normalization更是凶猛。

二、相关分析和总结

  • 黑色和灰色表示负值,越黑越负;绿色表示正值,越亮越正;
  • 鼠标点击节点可以查看具体数值和其他相关信息。
  • 作者有相关论文;网络训练使用Matlab,展示使用JavaScrip。放一张截图:

深度信念网络、生成模型和玻尔兹曼机:当代对于深度学习的兴趣其实起源于2006年关于深度信念网络的一些论文。尽管近年来其热度因为前馈网络和循环网络的流行有所降低,但它仍然是一个很有趣的工具。一个原因是它是生成模型的一个例子。在一般前馈网络中,我们有一个输入,然后在不同隐层得到输出。而在DBN中,我们可以设置某些中间神经元的值然后反向传播,生成输入值。即如果我们训练一个用于手写字母识别的DBN,则它也可以用来生成手写字母。这意味着我们的神经网络不但可以“读”图片,也可以“写”图片了。另一个使DBN有趣的原因是它可以做无监督或半监督学习,即可以不需要标签即可理解图像。

2012年ImageNet比赛中,CNN以压倒性的优势取得胜利,深度学习的巨大浪潮才正式开始。而自那之后,预训练方法已经被完全抛弃了,大概是因为数据量足够大了。

为了解释卷积神经网络为什么work,我们就需要解释CNN的每一层学习到了什么东西。为了理解网络中间的每一层,提取到特征,paper通过反卷积的方法,进行可视化。反卷积网络可以看成是卷积网络的逆过程。反卷积网络在文献《Adaptive deconvolutional networks for mid and high level feature learning》中被提出,是用于无监督学习的。然而本文的反卷积过程并不具备学习的能力,仅仅是用于可视化一个已经训练好的卷积网络模型,没有学习训练的过程。

9159.com 18网页截图

另外一篇有趣的论文是利用深度卷积网络 强化学习来玩游戏。想法是用深度卷积网络来简化屏幕中的像素数据,把它们变成简单的特征集,然后用于决定策略。这篇论文被冠名为Playing Atari with Reinforcement Learning,取得了很好的市场效果。

卷积神经网络(CNNs)的强大是因为它有着非常强大的(局部)特征提取能力,而且这些特征是逐层抽象化的,即下一层的特征是上一层的组合。层数越深,特征组合就越多、越深刻。

反卷积可视化以各层得到的特征图作为输入,进行反卷积,得到反卷积结果,用以验证显示各层提取到的特征图。举个例子:假如你想要查看Alexnet 的conv5提取到了什么东西,我们就用conv5的特征图后面接一个反卷积网络,然后通过:反池化、反激活、反卷积,这样的一个过程,把本来一张13*13大小的特征图(conv5大小为13*13),放大回去,最后得到一张与原始输入图片一样大小的图片(227*227)。

神经网络的未来是什么样的?作者可能会从这三个方向发展:

---> CS231n : Assignment 2
---> CS231n : Assignment 3

1、反池化过程

我们知道,池化是不可逆的过程,然而我们可以通过记录池化过程中,最大激活值得坐标位置。然后在反池化的时候,只把池化过程中最大激活值所在的位置坐标的值激活,其它的值置为0,当然这个过程只是一种近似,因为我们在池化的过程中,除了最大值所在的位置,其它的值也是不为0的。刚好最近几天看到文献:《Stacked What-Where Auto-encoders》,里面有个反卷积示意图画的比较好,所有就截下图,用这篇文献的示意图进行讲解: 
9159.com 19

以上面的图片为例,上面的图片中左边表示pooling过程,右边表示unpooling过程。假设我们pooling块的大小是3*3,采用max pooling后,我们可以得到一个输出神经元其激活值为9,pooling是一个下采样的过程,本来是3*3大小,经过pooling后,就变成了1*1大小的图片了。而upooling刚好与pooling过程相反,它是一个上采样的过程,是pooling的一个反向运算,当我们由一个神经元要扩展到3*3个神经元的时候,我们需要借助于pooling过程中,记录下最大值所在的位置坐标(0,1),然后在unpooling过程的时候,就把(0,1)这个像素点的位置填上去,其它的神经元激活值全部为0。再来一个例子: 
9159.com 20

在max pooling的时候,我们不仅要得到最大值,同时还要记录下最大值得坐标(-1,-1),然后再unpooling的时候,就直接把(-1-1)这个点的值填上去,其它的激活值全部为0。

Intention-driven user interface:简单地说就是类似搜索引擎可以更准确地知道你想搜什么。

2、反激活

我们在Alexnet中,relu函数是用于保证每层输出的激活值都是正数,因此对于反向过程,我们同样需要保证每层的特征图为正值,也就是说这个反激活过程和激活过程没有什么差别,都是直接采用relu函数。

Machine learning,data science,and the virtuous circle of innovation:机器学习也可以用于数据科学,来寻找数据中潜藏的规律。作者认为在未来机器学习的大突破可能不是新概念的产生,而是机器学习技术可以变得可获利,创造新的市场。

3、反卷积

对于反卷积过程,采用卷积过程转置后的滤波器(参数一样,只不过把参数矩阵水平和垂直方向翻转了一下),这一点我现在也不是很明白,估计要采用数学的相关理论进行证明。

最后可视化网络结构如下: 
9159.com 21

网络的整个过程,从右边开始:输入图片-》卷积-》Relu-》最大池化-》得到结果特征图-》反池化-》Relu-》反卷积。到了这边,可以说我们的算法已经学习完毕了,其它部分是文献要解释理解CNN部分,可学可不学。

总的来说算法主要有两个关键点:1、反池化 2、反卷积,这两个源码的实现方法,需要好好理解。

 

特征可视化:一旦我们的网络训练完毕了,我们就可以进行可视化,查看学习到了什么东西。但是要怎么看?怎么理解,又是一回事了。我们利用上面的反卷积网络,对每一层的特征图进行查看。

The role of neural networks and deep learning:作者做了一个预测,他认为深度学习将始终存在,因为深度学习所代表的学习层级概念,建立多层抽象的方法,似乎是理解这个世界的基本方式。但这并不代表深度学习的方法不会发生根本性改变。也许以后我们不再用神经网络了,但是深度学习始终存在。

1、特征可视化结果:

9159.com 22

总的来说,通过CNN学习后,我们学习到的特征,是具有辨别性的特征,比如要我们区分人脸和狗头,那么通过CNN学习后,背景部位的激活度基本很少,我们通过可视化就可以看到我们提取到的特征忽视了背景,而是把关键的信息给提取出来了。从layer 1、layer 2学习到的特征基本上是颜色、边缘等低层特征;layer 3则开始稍微变得复杂,学习到的是纹理特征,比如上面的一些网格纹理;layer 4学习到的则是比较有区别性的特征,比如狗头;layer 5学习到的则是完整的,具有辨别性关键特征。

Will neural networks and deep learning soon lead to artificial intelligence?或者说,深度学习是否可以帮助解决通用人工智能的问题?这是一个很难回答的问题,作者在这里引用了一个定理来回答这个问题,即Conway's Law:

2、特征学习的过程。

9159.com 23

作者给我们显示了,在网络训练过程中,每一层学习到的特征是怎么变化的,上面每一整张图片是网络的某一层特征图,然后每一行有8个小图片,分别表示网络epochs次数为:1、2、5、10、20、30、40、64的特征图:

结果:(1)仔细看每一层,在迭代的过程中的变化,出现了sudden jumps;(2)从层与层之间做比较,我们可以看到,低层在训练的过程中基本没啥变化,比较容易收敛,高层的特征学习则变化很大。这解释了低层网络的从训练开始,基本上没有太大的变化,因为梯度弥散嘛。(3)从高层网络conv5的变化过程,我们可以看到,刚开始几次的迭代,基本变化不是很大,但是到了40~50的迭代的时候,变化很大,因此我们以后在训练网络的时候,不要着急看结果,看结果需要保证网络收敛。

“设计一个系统的组织,会不可避免地设计一套与自身交流结构相似的系统”

3、图像变换。

从文献中的图片5可视化结果,我们可以看到对于一张经过缩放、平移等操作的图片来说:对网络的第一层影响比较大,到了后面几层,基本上这些变换提取到的特征没什么比较大的变化。

个人总结:我个人感觉学习这篇文献的算法,不在于可视化,而在于学习反卷积网络,如果懂得了反卷积网络,那么在以后的文献中,你会经常遇到这个算法。大部分CNN结构中,如果网络的输出是一整张图片的话,那么就需要使用到反卷积网络,比如图片语义分割、图片去模糊、可视化、图片无监督学习、图片深度估计,像这种网络的输出是一整张图片的任务,很多都有相关的文献,而且都是利用了反卷积网络,取得了牛逼哄哄的结果。所以我觉得我学习这篇文献,更大的意义在于学习反卷积网络。

 

作者提出了两点问题:为什么深度卷积神经网络性能如此好?如何再提升该网络呢?作者做了几组实验,分别证明了从实验现象上解释了这两个问题,可以详细来了解一下,包括其设计实验的技巧。

1,为什么深度网络性能如此好?

回答该问题,首先从实验结果来看,较高层次提取的feature对于平移和尺度变化具有不变性(对非中心对称的旋转不具有不变性)。

其次,通过设计实验来验证在图像分类问题中,深度神经网络是能够确定物体位置还是仅与其周围内容有关,作者对图像不同部分用gray square进行遮挡,以一下参数变化来反映模型能够identify物体的位置:(1)发现当遮住物体时,正确类别的概率值下降特别明显;(2)遮住feature map响应最大的物体时,整体的activity下降很大;(3)最有可能的标记如果是某一物体,这个物体遮挡后,其概率下降很大。

深度模型在隐含地计算correspondence between specific object parts in different images。作者利用5幅狗的图像,每次遮住相同物体的某些部位,对其中一幅图像,可以计算遮住某部位前后特征向量的变化,而再计算不同图像之间这种变化的相似度,相似度高说明不同图像中狗的这些部位变化对最终分类结果影响很相近,来证明深度模型对不同部位能够建立一定的correspondence。

总起来在证明什么呢?在证明深度模型提取的特征具有不变性,而且能够identify物体的位置,不仅如此还能够建立一种物体与其不同部位(即使不同图像存在变化)有一定relation。这都在说明深度网络性能为什么这么好!

2,如何再提升该网络呢?

回答该问题,作者通过将feature map中的个别较大响应可视化发现,在卷积的过程中尺寸选择较大时会出现aliasing artifacts,因此减小这些参数能够提升深度网络的性能,其实验结果也证明如此。

当然,作者在实验过程中通过变化网络的深度等,提出了很多事实,也可以看一下。

 

 

相关参考文献:

想象波音客机的制造过程,最终我们会发现,波音客机是怎么组成的,那么制造商的结构就应该是怎样的(因为每个制造商负责其中一个部件)。医学的发展也是如此,从最初的零星发现,到如今形成一门庞大的学科,具有多种分支这反过来也说明了医学本身的复杂性,在这样的复杂性下,医学才能取得今天的成就。反观目前的深度学习研究,似乎还属于一个相对垄断的领域,有零星的几个研究领域,根据Conway‘s Law,这可能意味着我们对深度学习的了解还远远不够。而要怎样才算够了?目前还没人知道。

本文由9159.com发布于编程,转载请注明出处:欢迎小伙伴贴出更高的识别率9159.com,反卷积网络

关键词: 9159.com