深度学习(08)-- Residual Network (ResNet)

文章目录

  • 目录
    • 1.残差网络基础
      • 1.1基本概念
      • 1.2VGG19、ResNet34结构图
      • 1.3 梯度弥散和网络退化
      • 1.4 残差块变体
      • 1.5 ResNet模型变体
      • 1.6 Residual Network补充
      • 1.7 1*1卷积核(补充)
    • 2.残差网络介绍(何凯明)
    • 3.ResNet-50(Ng)
      • 3.1 非常深的神经网络问题
      • 3.2 建立一个残差网络
      • 3.3first ResNet model(50layers)
      • 3.4 代码实现
    • 4.ResNet 100-1000层
      • 4.1 152层

目录

1.残差网络基础

1.1基本概念

非常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题。ResNets是由残差块(Residual block)构建的,首先解释一下什么是残差块。
残差块结构:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2VGG19、ResNet34结构图

在这里插入图片描述

1.3 梯度弥散和网络退化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4 残差块变体

自AlexNet以来,state-of-the-art的CNN结构都在不断地变深。VGG和GoogLeNet分别有19个和22个卷积层,而AlexNet只有5个。

ResNet基本思想:引入跳过一层或多层的shortcut connection。
在这里插入图片描述

1.5 ResNet模型变体

(1)ResNeXt
在这里插入图片描述
在这里插入图片描述
(2)DenseNet
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.6 Residual Network补充

在这里插入图片描述
在这里插入图片描述

1.7 1*1卷积核(补充)

*1的卷积核相当于对一个切片上的nc个单元,都应用了一个全连接的神经网络
在这里插入图片描述

2.残差网络介绍(何凯明)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.ResNet-50(Ng)

3.1 非常深的神经网络问题

在这里插入图片描述

3.2 建立一个残差网络

使用 short connect的残差块,能很容易的学习标识功能。在其他ResNet块上进行堆栈,不会损害训练集的性能。
(1)identity block (标准块)

在这里插入图片描述
(2)convolutional block
当输入和输出的尺寸不匹配时,使用
在这里插入图片描述

3.3first ResNet model(50layers)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4 代码实现

