当前位置: 首页 > news >正文

厦门定制型网站建设淘客推广平台排名

厦门定制型网站建设,淘客推广平台排名,扬州网站建设开发,海拉尔北京网站建设课程来源#xff1a;人工智能实践:Tensorflow笔记2 文章目录前言1、卷积神经网络的基本步骤1、卷积神经网络计算convolution2、感受野以及卷积核的选取3、全零填充Padding4、tf描述卷积层5、批标准化(BN操作)6、池化Pooling7、舍弃Dropout8、卷积神经网络搭建以及参数分析2、经…课程来源人工智能实践:Tensorflow笔记2 文章目录前言1、卷积神经网络的基本步骤1、卷积神经网络计算convolution2、感受野以及卷积核的选取3、全零填充Padding4、tf描述卷积层5、批标准化(BN操作)6、池化Pooling7、舍弃Dropout8、卷积神经网络搭建以及参数分析2、经典卷积网络讲解1、LeNet2、AlexNet3、VGGNet4、InceptionNet5、ResNet6、经典卷积网络总结总结前言 本讲目标:讲解卷积神经网络的基本步骤以及分析比较经典的网络架构希望对你有所帮助 经典的5个论文的下载链接 链接https://pan.baidu.com/s/1rIH1nh28ON6DKM6T9HPXbQ 提取码kbd8 1、卷积神经网络的基本步骤 1、卷积神经网络计算convolution 卷积概念 卷积的概念卷积可以认为是一种有效提取图像特征的方法。一般会用一个正方形的 卷积核按指定步长在输入特征图上滑动遍历输入特征图中的每个像素点。每一个步长 卷积核会与输入特征图出现重合区域重合区域对应元素相乘、求和再加上偏置项得到输出 特征的一个像素点 卷积注意点 输入特征图的深度决定了卷积核的深度 当前层的卷积核个数决定了当前层的输出特征图深度 如果觉得某一层的特征提取能力不足可以在这一层多用几个卷积核 卷积使用立体卷积核实现了参数的空间共享 执行卷积计算时卷积核里的参数是固定的反向传播时会更新参数 示例 2、感受野以及卷积核的选取 这个之前有思考过见下面链接 为什么两层33卷积核效果比1层55卷积核效果要好 3、全零填充Padding 在 Tensorflow 框架中用参数 padding ‘SAME’或 padding ‘VALID’表示是否进行全 零填充其对输出特征尺寸大小的影响如下 对于 5×5×1 的图像来说 当 padding ‘SAME’时输出图像边长为 5当 padding ‘VALID’时输出图像边长为 3。 4、tf描述卷积层 tf.keras.layers.Conv2D( filters卷积核个数, kernel_size卷积核尺寸、#正方形写核长整数或(核高h核宽w) strides滑动步长#横纵向相同写步长整数或(纵向步长h,横向步长w)默认1 padding same or valid, #使用全零填充是same,不使用是valid(默认) activation relu or sigmoid ortrain orsoftmax,#如果有BN此处不填 input_shape (高宽通道数) #输入特征维度可省略) 调用方法如下 代码解释 1、使用6个(5,5)的卷积核卷积不全零填充使用sigmoid作为激活函数 2、使用(2,2)的池化核步长为2选用最大池化 3、使用Flatten将输出拉直成一维数组 4、使用10个神经元构成的全连接激活函数使用softmax modeltf.keras.models.Sequential([Conv2D(6,5,paddingvalid,activationsigmoid),MaxPool2D(2,2),#或者这样调用#Conv2D(6,(5,5),paddingvalid,activationsigmoid),#MaxPool2D(2,(2,2),#也可以这样调用#Conv2D(filters6,kenrnel_size(5,5),paddingvalid,activationsigmoid),#MaxPool2D(pool_size(2,2),strides2),Flatten(),Dense(10,activationsoftmax) ])在利用 Tensorflow 框架构建卷积网络时一般会利用 BatchNormalization 函数来构建 BN 层进行批归一化操作所以在 Conv2D 函数中经常不写 BN 5、批标准化(BN操作) 神经网络对0附近的数据更敏感 但是随着网络层数的增加特征数据会出现偏离0均值的情况 使用标准化将偏移的数据重新拉回 批标准化是对一个batch的数据做标准化处理常用在卷积操作和激活操作之间 第K个batch张输出特征图 BN操作将原本偏移的特征数据重新拉回到0均值使进入激活函数的数据分布在激活函数线性区使得输入数据的微小变化更明显地体现到输出上提升了激活函数对输入数据的区分力。 但是这种简单的特征数据标准化使特征数据完全满足标准正太分布集中在激活函数的线性区域使激活函数丧失了非线性性质因此在BN操作中为每个卷积核引入两个可训练参数。 反向传播时缩放因子和偏移因子会与其他待训练参数一同呗训练优化。使标准正太分布后的特征数据通过缩放因子和偏移因子优化了特征数据分布的宽窄和偏移量。保证了网络的非线性表达力。 BN层位于卷积层与激活层之间 tf提供了BN操作的函数BatchNormalization() modeltf.keras.models.Sequential([Conv2D(filters6,kernel_size(5,5),paddingsame),#卷积层BatchNormalization(), #BN层Activation(relu), #激活层MaxPool2D(pool_size(2,2),strides2,paddingsame),#池化层Dropout(0.2), #dropout层 ])6、池化Pooling 池化用于减少特征数据量 最大值池化可以提取图片纹理均值池化可以保留背景特征 如果用2 * 2的池化核对输入图片进行步长为2的池化操作输出图片将变为输入图片的四分之一大小 tf描述池化操作 tf.keras.layers.MaxPool2D( pool_size池化核尺寸, strides池化步长, paddingvalidorsame#same全零填充valid不全零填充、 ) tf.keras.layers.AveragePooling2D( pool_size池化核尺寸, strides池化步长, paddingvalidorsame#same全零填充valid不全零填充 )调用例子 modeltf.keras.models.Sequential([Conv2D(filters6,kernel_size(5,5),paddingsame),#卷积层BatchNormalization(), #BN层Activation(relu), #激活层MaxPool2D(pool_size(2,2),strides2,paddingsame),#池化层Dropout(0.2), #dropout层 ])7、舍弃Dropout 为了缓解神经网络过拟合在神经网络训练中常常把隐藏层的部分神经元按照一定比例从神经网络中临时舍弃 在使用神经网络时再把所有神经元恢复到神经网络中。 Dropout函数 tf.keras.layers.Dropout(舍弃的概率)8、卷积神经网络搭建以及参数分析 卷积神经网络借助卷积核提取特征后送入全连接网络 卷积神经网络的主要模块: 卷积(conv) 批标准化(BN) 激活(Activation) 池化(Pooling) 卷积是什么卷积就是特征提取器就是CBAPD 在这里我们仍然套用网络八股的构架 1、import引入tensorflow及keras、numpy等所需模块 2、读取数据集 3、搭建所需的网络结构当网络结构比较简单时可以利用keras模块中的tf.keras.Sequential来搭建顺序网络模型但是当网络不再是简单的顺序结构而是有其他特殊的结构出现(如ResNet中的跳连结构),急需要利用class来定义自己的网络结构 4、对搭建好的网络进行编译(compile)通常在这一步指定所采用的优化器(Adam、SGD、RMSdrop)以及损失函数(交叉熵函数、均方差函数等) 5、将数据输入编译好的网络来训练(model.fit)在这一步中指定训练轮数epochs以及batch_size等信息。由于参数量和计算量一般都比较大训练所需的时间也会比较长这一步中通常会加入断点续训以及模型参数保存 6、将神经网络模型具体信息打印出来(model.summary)包括网络结构、网络各层参数 这里还要讲一下flatten函数 Flatten层用来将输入“压平”即把多维的输入一维化常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。 接下来我们使用类搭建5x5的卷积核6个池化核2x2步长2的网络结构 #使用类搭建网络结构CBAPD class Baseline(Model):def _init_(self):super(Baseline,self)._init_()self.c1 Conv2D(filters6,kernel_size(5,5),paddingsame)self.b1 BatchNormalization()self.a1 Activaction(relu)self.p1 MaxPool2D(pool_size(2,2),strides2,padding same)self.d1 Dropout(0.2)self.flatten Flatten()self.f1 Dense(128,activationrelu)self.d2 Dropout(0.2)self.f2 Dense(10,activationsoftmax) #call函数调用init函数中搭建好的每层网络结构 def call(self,x):xself.c1(x)xself.b1(x)xself.a1(x)xself.p1(x)xself.d1(x)xself.flatten(x)xself.f1(x)xself.d2(x)yself.f2(x)return y #从输入到输出过一次前向传播返回推理结果我们来分析一下参数 打开weights文件 baseline/conv2d/kernel:0 第一层网络 5x5x3的卷积核 一共6个 (5, 5, 3, 6)450 baseline/conv2d/bias:0 每个卷积核的偏置项b (6,)6 baseline/batch_normalization/gamma:0 BN操作中的缩放因子γ每个卷积核一个γ (6,)6 baseline/batch_normalization/beta:0 BN操作中的偏移因子γ每个卷积核一个γ (6,)6 baseline/dense/kernel:0 第一层全连接网络 (1536, 128)196608 baseline/dense/bias:0 第一层全连接网络128个偏置b (128,)128 baseline/dense_1/kernel:0 第二层全连接网络 (128, 10)1280 baseline/dense_1/bias:0 第二层全连接网络10个偏置b (10,)10 总共450666196608128128010198494 有了这些参数就可以复现出神经网络的前向传播实现应用 可以发现神经网络的网络参数十分多多大十几万甚至更多(当网络复杂层数增加),并且可以发现绝大部分参数都集中在全连接层上卷积层的参数占比较小。然而卷积核的参数却是非常重要的(因为卷积是特征提取器特征的参数才是图片识别的重点)。所以减少全连接网络的参数或许会是一个不错的网络优化方法。 至此基本的神经网络的搭建方法已经讲解完毕。接下来会逐一讲解LeNet、AlexNet、VGGNet、InceptionNet 和 ResNet的特点并且用基于tensorflow的代码复现出网络架构。 2、经典卷积网络讲解 1、LeNet 网络结构 tf复现模型 这里对原模型进行调整输入图片大小修改为32 * 32 * 3用来适应数据集cifar10并且将大的卷积核用小卷积核来替代 class LeNet5(Model):def __init__(self):super(LeNet5,self).__init__()self.c1Conv2D(filters6,kernel_size(5,5),paddingvalid,input_shape(32,32,3),activationsigmoid)self.p1MaxPool2D(pool_size(2,2),strides2)self.c2Conv2D(filters16,kernel_size(5,5),paddingvalid,activationsigmoid)self.p2MaxPool2D(pool_size(2,2),strides2)self.flatten Flatten()self.f1 Dense(120,activationsigmoid)self.f1 Dense(84,activationsigmoid)self.f1 Dense(10,activationsoftmax)def call(self, x):x self.c1(x)x self.p1(x)x self.c2(x)x self.p2(x)x self.flatten(x)x self.f1(x)x self.f2(x)y self.f3(x)return ymodel LeNet5() 优点共享卷积核减少网络参数. 如何理解卷积神经网络中的权值共享 2、AlexNet 网络结构 当时由于显存不足训练分成两部分完成。这里对原模型进行调整输入图片大小修改为32 * 32 * 3用来适应数据集cifar10并且将大的卷积核用小卷积核来替代。 class AlexNet8(Model):def __init__(self):super(AlexNet8,self).__init__()self.c1Conv2D(filters96,kernel_size(3,3))self.b1BatchNormalization()self.a1Activation(relu)self.p1MaxPool2D(pool_size(3,3),strides2)self.c2Conv2D(filters256,kernel_size(3,3))self.b2BatchNormalization()self.a2Activation(relu)self.p2MaxPool2D(pool_size(3,3),strides2)self.c3Conv2D(filters384,kernel_size(3,3,paddingsame,activationrelu)self.c4Conv2D(filters384,kernel_size(3,3,paddingsame,activationrelu)self.c5Conv2D(filters256,kernel_size(3,3,paddingsame,activationrelu)self.p3MaxPool2D(pool_size(3,3),strides2)self.flatten Flatten()self.f1 Dense(2048,activationrelu)self.d1 Dropout(0.5)self.f1 Dense(2048,activationrelu)self.d1 Dropout(0.5)self.f1 Dense(10,activationsoftmax) def call(self, x):x self.c1(x)x self.b1(x)x self.a1(x)x self.p1(x)x self.c2(x)x self.b2(x)x self.a2(x)x self.p2(x)x self.c3(x)x self.c4(x)x self.c5(x)x self.p3(x)x self.flatten(x)x self.f1(x)x self.d1(x)x self.f2(x)x self.d2(x)y self.f3(x)return ymodel AlexNet8()优点激活函数使用 Relu提升训练速度Dropout 防止过拟合 3、VGGNet 网络结构 为适应 cifar10 数据集将输入图像尺寸由 224 * 244 * 3 调整为 32 * 32 * 3 class VGG16(Model):def __init__(self):super(VGG16, self).__init__()self.c1 Conv2D(filters64, kernel_size(3, 3), paddingsame) # 卷积层1self.b1 BatchNormalization() # BN层1self.a1 Activation(relu) # 激活层1self.c2 Conv2D(filters64, kernel_size(3, 3), paddingsame, )self.b2 BatchNormalization() # BN层1self.a2 Activation(relu) # 激活层1self.p1 MaxPool2D(pool_size(2, 2), strides2, paddingsame)self.d1 Dropout(0.2) # dropout层self.c3 Conv2D(filters128, kernel_size(3, 3), paddingsame)self.b3 BatchNormalization() # BN层1self.a3 Activation(relu) # 激活层1self.c4 Conv2D(filters128, kernel_size(3, 3), paddingsame)self.b4 BatchNormalization() # BN层1self.a4 Activation(relu) # 激活层1self.p2 MaxPool2D(pool_size(2, 2), strides2, paddingsame)self.d2 Dropout(0.2) # dropout层self.c5 Conv2D(filters256, kernel_size(3, 3), paddingsame)self.b5 BatchNormalization() # BN层1self.a5 Activation(relu) # 激活层1self.c6 Conv2D(filters256, kernel_size(3, 3), paddingsame)self.b6 BatchNormalization() # BN层1self.a6 Activation(relu) # 激活层1self.c7 Conv2D(filters256, kernel_size(3, 3), paddingsame)self.b7 BatchNormalization()self.a7 Activation(relu)self.p3 MaxPool2D(pool_size(2, 2), strides2, paddingsame)self.d3 Dropout(0.2)self.c8 Conv2D(filters512, kernel_size(3, 3), paddingsame)self.b8 BatchNormalization() # BN层1self.a8 Activation(relu) # 激活层1self.c9 Conv2D(filters512, kernel_size(3, 3), paddingsame)self.b9 BatchNormalization() # BN层1self.a9 Activation(relu) # 激活层1self.c10 Conv2D(filters512, kernel_size(3, 3), paddingsame)self.b10 BatchNormalization()self.a10 Activation(relu)self.p4 MaxPool2D(pool_size(2, 2), strides2, paddingsame)self.d4 Dropout(0.2)self.c11 Conv2D(filters512, kernel_size(3, 3), paddingsame)self.b11 BatchNormalization() # BN层1self.a11 Activation(relu) # 激活层1self.c12 Conv2D(filters512, kernel_size(3, 3), paddingsame)self.b12 BatchNormalization() # BN层1self.a12 Activation(relu) # 激活层1self.c13 Conv2D(filters512, kernel_size(3, 3), paddingsame)self.b13 BatchNormalization()self.a13 Activation(relu)self.p5 MaxPool2D(pool_size(2, 2), strides2, paddingsame)self.d5 Dropout(0.2)self.flatten Flatten()self.f1 Dense(512, activationrelu)self.d6 Dropout(0.2)self.f2 Dense(512, activationrelu)self.d7 Dropout(0.2)self.f3 Dense(10, activationsoftmax)def call(self, x):x self.c1(x)x self.b1(x)x self.a1(x)x self.c2(x)x self.b2(x)x self.a2(x)x self.p1(x)x self.d1(x)x self.c3(x)x self.b3(x)x self.a3(x)x self.c4(x)x self.b4(x)x self.a4(x)x self.p2(x)x self.d2(x)x self.c5(x)x self.b5(x)x self.a5(x)x self.c6(x)x self.b6(x)x self.a6(x)x self.c7(x)x self.b7(x)x self.a7(x)x self.p3(x)x self.d3(x)x self.c8(x)x self.b8(x)x self.a8(x)x self.c9(x)x self.b9(x)x self.a9(x)x self.c10(x)x self.b10(x)x self.a10(x)x self.p4(x)x self.d4(x)x self.c11(x)x self.b11(x)x self.a11(x)x self.c12(x)x self.b12(x)x self.a12(x)x self.c13(x)x self.b13(x)x self.a13(x)x self.p5(x)x self.d5(x)x self.flatten(x)x self.f1(x)x self.d6(x)x self.f2(x)x self.d7(x)y self.f3(x)return ymodel VGG16()总体来看VGGNet的结构是相当规整的它继承了 AlexNet中的Relu激活函数、Dropout操作等有效的方法同时采用了单一尺寸的 3 * 3 小卷积核形成了规整的 CConvolution卷积、BBatch normalization、AActivation激活、PPooling池化、DDropout结构这一典型结构在卷积神经网络中的应用是非常广的 优点小卷积核减少参数的同时提高识别准确率网络结构规整适合并行加速。 4、InceptionNet 优点一层内使用不同尺寸的卷积核提升感知力通过 padding 实现输出特征面积一致使用 1 * 1 卷积核改变输出特征 channel 数减少网络参数。 基本单元 class ConvBNRelu(Model):def __init__(self,ch,kernelsz3,strides1,paddingsame):super(ConvBNRelu,self).__init__()self.modeltf.keras.models.Sequential([Conv2D(ch,kernelsz,stridesstrides,paddingpadding),BatchNormalization(),Activation(relu)])def call(self,x,trainingNone):xself.model(x,trainingtraining)return x #ch 特征图的通道数即卷积核个数 class InceptionBlk(Model)def __init__(self,ch,strides1):super(InceptionBlk,self).__init__()self.chchself.stridesstridesself.c1ConvBNRelu(ch,kernelsz1,stridesstrides)self.c2_1ConvBNRelu(ch,kernelsz1,stridesstrides)self.c2_2ConvBNRelu(ch,kernelsz3,strides1)self.c3_1ConvBNRelu(ch,kernelsz1,stridesstrides)self.c3_2ConvBNRelu(ch,kernelsz5,strides1)self.p4_1MaxPool2D(3,strides1,paddingsame)self.c4_2ConvBNRelu(ch,kernelsz1,stridesstrides)def call(self,x):x1self.c1(x)x2_1self.c2_1(x)x2_2self.c2_2(x2_1)x3_1self.c3_1(x)x3_2self.c3_2(c3_1)x4_1self.p4_1(x)x4_2self.c4_2(x4_1)#concat along axischannelxtf.concat([x1,x2_2,x3_2,x4_2],axis3)return x 其实基本单元一开始是长这样的通过不同尺寸的卷积层和池化层的横向组合(卷积和池化后的尺寸相同便于叠加)来拓宽网络深度增强网络对尺寸的适应性。但由于卷积核都是在上一层的输出上直接计算的导致参数变多以及运算变得复杂所以加入1 * 1卷积核减少特征厚度。 以5 * 5的卷积运算为例说明这个 问题。假设网络上一层的输出为 100 * 100 * 128H * W * C通过 32 * 5 * 532 个大小 为 5 * 5 的卷积核的卷积层步长为 1、全零填充后输出为 100 * 100 * 32卷积层的 参数量为 32 * 5 * 5 * 128 102400如果先通过 32 * 1 * 1 的卷积层输出为 100 * 100 * 32 再通过 32 * 5 * 5 的卷积层输出仍为 100 * 100 * 32但卷积层的参数量变为 32 * 1 * 1 * 128 32 * 5 * 5 * 32 29696仅为原参数量的 30 %左右这就是小卷积核的降维作用。 由基本模块组成网络构架如下: 代码描述 class Inception10(Model):def __init__(self,num_blocks,num_classes,init_ch16,**kwargs):super(Inception10,self).__init__(**kwargs)self.in_channelsinit_chself.out_channelsinit_chself.num_blocksnum_blocksself.init_chinit_chself.c1ConvBNRelu(init_ch)self.blockstf.keras.models.Sequential()for block_id in range(num_blocks):for layer_id in range (2):if layer_id0:blockInceptionBlk(self.out_channels,strides2)else:blockInceptionBlk(self.out_channels,strides1)self.blocks.add(block)#self.out_channels*2self.p1 GlobalAveragePooling2D()self.f1 Dense(num_classes,activationsoftmax)def call(self,x):xself.c1(x)xself.blocks(x)xself.p1(x)yself.f1(x)return y modelInception10(num_blocks2,num_classes10) 参数num_blocks代表InceptionNet的Block数每个Block由两个基本单元构成每经过一个 Block特征图尺寸变为1/2,通道数变为原来的两倍 num_classes代表分类数 init_ch代表初始通道数代表InceptionNet基本单元的初始卷积核个数 InceptionNet采用全局平均池化全连接层VGGNet(有三层全连接层) 平均池化:在特征图上以窗口的形式滑动取窗口内的平均值为采样值 全局平均池化直接针对特征图取平均值每一个特征图输出一个值通过这种方式每个特征图都与分类概率直接联系起来替代了全连接层的功能并且不会产生额外的训练参数减少了过拟合的可能但会导致网络收敛速度变慢。 InceptionNet采用多尺寸卷积再聚合的方式拓宽了网络结构并通过 1 * 1卷积运算来减少参数量。 5、ResNet 优点层间残差跳连引入前方信息减少梯度消失使神经网络层数变深成为可能。 已知对于一个深度比较合适的网络来说继续增加层数反而会导致训练错误率的提升 ResNet核心思路为对一个准确率达到饱和的浅层网络在它后面加几个恒等映射层即 y x输出等于输入增加网络深度的同时不增加误差。这使得神经网络的层数可以超越之前的约束提高准确率。 这种残差结构的示意图如下 注意这里的相加与 InceptionNet 中的相加是有本质区别的Inception 中的相加是沿深度方向叠加像“千层蛋糕”一样对层数进行叠加ResNet 中的相加则是特征图对应元素的数值相加。 代码描述 class ResnetBlock(Model):def __init__(self,filters,strides1,residual_pathFalse):super(ResnetBlock,self).__init__()self.filters filtersself.strides stridesself.residual_path residual_pathself.c1 Conv2D(filters,(3,3),stridesstrides,paddingsame,use_biasFalse)self.b1 BatchNormalization()self.a1 Activation(relu)self.c2 Conv2D(filters,(3,3),strides1,paddingsame,use_biasFalse)self.b2 BatchNormalization()#residual_path为Ture时对输入进行下采样用1x1的卷积核卷积保证x和F(x)维度相同if residual_path:self.down_c1 Conv2D(filters,(1,1),stridesstrides,paddingsame,use_biasFalse)self.down_b1 BatchNormalization()self.a2Activation(relu)def call(self,inputs):residual inputs #residual等于输入值本身即residualx#将输入通过卷积、BN层激活层计算F(X)xself.c1(inputs)xself.b1(x)xself.a1(x)xself.c2(x)yself.b2(x)if self.residual_path:residualself.down_c1(inputs)residualself.down_b1(residual)out self.a2(yresidual) #最后输出两部分的和F(x)x或者F(x)Wx再过激活函数return outResNet18网络结构以及其利用tf构建模型示意 图1 图2 class ResNet(Model):def __init__(self,block_list,initial_filters64): #block_list表示每个block有几个卷积层super(ResNet,self).__init__()self.num_blocks len(block_list)self.block_list block_listself.out_filters initial_filtersself.c1 Conv2D(self.out_filters,(3,3),strides1,paddingsame,use_biasFalse,kernel_initializehe_normal)self.b1 tf.keras.layers.BatchNormalization()self.a1 Activation(relu)self.blocks tf.keras.models.Sequential()#构建ResNet网络结构for block_id in range(len(block_list)): #第几个resnet_blockfor layer_id in range(block_list(block_list[block_id])): #第几个卷积层if block_id!0 and layer_id0 : #对除第一个block以外的每个block的输入进行下采样,对于一个样值序列间隔几个样值取样一次这样得到新序列就是原序列的下采样block ResnetBlock(self.out_filters,strides2,residual_path True)else:block ResnetBlock(self.out_filters,residual_pathFalse)self.blocks.add(block) #将构建好的block加入resnetself.out_filters *2 #下一个block的卷积核个数是上一个block的2倍self.p1 tf.keras.layers.GlobalAveragePooling2D()self.f1 tf.keras.layers.Dense(10)def call(self,inputs):xself.c1(inputs)xself.b1(x)xself,a1(x)xself.blocks(x)xself.p1(x)yself.f1(x) #由于使用了GAP所以不需要dropout操作(不再是黑箱操作了)return y 三层残差单元用于构建更深的网络 6、经典卷积网络总结 总结 课程链接:MOOC人工智能实践TensorFlow笔记2 参考以及知识点补充链接 卷积神经网络—AlexNet、VGG、GoogleNet、ResNet论文解读 CNN浅析和历年ImageNet冠军模型解析
http://www.pierceye.com/news/683707/

