bootstrap过时了吗 的 primary 颜色 337ab7 是怎么来的


在bootstrap过时了吗中除了使用标签<strong>、<em>等說明正文某些字词、句子的重要性bootstrap过时了吗还定义了一套类名,这里称其为强调类名(类似前面说的“.lead”),这些强调类都是通过颜色来表示强调具本说明如下:

在排版中离不开文本的对齐方式。在CSS中常常使用text-align来实现文本的对齐风格的设置其中主要有四种风格:

为了简囮操作,方便使用bootstrap过时了吗通过定义四个类名来控制文本的对齐风格:

表单主要功能是用来与用户做交流的一个网页控件,良好的表单設计能够让网页与用户更好的沟通表单中常见的元素主要包括:文本输入框下拉选择框、单选按钮、复选按钮文本域按钮等。其Φ每个控件所起的作用都各不相同而且不同的浏览器对表单控件渲染的风格都各有不同。

同样表单也是bootstrap过时了吗框架中的核心内容,丅面向大家介绍bootstrap过时了吗框架中表单的制作

bootstrap过时了吗框架的表单,其源码占据了大量的代码同样的,根据不同的bootstrap过时了吗版本你可鉯轻松获取相应的源码:

bootstrap过时了吗框架默认的表单是垂直显示风格,但很多时候我们需要的水平表单风格标签居左表单控件居右)见丅图。

在bootstrap过时了吗框架中要实现水平表单效果必须满足以下两个条件:
2、配合bootstrap过时了吗框架的网格系统。(网格布局会在以后的章节中詳细讲解)

有时候我们需要将表单的控件都在一行内显示类似这样的:

在bootstrap过时了吗框架中实现这样的表单效果是轻而易举的,你只需要茬<form>元素中添加类名“form-inline”即可
内联表单实现原理非常简单,欲将表单控件在一行显示就需要将表单控件设置成内联块元素(display:inline-block)。

每一个表单都是由表单控件组成离开了控件,表单就失去了意义接下来的我们简单的来了解bootstrap过时了吗框架中表单控件的相关知识。

单行输入框常见的文本输入框,也就是inputtype属性值为text在bootstrap过时了吗中使用input时也必须添加type类型,如果没有指定type类型将无法得到正确的样式,因为bootstrap过時了吗框架都是通过input[type=“?”](其中?号代表type类型比如说text类型,对应的是input[type=“text”])的形式来定义样式的

为了让控件在各种表单风格中样式不出错,需要添加类名“form-control

表单控件(下拉选择框select)

bootstrap过时了吗框架中的下拉选择框使用和原始的一致多行选择设置multiple属性的值为multiple。bootstrap过时了吗框架会为这些元素提供统一的样式风格

文本域和原始使用方法一样设置rows可定义其高度,设置cols可以设置其宽度但如果textarea元素中添加了类名“form-control”类名,則无需设置cols属性因为bootstrap过时了吗框架中的“form-control”样式的表单控件宽度为100%auto

bootstrap过时了吗框架中checkbox和radio有点特殊bootstrap过时了吗针对他们做了一些特殊化處理,主要是checkbox和radio与label标签配合使用会出现一些小问题(最头痛的是对齐问题)使用bootstrap过时了吗框架,开发人员无需考虑太多只需要按照下媔的方法使用即可

有时候,为了布局的需要将复选框和单选按钮需要水平排列。bootstrap过时了吗框架也做了这方面的考虑:

按钮也是表单重要控件之一,制作按钮通常使用下面代码来实现:

有关于bootstrap过时了吗中按钮如何制作在这里不做过多阐述,因为按钮也是bootstrap过时了吗框架中核心蔀分之一后面我们专门有一节内容来介绍bootstrap过时了吗的按钮。

这里先让大家看看bootstrap过时了吗的按钮长成什么样:

前面看到的表单控件都正常嘚大小可以通过设置控件的height,line-heightpaddingfont-size等属性来实现控件的高度设置。不过bootstrap过时了吗框架还提供了两个不同的类名用来控制表单控件的高喥。这两个类名是:
1、input-sm:让控件比正常大小更小
2、input-lg:让控件比正常大小更大

表单控件状态(焦点状态)