def identity_block(X, f, filters, stage, block):"""X       -- 输入tensor, shape=(m, n_H_prev, n_W_prev, n_C_prev)f       -- identity block主路径,中间卷积层的滤波器大小filters -- [f1,f2,f3]对应主路径中三个卷积层的滤波器个数stage   -- 用于命名层,阶段(数字表示:1/2/3/4/5...)block   -- 用于命名层,每个阶段中的残差块(字符表示:a/b/c/d/e/f...)Return   X  -- identity block 输出tensor  shape=(m, n_H, n_W, n_C)    """"define name basis"conv_name_base = 'res' + str(stage) + block + '_branch'bn_name_base   = 'bn'  + str(stage) + block + '_branch'"get filter number"F1, F2, F3 = filters"save the input value"X_shortcut = X"主路径的第一层:conv-bn-relu"X = Conv2D(filters=F1, kernel_size=(1,1), strides=(1,1), padding='valid',name=conv_name_base+'2a', kernel_initializer=glorot_uniform(seed=0))(X)X = BatchNormalization(axis=3, name=bn_name_base+'2a')(X)X = Activation('relu')(X)"主路径的第二层:conv-bn-relu"X = Conv2D(filters=F2, kernel_size=(f,f), strides=(1,1), padding='same',name=conv_name_base+'2b', kernel_initializer=glorot_uniform(seed=0))(X)X = BatchNormalization(axis=3, name=bn_name_base+'2b')(X)X = Activation('relu')(X)"主路径的第三层:conv-bn"X = Conv2D(filters=F3, kernel_size=(1,1), strides=(1,1), padding='valid',name=conv_name_base+'2c', kernel_initializer=glorot_uniform(seed=0))(X)X = BatchNormalization(axis=3, name=bn_name_base+'2c')(X)"add shortcut and relu"X = Add()([X, X_shortcut])X = Activation('relu')(X)return X"""s -- convolutional block中,主路径第一个卷积层和shortcut卷积层,滤波器滑动步长,s=2,用来降低图片大小"""
def convolutional_block(X, f, filters, stage, block, s=2):conv_name_base = 'res' + str(stage) + block + '_branch'bn_name_base   = 'bn'  + str(stage) + block + '_branch'F1, F2, F3 = filtersX_shortcut = X"1st layer"X = Conv2D(filters=F1, kernel_size=(1,1), strides=(s,s), padding='valid',name=conv_name_base+'2a', kernel_initializer=glorot_uniform(seed=0))(X)X = BatchNormalization(axis=3, name=bn_name_base+'2a')(X)X = Activation('relu')(X)"2nd layer"X = Conv2D(filters=F2, kernel_size=(f,f), strides=(1,1), padding='same',name=conv_name_base+'2b', kernel_initializer=glorot_uniform(seed=0))(X)X = BatchNormalization(axis=3, name=bn_name_base+'2b')(X)X = Activation('relu')(X)"3rd layer"X = Conv2D(filters=F3, kernel_size=(1,1), strides=(1,1), padding='valid',name=conv_name_base+'2c', kernel_initializer=glorot_uniform(seed=0))(X)X = BatchNormalization(axis=3, name=bn_name_base+'2c')(X)"shortcut path"X_shortcut = Conv2D(filters=F3, kernel_size=(1,1), strides=(s,s), padding='valid',name=conv_name_base+'1', kernel_initializer=glorot_uniform(seed=0))(X_shortcut)X_shortcut = BatchNormalization(axis=3, name=bn_name_base+'1')(X_shortcut)X = Add()([X, X_shortcut])X = Activation('relu')(X)return X
def ResNet50(input_shape=(64,64,3), classes=6):"""input - zero padding stage1:conv - BatchNorm - relu - maxpoolstage2: conv block - identity block *2stage3: conv block - identity block *3stage4: conv block - identity block *5stage5: conv block - identity block *2avgpool - flatten - fully connectinput_shape  -- 输入图像的shapeclasses      -- 类别数Return: a model() instance in Keras""""用input_shape定义一个输入tensor"X_input = Input(input_shape)"zero padding"X = ZeroPadding2D((3,3))(X_input)"stage 1"X = Conv2D(filters=64, kernel_size=(7,7), strides=(2,2), padding='valid',name='conv1', kernel_initializer=glorot_uniform(seed=0))(X)X = BatchNormalization(axis=3, name='bn_conv1')(X)X = MaxPooling2D((3,3), strides=(2,2))(X)"stage 2"X = convolutional_block(X, f=3, filters=[64,64,256], stage=2, block='a', s=1)X = identity_block(X,f=3, filters=[64,64,256], stage=2, block='b')X = identity_block(X,f=3, filters=[64,64,256], stage=2, block='c')"stage 3"X = convolutional_block(X, f=3, filters=[128,128,512], stage=3, block='a', s=2)X = identity_block(X, f=3, filters=[128,128,512], stage=3, block='b')X = identity_block(X, f=3, filters=[128,128,512], stage=3, block='c')X = identity_block(X, f=3, filters=[128,128,512], stage=3, block='d')"stage 4"X = convolutional_block(X, f=3, filters=[256,256,1024], stage=4, block='a', s=2)X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='b')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='c')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='d')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='e')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='f')"stage 5"X = convolutional_block(X, f=3, filters=[512,512,2048], stage=5, block='a', s=2)X = identity_block(X, f=3, filters=[512,512,2048], stage=5, block='b')X = identity_block(X, f=3, filters=[512,512,2048], stage=5, block='c')"fully connect"X = AveragePooling2D((2,2), name='avg_pool')(X)X = Flatten()(X)X = Dense(classes, activation='softmax', name='fc'+str(classes),kernel_initializer=glorot_uniform(seed=0))(X)"a model() instance in Keras"model = Model(inputs=X_input, outputs=X, name='ResNet50')return model

4.ResNet 100-1000层

在这里插入图片描述

4.1 152层

在这里插入图片描述
在这里插入图片描述

代码