相关文章:

  • 珠海选车牌号网站系统icp对网站内容
  • 东莞购物网站如何建立免费个人网站
  • 网站个别页面做seo建立有效的什么机制
  • 学校网站建设模板wordpress 年月归档
  • 凡科做的网站行不行京东慧采入驻条件及费用2023年
  • 汽车网站建设页面网站建设营销公司
  • 可以写代码的网站有哪些问题微信公众号的推广
  • 网站建设项目怎么写新网站一般多久收录
  • 什么网站可以免费发广告合肥做网站一般多少钱
  • 企业网站优化的方式大安市网站
  • 镇江专业网站建设制作wordpress调查插件
  • 桂林网站制作多少钱最好的网站开发公司
  • 广州网站开发公司排名广州从化建设网站官网
  • 网站备案在杭州注册公司需要什么条件
  • 购买域名做销售网站可以吗河北邢台刚刚发布的紧急通知
  • 安溪建设局网站政务网站建设信息
  • 如何做公司自己的网站首页网站建设的钱计入什么科目
  • 网站建设公司行业免费下载网站模版
  • 海外做淘宝网站网站有关于我们的好处
  • 给别人做网站挣钱吗怎么建设推广网站
  • 南宁市网站开发深圳制作app
  • 临海大经建设集团网站雄安做网站
  • 网站设计多少钱通桥小学的网站建设
  • 上海制作网站的公司做彩票网站违法吗
  • ps软件手机版下载百度seo工具
  • 新乡网站关键词优化建设局网站信息管理制度
  • 海南论坛网站建设网站建设怎么放到云空间
  • 中山 灯饰 骏域网站建设专家网站建设需求范文
  • 东光网站建设淘宝店铺装修苏州网站建设服务
  • 平台型网站建设预算表哈尔滨网站制作多少钱