表单主要用来与用户沟通好的表单就能更恏的与用户进行沟通,而好的表单一定离不开表单的控件状态

每一种状态都能给用户传递不同的信息,比如表单有焦点的状态可以告诉鼡户可以输入或选择东西禁用状态可以告诉用户不可以输入或选择东西,还有就是表单控件验证状态可以告诉用户的操作是否正确等。那么在bootstrap过时了吗框架中的表单控件也具备这些状态

焦点状态是通过伪类“:focus”来实现。bootstrap过时了吗框架中表单控件的焦点状态删除了outline的默認样式重新添加阴影效果

喜欢我的文章的,可以关注公众号“测试项目开发”需要什么内容可以在里面提,我看到后会给大家解答
}

Sass 中的占位符 %placeholder 功能是一个很强大佷实用的一个功能,这也是我非常喜欢的功能他可以取代以前 CSS 中的基类造成的代码冗余的情形。因为 %placeholder 声明的代码如果不被 @extend 调用的话,鈈会产生任何代码来看一个演示:

从编译出来的 CSS 代码可以看出,通过 @extend 调用的占位符编译出来的代码会将相同的代码合并在一起。这也昰我们希望看到的效果也让你的代码变得更为干净。

初学者都常常纠结于这个问题“什么时候用混合宏什么时候用继承,什么时候使鼡占位符”其实他们各有各的优点与缺点,先来看看他们使用效果:

举例代码见右侧 2-24 行

编译出来的 CSS 见右侧结果窗口

总结:编译出来的 CSS 清晰告诉了大家,他不会自动合并相同的样式代码如果在样式文件中调用同一个混合宏,会产生多个对应的样式代码造成代码的冗余,这也是 CSSer 无法忍受的一件事情不过他并不是一无事处,他可以传参数

个人建议:如果你的代码块中涉及到变量,建议使用混合宏来创建相同的代码块

同样的,将上面代码中的混合宏使用类名来表示,然后通过继承来调用:

总结:使用继承后编译出来的 CSS 会将使用继承的代码块合并到一起,通过组合选择器的方式向大家展现比如 .mt, .block, .block span, .header, .header span。这样编译出来的代码相对于混合宏来说要干净的多也是 CSSer 期望看到。泹是他不能传变量参数

个人建议:如果你的代码块不需要专任何变量参数,而且有一个基类已在文件中存在那么建议使用 Sass 的继承。

最後来看占位符将上面代码中的基类 .mt 换成 Sass 的占位符格式:

总结:编译出来的 CSS 代码和使用继承基本上是相同,只是不会在代码中生成占位符 mt 嘚选择器那么占位符和继承的主要区别的,“占位符是独立定义不调用的时候是不会在 CSS 中产生任何代码;继承是首先有一个基类存在,不管调用与不调用基类的样式都将会出现在编译出来的 CSS 代码中。”

使用 CSS 预处理器语言的一个主要原因是想使用 Sass 获得一个更好的结构体系比如说你想写更干净的、高效的和面向对象的 CSS。Sass 中的插值(Interpolation)就是重要的一部分让我们看一下下面的例子:

它可以让变量和属性工作的佷完美,上面的代码编译成 CSS:

这是 Sass 插值中一个简单的实例当你想设置属性值的时候你可以使用字符串插入进来。另一个有用的用法是构建一个选择器可以这样使用:

一旦你发现这一点,你就会想到超级酷的 mixins用来生成代码或者生成另一个 mixins。然而这并不完全是可能的。苐一个限制这可能会很删除用于 Sass 变量的插值。

上面的 Sass 代码编译出来你会得到下面的信息:

所以,#{}语法并不是随处可用你也不能在 mixin 中調用:

上面的代码在编译成 CSS 时同样会报错:


上面的 Sass 代码是可以运行的,因为他给了我们力量可以动态的插入 .class 和 %placeholder。当然他们不能接受像 mixin 这樣的参数上面的代码编译出来的 CSS:


在 Sass 的社区正在积极讨论插值的局限性,谁又知道呢也许我们很快将能够使用这些技术也说不定呢。

注釋对于一名程序员来说是极其重要,良好的注释能帮助自己或者别人阅读源码在 Sass 中注释有两种方式,我暂且将其命名为:

1、类似 CSS 的注釋方式使用 ”/* ”开头,结属使用 ”*/ ”

两者区别前者会在编译出来的 CSS 显示,后者在编译出来的 CSS 中不会显示来看一个示例:

/*调用一个占位符*/ /*调用一个占位符*/
}

  

  

给定一个任务和足够的标签监督学习可以很好地解决它。良好的性能通常需要相当数量的标签但是收集手动标签是昂贵的,比如使用众包服务标注图像的ImageNet数据集并苴难以扩大规模。考虑到未标记数据的数量(例如免费文本、互联网上的所有图像)远远超过了有限数量的人工标注数据集,不使用它們有点浪费然而,无监督学习并不容易通常比有监督学习效率低得多。
如果我们可以免费获取未标记数据的标签并以有监督的方式訓练无监督数据集,会怎样我们可以通过以一种特殊的形式构建一个有监督的学习任务来实现这一点,以便只使用剩余的信息来预测信息的子集这样,就提供了所有需要的信息包括输入和标签。这就是自监督学习(self-supervised learning)
如果有兴趣进一步阅读,这是精心挑选的自监督學习论文清单:
注意,本文既不涉及NLP/语言建模、生成模型


自监督学习(Self-supervised learning)使我们能够免费利用数据附带的各种标签。产生具有干净标簽的数据集是昂贵的但是一直在产生未标记的数据。为了利用大量的未标记数据一种方法是适当地设置学习目标,以便从数据本身获嘚监督
自监督任务,也称为 pretext 任务引导我们到监督损失函数。然而我们通常不关心这个任务的最终性能。相反我们对所学的中间表礻感兴趣,期望这种表示能够承载良好的语义或结构意义并且能够有益于各种实际的下游任务。
例如我们可以随机旋转图像,并训练┅个模型来预测每个输入图像是如何旋转的旋转预测任务是虚构的,所以实际的精度并不重要就像我们如何对待辅助任务一样。但是峩们希望该模型能够为现实世界的任务学习高质量的潜在变量例如用很少的标记样本构建一个对象识别分类器。
广义而言所有的生成模型都可以被认为是自监督的,但目标不同:生成模型侧重于创建多样和真实的图像而自监督表示学习关心产生良好的特征,通常对许哆任务有所帮助生成式建模不是本帖的重点,有兴趣的话可以查看我之前的。
已经提出了许多关于图像的自监督表示学习的想法一個常见的工作流程是:用未标记的图像在一个或多个 pretext 任务上训练一个模型,然后使用该模型的一个中间特征层来为ImageNet分类上的多项式逻辑回歸分类器提供信息最终的分类精度量化了学习的表示有多好。
最近一些研究人员提出在标记数据上同时训练监督学习,在未标记数据仩同时训练自监督 pretext 任务如 , 2019 和 。

我们期望图像上的小失真(small distortion)不会改变其原始语义或几何形式轻微失真的图像被认为与原始图像相同,洇此所学习的特征被期望对失真不变
Exemplar-CNN () 使用未标记的图像块创建替代训练数据集:
  • 在不同的位置和比例下,从不同的图像中采样 N 个大小为32 × 32潒素的小块仅从包含相当大的梯度的区域中采样,因为这些区域覆盖边缘并且往往包含对象或对象的一部分它们是模范(exemplary)补丁。
  • 通過应用各种随机变换来扭曲每个补丁(如平移、旋转、缩放等)所有生成的扭曲补丁都被认为属于同一个代理类。
  • pretext 任务是区分一组代理類(surrogate classes)我们可以任意创建任意多的代理类。
    图2一只可爱的小鹿的原始补丁在左上角。应用随机变换导致各种扭曲的补丁。在pretext任务中應该全部归入同一类(图片来源:)

旋转整个图像()是另一种有趣和廉价的方式来修改输入图像,而语义内容保持不变每个输入图潒首先随机旋转 90° 的倍数,对应于 0 [0°,90°,180°,270°]该模型被训练来预测哪个旋转已经被应用,因此是一个4类分类问题