def ResNet101(input_shape=(64,64,3), classes=6):"""input - zero padding stage1:conv - BatchNorm - relu - maxpoolstage2: conv block - identity block *2stage3: conv block - identity block *3stage4: conv block - identity block *22stage5: conv block - identity block *2avgpool - flatten - fully connectinput_shape  -- 输入图像的shapeclasses      -- 类别数Return: a model() instance in Keras""""用input_shape定义一个输入tensor"X_input = Input(input_shape)"zero padding"X = ZeroPadding2D((3,3))(X_input)"stage 1"X = Conv2D(filters=64, kernel_size=(7,7), strides=(2,2), padding='valid',name='conv1', kernel_initializer=glorot_uniform(seed=0))(X)X = BatchNormalization(axis=3, name='bn_conv1')(X)X = MaxPooling2D((3,3), strides=(2,2))(X)"stage 2"X = convolutional_block(X, f=3, filters=[4,4,16], stage=2, block='a', s=1)X = identity_block(X,f=3, filters=[4,4,16], stage=2, block='b')X = identity_block(X,f=3, filters=[4,4,16], stage=2, block='c')"stage 3"X = convolutional_block(X, f=3, filters=[8,8,32], stage=3, block='a', s=2)X = identity_block(X, f=3, filters=[8,8,32], stage=3, block='b')X = identity_block(X, f=3, filters=[8,8,32], stage=3, block='c')X = identity_block(X, f=3, filters=[8,8,32], stage=3, block='d')"stage 4""identity block from 5(50 layers) to 22(101 layers)"X = convolutional_block(X, f=3, filters=[16,16,64], stage=4, block='a', s=2)X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='b')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='c')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='d')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='e')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='f')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='g')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='h')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='i')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='j')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='k')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='l')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='m')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='n')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='o')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='p')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='q')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='r')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='s')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='t')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='u')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='v')X = identity_block(X, f=3, filters=[16,16,64], stage=4, block='w')"stage 5"X = convolutional_block(X, f=3, filters=[32,32,128], stage=5, block='a', s=2)X = identity_block(X, f=3, filters=[32,32,128], stage=5, block='b')X = identity_block(X, f=3, filters=[32,32,128], stage=5, block='c')"fully connect"X = AveragePooling2D((2,2), name='avg_pool')(X)X = Flatten()(X)X = Dense(classes, activation='softmax', name='fc'+str(classes),kernel_initializer=glorot_uniform(seed=0))(X)"a model() instance in Keras"model = Model(inputs=X_input, outputs=X, name='ResNet101')return model
def ResNet152(input_shape=(64,64,3), classes=6):"""input - zero padding stage1:conv - BatchNorm - relu - maxpoolstage2: conv block - identity block *2stage3: conv block - identity block *7stage4: conv block - identity block *35stage5: conv block - identity block *2avgpool - flatten - fully connectinput_shape  -- 输入图像的shapeclasses      -- 类别数Return: a model() instance in Keras""""用input_shape定义一个输入tensor"X_input = Input(input_shape)"zero padding"X = ZeroPadding2D((3,3))(X_input)"stage 1"X = Conv2D(filters=64, kernel_size=(7,7), strides=(2,2), padding='valid',name='conv1', kernel_initializer=glorot_uniform(seed=0))(X)X = BatchNormalization(axis=3, name='bn_conv1')(X)X = MaxPooling2D((3,3), strides=(2,2))(X)"stage 2"X = convolutional_block(X, f=3, filters=[64,64,256], stage=2, block='a', s=1)X = identity_block(X,f=3, filters=[64,64,256], stage=2, block='b')X = identity_block(X,f=3, filters=[64,64,256], stage=2, block='c')"stage 3""identity block from 3(101 layers) to 7(152 layers)"X = convolutional_block(X, f=3, filters=[128,128,512], stage=3, block='a', s=2)X = identity_block(X, f=3, filters=[128,128,512], stage=3, block='b')X = identity_block(X, f=3, filters=[128,128,512], stage=3, block='c')X = identity_block(X, f=3, filters=[128,128,512], stage=3, block='d')X = identity_block(X, f=3, filters=[128,128,512], stage=3, block='e')X = identity_block(X, f=3, filters=[128,128,512], stage=3, block='f')X = identity_block(X, f=3, filters=[128,128,512], stage=3, block='g')X = identity_block(X, f=3, filters=[128,128,512], stage=3, block='h')"stage 4""identity block from 22(101 layers) to 35(152 layers)"X = convolutional_block(X, f=3, filters=[256,256,1024], stage=4, block='a', s=2)X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='b')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='c')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='d')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='e')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='f')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='g')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='h')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='i')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='j')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='k')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='l')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='m')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='n')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='o')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='p')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='q')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='r')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='s')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='t')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='u')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='v')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='w')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='x')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='y')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='z')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='z1')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='z2')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='z3')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='z4')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='z5')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='z6')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='z7')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='z8')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='z9')X = identity_block(X, f=3, filters=[256,256,1024], stage=4, block='z10')"stage 5"X = convolutional_block(X, f=3, filters=[512,512,2048], stage=5, block='a', s=2)X = identity_block(X, f=3, filters=[512,512,2048], stage=5, block='b')X = identity_block(X, f=3, filters=[512,512,2048], stage=5, block='c')"fully connect"X = AveragePooling2D((2,2), name='avg_pool')(X)X = Flatten()(X)X = Dense(classes, activation='softmax', name='fc'+str(classes),kernel_initializer=glorot_uniform(seed=0))(X)"a model() instance in Keras"model = Model(inputs=X_input, outputs=X, name='ResNet152')return model

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python(14)-模块

模块Python标准库,第三方库都是一个个模块,我们还可以编写自己的模块。模块python程序架构的核心模块,模块是一个工具包。 每一个以.py为扩展名的源代码文件都是一个模块。 想要使用工具包中的工具,可以使用Import的方式导入。 …

redis——命令请求的执行过程

发送命令请求 当用户在客户端中键入一个命令请求时, 客户端会将这个命令请求转换成协议格式, 然后通过连接到服务器的套接字, 将协议格式的命令请求发送给服务器。 读取命令请求 当客户端与服务器之间的连接套接字因为客户端的写入而变得可…

深度学习(09)-- DenseNet

文章目录目录1.DenseNet网络结构2.稠密连接及其优点3.代码实现4.补充说明目录 1.DenseNet网络结构 2.稠密连接及其优点 每层以之前层的输出为输入,对于有L层的传统网络,一共有L个连接,对于DenseNet,则有L*(L1)/2。 这篇论文主要…

redis——缓存击穿/穿透/雪崩

缓存穿透 一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就去后端系统查找(比如DB)。 一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透…

python(15)-window7配置iPython

前提:安装了Pythonanaconda anaconda安装参考:https://www.zhihu.com/question/58033789 在window系统下可以使用两种方法来实现类似与于Linux终端命令运行程序的方法(推荐方式2): 1.cmd:自己没有操作过,可以参考下面…

深度学习(10)-- Capsules Networks(CapsNet)

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/malele4th/article/details/79430464 </div><div id"content_views" class"markdown_views"><!-- flowchart 箭头图标 勿删 --&g…

手把手maven的功能/安装/使用/idea集成

看这篇文章不用着急安装&#xff0c;跟着步骤一定会成功&#xff0c;要理解maven是什么&#xff0c;如何使用。 介绍 maven官网 对于一个小白来说&#xff0c;官网有用的信息就是这些 不管如何介绍maven&#xff0c;作为使用者来说&#xff0c;主要感觉两个方面有帮助&#x…

python(16)-列表list,for循环

高级数据类型--列表1列表定义2列表中取值3列表的增&#xff0c;删&#xff0c;查&#xff0c;改3.1修改指定位置的数据3.2确定指定元素的索引3.3增加操作3.4删除操作3.5 元素是否存在与列表中 in3.6在指定索引位置插入元素4列表的数据统计5列表排序6列表的循环遍历-for7多维度l…

深度学习(11)-- GAN

TensorFlow &#xff08;GAN&#xff09; 目录 TensorFlow &#xff08;GAN&#xff09;目录1、GAN1.1 常见神经网络形式1.2 生成网络1.3 新手画家 & 新手鉴赏家1.4 GAN网络1.5 例子 1、GAN 今天我们会来说说现在最流行的一种生成网络, 叫做 GAN, 又称生成对抗网络, 也…

Python外(1)--try-expect