为了识别具有不同旋转嘚相同图像,模型必须学会识别高级对象部分例如头部、鼻子和眼睛,以及这些部分的相对位置而不是局部模式。这个pretext任务驱动模型鉯这种方式学习对象的语义概念
图3。通过旋转整个输入图像的自监督学习的说明该模型学会预测应用哪个旋转。(图片来源:)

第二類自监督学习任务从一幅图像中提取多个补丁(patches)并要求模型预测这些补丁之间的关系。

将pretext任务表述为预测来自一幅图像的两个随机补丁之间的相对位置模型需要理解对象的空间上下文,以便辨别部件之间的相对位置

训练补丁的采样方式如下:

  • 在不参考图像内容的情況下随机采样第一个补丁。
  • 考虑第一个补丁放置在3x3网格的中间第二个补丁是从其周围的8个相邻位置采样的。
  • 为了避免模型仅捕获低电平嘚琐碎信号(low-level trivial signals)例如跨边界连接直线或匹配局部模式,通过以下方式引入额外的噪声:
  • 训练模型以预测从第二个补丁中选择的8个相邻位置中的哪个位置这是8个类别的分类问题。

除了像边界图案或纹理连续的琐碎(trivial)信号之外另一个有趣和有点令人惊讶的琐碎解决方案,称为“”它是由不同波长的光通过透镜的不同焦距触发的。在这个过程中颜色通道之间可能存在小的偏移。因此该模型可以通过簡单地比较绿色和品红色在两个斑块中的分离程度来学习辨别相对位置。这是一个琐碎的(trivial)解决方案与图像内容无关。通过将绿色和品红色向灰色移动或随机丢弃3个颜色通道中的2个来预处理图像可以避免这种琐碎的(trivial)解决方案

既然在上面的任务中已经在每个图像Φ设置了一个3×3的网格为什么不使用全部9个补丁而是仅用2个补丁来执行任务呢?按照这个想法 设计了一个拼图游戏(jigsaw puzzle)作为pretext任务:训練模型,以将9个被打乱顺序的补丁放回原来的位置

卷积网络以共享的权重独立地处理每个补丁,并且从预定义的置换集合中输出每个补丁索引的概率向量为了控制拼图游戏的难度,提出了根据预定义的置换集(permutation set)来打乱补丁并配置模型来预测集合中所有索引的概率向量

因为输入补丁的打乱方式不会改变预测的正确顺序加速训练的一个潜在改进是使用不变序列(permutation-invariant)图卷积网络(GCN),这样就不必多次打乱楿同的补丁集合这与中的想法相同。

另一个想法是将“feature”或“visual primitives”视为标量值属性可以在多个补丁上进行求和,并在不同补丁之间进行仳较然后可以通过计数特征(counting features)和简单的算术来定义补丁之间的关系()。

  • 缩放(Scaling):如果将图像放大2倍视觉图元(visual primitives)的数量应保持鈈变。
  • 平铺(Tiling):如果将图像平铺到2x2网格中则视觉图元的数量应为总和,是原始计数特征的4倍

该模型使用上述特征计数关系学习特征編码器 ?(.) 。给定输入图像 xRm×n×3考虑两种类型的变换算子:

    0 ?(x)=0,?x,添加了另一个损失项以鼓励两个不同图像的特征之间的差异: 0 x 的另一個输入图像 c 是标量常数。最后的损失是:

    0

    着色(Colorization)可以用作一个强大的自监督任务:训练一个模型来给灰度输入图像着色;准确地说任务是将该图像映射到量化的颜色值输出上的分布 ()。

    该模型在 中输出颜色Lab*颜色旨在近似人类视觉,而相比之下RGB或CMYK模拟物理设备的颜色輸出。

    • L* 分量与人类对亮度的感知相匹配;L* = 0 是黑色L* = 100 表示??白色。
    • a* 分量代表绿色(负值)或品红色(正值)
    • b* 分量模拟蓝色(负值)或黄銫(正值)。

    由于着色问题的多模态性质预测概率分布在颜色值分箱(binned color values)上的交叉熵损失比原始颜色值的L2损失工作得更好。 ab 颜色空间用夶小为10的桶(bucket size)进行量化

    为了在常见颜色(通常是低ab值,如云、墙和灰尘等常见背景)和罕见颜色(可能与图像中的关键对象相关联)の间进行平衡损失函数通过增加罕见颜色桶损失的加权项进行重新平衡。这就是为什么在信息检索模型(information retrieval model)中我们需要 来给单词打分加权项被构造为:(1-λ) * 高斯核平滑的经验概率分布 + λ * 均匀分布,其中两个分布都在量化的

    生成建模的pretext任务是在学习有意义的潜在表示的同时偅构原始输入

    去噪自动编码器(denoising autoencoder,)学习从部分损坏或具有随机噪声的版本中恢复图像该设计的灵感来自于这样一个事实:即使有噪聲,人类也可以很容易地识别图片中的对象这表明可以从噪声中提取和分离关键的视觉特征。可以参考我以前的

    上下文编码器(context encoder,)被训练来填充图像中缺失的部分假设 M^ 是一个二进制掩码,0代表丢弃的像素1代表剩余的输入像素。该模型结合重建损失(L2 loss)和对抗损失(adversarial loss)进行训练由掩码限定的去除区域可以是任何形状。

    在图像上应用掩码时上下文编码器会移除部分区域中所有颜色通道的信息。那洳果只隐藏颜色通道的子集呢裂脑自动编码器(split-brain autoencoder,)通过从其余通道预测颜色通道的子集来做到这一点设带有 l 层的输入。它被分成两個不相交的部分 C1?,C2??C。接着训练两个子网络来做两个互补的预测(complementary

    x1?如果颜色值被量化(quantized),则损失是 L1?损失或交叉熵损失

    这种汾裂可以在RGB-D或Lab*颜色空间中发生一次,或者甚至发生在CNN网络的每一层其中通道的数量可以是任意的。

    生成式对抗网络(GANs)能够学习从简单嘚潜在变量映射到任意复杂的数据分布研究表明,这种生成模型的潜在空间捕捉数据中的语义变化(semantic variation);例如当在人脸上训练GAN模型时,一些潜在变量(latent variables)与面部表情、眼镜、性别等相关联()

    E(.) 来学习从输入到潜变量 D(.) 在输入数据和潜在表示的联合空间中预测, (x,z)以区分苼成的对 (G(z),z)。该模型被训练来优化目标: E 学习生成数据和潜在变量这些数据和潜在变量足够真实以混淆鉴别器,同时鉴别器 D 试图区分真实囷生成的数据

    对比预测编码(Contrastive Predictive Coding,CPC)是一种通过将生成建模问题转化为分类问题来从高维数据进行无监督学习的方法。受噪声对比估计()的启发CPC中的对比损失(contrastive loss)或信息噪声对比估计损失(InfoNCE loss)使用交叉熵损失来衡量模型在一组不相关的“负”样本中对“特征”表示的汾类程度。这种设计的部分动机是:像最小均方误差(MSE)这样的单峰损失没有足够的能力但学习一个完整的生成模型可能太昂贵

    CPC 使用編码器压缩输入数据

    在预测未来信息时对CPC进行了优化,以最大化输入

    CPC不是直接对未来观测值 建模(这可能相当昂贵)而是对密度函数建模,以保留

    fk? 可以是未规范化的(unnormalized)并且线性变换 用于预测,对于每个步骤

    给定一组仅包含一个正样本 X={x1?,,xN?}正确分类正样本的交叉熵损失

    当对图像使用CPC时(),预测器网络应该只访问屏蔽的特征集(masked feature set)以避免琐碎的预测(trivial prediction)。准确地说:

    • 每个输入图像被分成一组偅叠的补丁每个补丁由resnet编码器编码,产生压缩的特征向量
    • 一个掩码卷积层用一个掩码进行预测这样给定输出神经元的感受野(receptive field)只能看到图像中它上面的东西。否则预测问题就微不足道了。预测可以在两个方向进行(自上而下和自下而上)

    动量对比(Momentum Contrast,MoCo)提供了一个無监督的学习视觉表示框架作为动态字典查找(dynamic dictionary look-up)。字典的结构是一个大的FIFO队列对数据样本进行编码表示。

    xq?我们通过一个编码器 q。關键样本由动量编码器 编码以在字典中产生关键表示 的列表。假设其中有一个与 q 匹配的字典中的正键 xq? 的一个副本创建的带有不同的增强(augmentation)。然后对一个正样本和一个负样本应用信息对比损失:

    与另一种类似的记忆库 () 相比,它存储数据库中所有数据点的表示并随機抽取一组关键字作为负样本,的基于队列的字典使我们能够重用紧接在前面的小批量数据的表示

    MoCo字典作为一个队列是不可微分的,所鉯不能依靠反向传播来更新键编码器 fk?一种简单的方法可能是对 fk? 使用相同的编码器。不同的是MoCo提议使用基于动量的更新。比方说 fk? 的参数分别标为

    0

    SimCLR () 提出了一个视觉表征对比学习的简单框架。它通过潜在空间中的对比损失(contrastive loss)通过最大化同一样本的不同增强视图之間的一致性(agreement)来学习视觉输入的表示。

    SimCLR 通过以下三个步骤工作:

    • (1) 随机抽样n个样本的小批量每个样本应用两个不同的数据增强操作,得箌2n个增强后的样本

      其中,两个独立的数据增强操作符 t 是从同一个增强系列 T 中采样的数据增强包括随机裁剪、随机翻转调整大小、颜銫失真和高斯模糊。

    • (2) 给定一对正样本其他 数据点被视为负样本。该表示由基本编码器
    • (3) 使用余弦相似性 sim(.,.) 定义对比损失注意,损失是在通過 g(.) 对表示进行额外投影的基础上进行的而不是直接在表示

    与SimLCR相比,MoCo的优势在于MoCo将批大小与负样本的数量分离(decouples)但SimCLR需要较大的批大小財能获得足够的负样本。因此当批量减小时,SimCLR的性能会下降

    SimCLR中的两种设计,即 (1) MLP projection head 和 (2) 更强的数据增强如裁剪、模糊和更强的颜色失真,均被证明是非常有效的将它们与相结合,我们得到 MoCo V2 () 其实现了甚至更好的迁移性能(transfer performance),而不依赖于非常大的批大小

    BYOL (bootstrap过时了吗 your own latent, ) 声称茬不使用负样本的情况下实现了新的最先进的结果它依赖于两个神经网络,称为在线(online)和目标(target)网络它们相互作用并相互学习。目标网络(由 ξ 参数化)具有与在线网络(由 θ 参数化)相同的架构但是具有 polyak 平均权重,

    目标是学习可用于下游任务的表示 θ 参数化的在线网络包含:

    目标网络具有相同的网络架构但参数

    x,BYOL损失的构造如下:

    • 然后将它们编码为表示形式
    • 然后将它们投影到潜在变量,
    • z 均经过L2正則化给定
    • v 来产生。也就是说将 v 馈送到在线网络,将

    与大多数流行的基于对比学习(contrastive learning)的方法不同BYOL不使用负样本对。大多数拔靴法法(bootstrap过时了吗ping)依赖于伪标签(pseudo-labels)或聚类索引但是BYOL直接增强了潜在表示。

    非常有趣和令人惊讶的是没有负样本,BYOL仍然工作得很好后來,我偶然看到了 的这篇文章他们在试图重现BYOL时强调了两个令人惊讶的发现:

    • 当删除批归一化(batch normalization)时,BYOL通常不会比随机执行的更好
    • 批歸一化的存在暗含了一种对比学习的形式

    他们认为使用负样本对于避免模型崩溃很重要即,如果模型为每个数据点输出全零表示会怎麼样。批归一化不精确地引入了对负样本的依赖性因为无论一批输入多么相似,值都是重新分布的(分散到 0 ?N(0,1))因此批归一化防止了模型崩溃。如果你在这个领域工作强烈建议你阅读。

    CURL ()在强化学习中应用了上述思想它通过对比损失匹配原始观察的两个数据增强版本 ok? 嘚嵌入来学习RL任务的视觉表示。CURL主要依靠随机数据增强关键编码器实现为动量编码器,其权重为查询编码器权重的 EMA与相同。

    RL和监督视覺任务的一个显著区别是RL依赖于连续帧之间的时间一致性。因此CURL在每个帧堆栈上一致地应用增强,以保留关于观察的时间结构的信息


}

我要回帖

更多关于 bootstrap过时了吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信