语法&#xff1a; try:正常情况下执行的代码块 expect 错误类型1:&#xff08;可选&#xff09;错误类型1对应的处理方案 expect 错误类型2:&#xff08;可选&#xff09;错误类型2对应的处理方案 expect:剩下的错误类型对应的处理方案 else:&#xff08;可选&#xff09;没有…

redis——数据结构和对象的使用介绍

redis官网 微软写的windows下的redis 我们下载第一个 额案后基本一路默认就行了 安装后&#xff0c;服务自动启动&#xff0c;以后也不用自动启动。 出现这个表示我们连接上了。 redis命令参考链接 String 字符串结构 struct sdshdr{//记录buf数组中已使用字节的数量int …

Python模块(1)-Argparse 简易使用教程

argparse 简易使用教程1.概况2. action3. argparse 使用demo3.1 argparse 实现加法器3.2 D-Model parser1.概况 argparse是Python中用于解析命令行参数的一个模块&#xff0c;可以自动生成help和usage信息&#xff1b;当从终端输入的参数无效时&#xff0c;模块会输出提示信息…

深度学习--Keras总结

Keras主要包括14个模块&#xff0c;本文主要对Models、layers、Initializations、Activations、Objectives、Optimizers、Preprocessing、metrics共计8个模块分别展开介绍&#xff0c;并通过一个简单的Bp神经网络说明各个模块的作用。 1. Model 包&#xff1a;keras.models …

redis——NOSQL及redis概述

NoSql入门概述 单机Mysql的美好时代 瓶颈&#xff1a; 数据库总大小一台机器硬盘内存放不下数据的索引&#xff08;B tree&#xff09;一个机器的运行内存放不下访问量&#xff08;读写混合&#xff09;一个实例不能承受Memcached&#xff08;缓存&#xff09; MySql 垂直拆…

Python(17)-元组tuple

高级数据类型--元组1.元组的定义2.元组基本操作3.元组的循环遍历4.元组的应用场景5.元组与格式化字符串6.元组与列表之间的转换元组的最大特征就是可访问不可改&#xff0c;可作为字典的键值&#xff0c;因为键值必须是唯一的。字符串也是不可边类型&#xff0c;因此也适合做字…

深度学习(莫烦 神经网络 lecture 3) Keras

神经网络 & Keras 目录 神经网络 & Keras目录1、Keras简介1.1 科普: 人工神经网络 VS 生物神经网络1.2 什么是神经网络 (Neural Network)1.3 神经网络 梯度下降1.4 科普: 神经网络的黑盒不黑1.5 Why Keras?1.6 兼容 backend 2、如何搭建各种神经网络2.1 Regressor回归…

阿里Java编程规约(集合)

【强制】关于 hashCode 和 equals 的处理&#xff0c;遵循如下规则&#xff1a; 1&#xff09; 只要覆写 equals&#xff0c;就必须覆写 hashCode。 2&#xff09; 因为 Set 存储的是不重复的对象&#xff0c;依据 hashCode 和 equals 进行判断&#xff0c;所以 Set 存储的对…

Pytorch(3)-数据载入接口:Dataloader、datasets

pytorch数据载入1.数据载入概况Dataloader 是啥2.支持的三类数据集2.1 torchvision.datasets.xxx2.2 torchvision.datasets.ImageFolder2.3 写自己的数据类&#xff0c;读入定制化数据2.3.1 数据类的编写map-style范式iterable-style 范式2.3.2 DataLoader 导入数据类1.数据载入…

阿里Java编程规约(控制语句)

【强制】在一个 switch 块内&#xff0c;每个 case 要么通过 continue/break/return 等来终止&#xff0c;要么 注释说明程序将继续执行到哪一个 case 为止&#xff1b;在一个 switch 块内&#xff0c;都必须包含一个 default 语句并且放在最后&#xff0c;即使它什么代码也没…

大数据学习(5)-- NoSQL数据库

文章目录目录1.NoSQL的介绍2.NoSQL产生的原因2.1 web2.02.2 NoSQL兴起原因3.NoSQL和关系数据库的区别4.NoSQL的四大类型4.1 键值数据库4.2 列族数据库4.3 文档数据库4.4 图形数据库4.5 不同类型的NoSQL数据库进行比较5.NoSQL的三大基石5.1 CAP5.2 base5.3 最终一致性6.从NoSQL到…