Pixel Recurrent Neural Networks

目前主要在用的文档存放: https://www.yuque.com/lart/papers/prnn

github存档: https://github.com/lartpang/Machine-Deep-Learning

介绍

  • Google DeepMind
  • generative model

引言

生成图像建模是无监督学习中的核心问题。 在无监督学习中,自然图像的分布建模是一个具有里程碑意义的问题。此任务需要一个图像模型,它同时具有表现力、可伸缩和可扩展性。

概率密度模型可用于各种各样的任务,从图像压缩和重建外观,例如图像修复和去模糊,到新图像的生成。当模型以外部信息为条件时,可能的应用还包括_基于文本描述创建图像_或_在有计划的任务中模拟未来帧_。生成建模的一大优势是可以从中学习无穷无尽的图像数据。然而,因为图像是高维和高度结构化的,所以估计自然图像的分布是极具挑战性的

对于生成模型一个最重要的阻碍是构建复杂而具有表现力的可跟踪的和可扩展的模型。这种权衡导致了各种各样的生成模型,每种模型都有其优势。大多数工作关注随机隐变量模型,例如VAE旨在提取有意义的表示,但往往会出现一个难以推断的推理步骤,这会阻碍他们的表现。一种有效的方法是可跟踪地模拟图像中的像素的联合分布,把它看作是条件分布的乘积。这个方法已经应用在了自回归模型,例如NADE和fully visible neural networks。因式分解(factorization)将联合建模问题转化为序列问题,在这个问题中,给定所有先前生成的像素,学习预测下一个像素。但要对像素之间的高度非线性和长程相关性进行建模,并且复杂的条件分布导致必须建立高度表现力的序列模型。递归神经网络(RNN)是一个强大的模型,提供了一系列条件分布的紧凑的又共享的参数化表示。RNNs已被证明擅长硬序列问题(hard sequence problems),从手写生成,字符预测和机器翻译。二维RNN已经在建模灰度图像和纹理上产生了非常有前途的结果。

PixelRNN

本文提出了二维 RNNs,并将其应用于自然图像的大规模建模。由此产生的 PixelRNNs 由多达 12 个快速的二维LSTM层组成。这些层使用LSTM单元在他们的状态上,并采用卷积,沿着数据的空间维度之一,来计算一次所有的状态。我们设计了两种类型的图层。第一种类型是Row LSTM层,该层沿每一行应用卷积。第二种类型是对角线BiLSTM(Diagonal BiLSTM)层,其中卷积是沿图像的对角线以新颖的方式应用。该网络还把残余连接用在LSTM层周围;我们观察到,这有助于为多达12层的PixelRNN的训练。

文章提出了一种深度神经网络,该网络沿着两个空间维度依次预测图像中的像素。该方法建模原始像素值的离散概率,并编码图像中的完整依赖集合。架构创新包括快速二维递归层和在深层递归网络中有效使用残余连接。

PixelCNN

我们还考虑了第二个简化的结构,它与PixelRNN共享相同的核心组件。我们观察到卷积神经网络(CNN),通过使用蒙版卷积(Masked Convolutions),也可以作为有着固定依赖范围的序列模型

PixelCNN架构是一个由15个层组成的全卷积网络,保留其输入在各层的空间分辨率,并在每个位置输出条件分布。

Both

  • 二者捕获像素间依赖关系的完整通用性(capture the full generality),而不需要引入如_潜在变量模型_里的独立假设。依赖关系也保持在每个像素内的RGB颜色值之间。
  • 此外,与以前的建模像素为连续值的方法相比,我们使用一个简单的softmax层实现的多项式分布将像素建模为离散值。我们观察到,这种方法为我们的模型提供了可表示性的和训练优势。

本文的贡献如下:

  1. 我们设计了两种类型的PixelRNN,对应于两种类型的LSTM层;
  2. 我们描述了纯卷积PixelCNN,这是我们最快的架构;
  3. 我们设计了一个多尺度的PixelRNN版本
  4. 我们展示了在模型中使用离散softmax分布以及为LSTM层采用残余连接的相对好处。
  5. 接下来,我们在MNIST和CIFAR-10上测试模型,并表明它们获得的对数似然分数比以前的结果要好得多。
  6. 我们还提供了在大规模ImageNet数据集(大小为32×32和64×64像素)上的结果;据我们所知,生成模型的似然值以前没有在此数据集上报告过。
  7. 最后,我们给出了从PixelRNNs生成的样本的定性评价。

建模

我们的目标是估计自然图像的分布,可以用来跟踪计算图像的似然,并产生新的。网络一次扫描图像一行,每一行中一次扫描一个像素。对于每个像素,它预测在给定扫描上下文的可能像素值的条件分布。图2说明了此过程。将图像像素的联合分布分解为条件分布的乘积。预测中使用的参数在图像中的所有像素位置共享。

为了捕捉生成过程,Theis & Bethge(2015)建议使用二维LSTM网络,从左上角的像素开始,然后向右下角的像素前进。LSTM网络的优点是它有效地处理了对对象和场景理解至关重要的长程依赖关系。二维结构保证了信号在从左到右和从上到下的方向都很好地传播。

分布

目标是将概率p(x)分配给由 n×n 像素组成的每个图像 x。我们可以将图像x作为一维序列 x1,...,xn2,其中像素是从图像逐行提取。为了估计联合分布 p(x),我们把它写成像素上条件分布的乘积:

值 p(xi | x1,…,xi-1)是 i-th 像素的概率x(给定所有以前的像素 x1,…,xi-1)。生成将按行进行,并按像素进行像素。图2(左)说明了条件的情况方案。

每个像素xi依次由三个值共同确定,每个颜色通道分别为红色、绿色和蓝色 (RGB)。我们重写分布 p(xi | x<i) 作为以下乘积:

因此,每种颜色都取决于其他通道以及先前生成的所有像素。

请注意,在训练和评估期间,在像素值上的分布并行计算,而图像的生成是连续的
以前的方法使用图像中的连续分布的像素值。相比之下,我们将 p(x) 建模为离散分布,

方程 2 中的每个条件分布都是一个用 softmax 层建模的多项式。每个通道变量 xi,* 只需要 256 个不同的值之一。离散分布表示简单,具有任意多模态而没有形状先验的优点(见图 6)。实验发现相比连续分布的设定,离散分布是容易学习,更容易产生更好的性能。

Pixel Recurrent Neural Networks

Row LSTM

行 LSTM 是一个单向层,它每次从上到下逐行处理图像,为每行计算特征;计算使用一维卷积执行。对于像素 xi,该层捕获像素上方的三角形的上下文区域,如图4中心所示。一维卷积的核具有 k×1 的大小,其中 k≥3;k的值越大,捕获的上下文区域越宽。卷积中的权重共享可确保计算特征沿每一行的平移不变性。

计算结果如下。LSTM 层有一个_input-to-state_组件和一个循环_state-to-state_组件,它们一起确定LSTM核心内部的四个门

仔细想来,LSTM中的门实际上做的也就是input-to-statestate-to-state**的计算。

为了增强 Row LSTM 中的并行化,首先对整个二维输入图计算_input-to-state_组件;为此,k×1 卷积用于沿着 LSTM 本身的行的方向。卷积被掩盖(masked)只包括“合理”的上下文 (见 3.4 节),并产生大小 4h×nxn 的张量,表示输入映射中每个位置的四个门向量(看来四个门是学习模拟出来的,真实并不存在),其中 h 是输出特征图的数量。

为了计算 LSTM 层的 state-to-state 组件的一步,需要给出以前的隐藏状态和细胞状态格状态 hi-1 和 ci-1,每个大小为 h×n×1 的新的隐藏和细胞状态 hi,ci 可以由下式所得:

 

其中 h×n×1 大小的 xi 是输入图的行 i,并且  表示卷积运算和元素乘法。权重 Kss 和 Kis 是state-to-state和input-to-state组件的核权重,如前所述。

在输出,忘记和输入门为 oi,fi 和 ii 的情况下,激活 σ 是 logistic sigmoid 函数,而对于内容(上下文)门 gi,σ 是 tanh 函数。

不同门的权重一样么?

每个步骤一次为输入图的整行计算新状态。由于 Row LSTM 具有三角形感受野(图4),因此无法捕获整个可用上下文。

Diagonal BiLSTM

对角 BiLSTM 的目的是并行计算和捕获任何图像大小的整个可用上下文。每个层的两个方向都以对角线方式扫描图像,从顶部的一个角开始,并到达底部的相反角。计算中的每个步骤一次计算图像中沿对角线的 LSTM 状态。图 4右说明了该计算和由此产生的感受野。

对角计算如下:

  1. 我们首先将输入图倾斜映射到另一个空间,使它很容易沿对角线应用卷积。倾斜操作将输入图的每一行相对于上一行偏移一个位置,如图 3 所示;这导致一个大小为 n×(2n-1) 的映射。
  2. 此时,我们可以计算对角 BiLSTM 的input-to-state和state-to-state组件。对于两个方向,input-to-state组件只是 1×1 卷积 Kis然后state-to-state的递归组件用列卷积 Kss 来计算**,它有一个大小为 2×1 的核。该步骤采用以前的隐藏状态和细胞状态,结合input-to-state组件的贡献,并生成下一个隐藏状态和细胞状态,如方程 3。
  3. 输出特征图然后通过删除偏移位置,被倾斜回一个 n×n 图。这两个方向每一个都重复计算。
  4. 给定两个输出图,为了防止层看到未来的像素右输出图_左输出图

除了达到完整的依赖区域,对角 BiLSTM 具有额外的优势,它使用大小为 2×1 的卷积核,在每个步骤处理最少的信息量,产生了高度的非线性计算。大于 2×1 的核大小并不是特别有用,因为它们不会扩展对角 BiLSTM 的已有的全局感受场

Residual Connections

我们训练多达十二层的PixelRNN。作为增加收敛速度和更直接地通过网络传播信号的手段,我们将残余连接从一个 LSTM 层到下一层上。图 5 显示了残余块的图。

对于 PixelRNN LSTM 层的输入图具有 2h 特征。input-to-state组件通过为每个门生成 h 维特征来减少特征数。应用递归层后,通过 1x1 卷积将输出图上采样回每个位置为 2h 维特征,并将输入图添加到输出图中。

这种方法与以前的方法(沿递归网络的深度使用门控)有关,但它的优点是不需要额外的门。

除了残余连接之外,还可以使用从每一层到输出的可学习的跳跃连接。在实验中,我们评估了剩余和层到输出跳过连接的相对有效性。

Masked Convolution

网络中每个层的每个输入位置的 h 特征分为三个部分,每个部分对应于 RGB 通道之一。

  • 预测当前像素 xi 的 R 通道时,只使用生成的 xi 的左侧和上面的像素作为上下文。
  • 在预测 G 通道时,除了先前生成的像素外,R 通道的值也可以用作上下文。
  • 同样,对于 B 通道,可以使用 R 通道和 G 通道的值。

为了将网络中的连接限制为这些依赖关系,我们将掩码(mask)应用于_input-to-state_卷积和 PixelRNN 中的其他纯卷积层。

我们使用两种类型的掩码,我们用掩码 A 和掩码 B 表示,如图2右所示。

  • 掩码 A 仅应用于 PixelRNN 中的第一个卷积层,并限制与相邻像素和当前像素中已预测的的那些颜色的连接。
  • 另一方面,掩码 B 应用于所有后续input-to-state卷积转换,并通过允许从颜色到自身的连接来放松掩码 A 的限制。

掩码可以很容易地实现,通过在每次更新后的input-to-state卷积中置零相应的权重。类似的掩码也被用于变分自动编码器。

PixelCNN 

行和对角线 LSTM 层在其感受野内具有潜在的无边界的依赖范围。这有一定的计算成本,因为每个状态需要按顺序计算。一个简单的解决方法是使接受野增大,但不是无界的。我们可以使用标准卷积层来捕获有界的感受野,并计算所有像素位置的特征。

PixelCNN 使用多个卷积层来保留空间分辨率,不使用池化层。掩码在卷积中采用,以避免看到未来内容;掩码以前也被用于非卷积模型,如 MADE 。

请注意,与 PixelRNN 相比,PixelCNN 的并行功能的优势仅在训练或评估测试图像时可用。图像生成过程对于两种网络都是连续的,因为每个采样的像素需要作为输入返回到网络。

Multi-Scale PixelRNN

多尺度的 PixelRNN 由一个非条件的 PixelRNN 和一个或多个条件的 PixelRNN 组成。

无条件网络首先以标准的方式生成一个较小的 sxs 图像,该图像是从原始图像中采样的。然后,条件网络将 sxs 图像作为附加输入,生成更大的 nxn 图像,如图2中间所示。条件网络类似于标准的 PixelRNN,但每个层都带有小 sxs 图像的上采样版本。

上采样和偏置处理定义如下。

  • 在上采样过程中,利用具有反卷积层的卷积网络构造一个放大的 cxnxn 大小的特征图,其中 c 是上采样网络的输出图中的特征数。
  • 然后,在偏置过程中,对于条件 PixelRNN 中的每个层,简单地将 cxnxn 条件图映射到一个 4hxnxn 的图上,该图加到相应层的输入到状态图中;这是使用 1x1 没有掩码的卷积执行的。
  • 然后像往常一样生成较大的 nxn 图像。

模型设定

在本节中,我们给出了实验中使用的 PixelRNNs 的规格。我们有四种类型的网络:

  • 基于行 LSTM 的 PixelRNN
  • 基于对角 BiLSTM 的网络
  • 完全卷积的网络
  • 多尺度网络

表 1 指定单尺度网络中的每个层。

第一层是使用 A 型掩码的 7x7 卷积,这两种类型的 LSTM 网络使用可变数量的递归层。该层中的输入到状态卷积使用类型 B 的掩码,而状态到状态卷积不使用掩膜。Pixel CNN 使用大小为 3x3 的卷积与 B 型掩膜。然后,顶部的特征映射通过由整流线性单元(ReLU) 和 1x1 卷积组成的几个层。对于 CIFAR-10 和 ImageNet 实验,这些层有 1024 个特征图; 对于 MNIST 实验,有 32 个特征图。残余和层到输出的连接,在所有三个网络的层使用。

实验中使用的网络具有以下超参数。

  • 对于 MNIST,我们使用一个有 7 层的对角 BiLSTM 和一个 h=16 的值(图 5 右)。
  • 对于 CIFAR-10,Row and Diagonal BiLSTMs具有 12 个层和数量 h=128 个单元。Pixel CNN 有 15 层和 h=128。
  • 对于 32x32 ImageNet,我们采用 12 层行 LSTM,h=384 单位,对于 64x64 ImageNet,我们使用 4 层行 LSTM,h=512 单位;后者模型不使用剩余连接。

实验

Evaluation

我们所有的模型都是使用来自离散分布的对数使然损失函数来进行训练和评估。虽然自然图像数据通常使用密度函数的连续分布建模,但是我们是可以用我们的结果与以前的最优结果按照以下方式比较的.

在文献中,目前最好的做法是,当使用密度函数时, 向像素值添加实值噪声来_去量化_数据。当均匀噪声被添加(在区间 [0,1] 的值),然后连续和离散模型的对数似然直接可以比较。

在我们的情况下,我们可以使用离散分布的值作为分段均匀连续(piecewise uniform continuous)函数,每个间隔([i,i + 1],i = 1,2,……256)都有一个常量值.此对应的分布将具有与原始离散分布(离散数据)相同的对数似然(在添加噪声的数据上)。

  • 对于 MNIST,我们在 nats 中报告负对数似然,因为它是文献中的常见实践。
  • 对于 CIFAR-10 和 ImageNet,我们报告每个维度比特的负对数似然。

总离散对数似然由图像的维数(例如,32x32x3 = 3072 CIFAR-10)来归一化。这些数字被解释为基于该模型的压缩方案需要压缩每个 RGB 颜色值的位数; 在实践中由于算术编码, 也有一个小的开销。

Training Details

我们的模型使用torch工具箱在 gpu 上进行训练。从不同的参数更新规则尝试, RMSProp 给出了最佳的收敛性能,并用于所有实验。已手动设置学习率计划到每个数据集的最高值,允许快速收敛。不同数据集的批处理大小也有所不同。

  • 对于较小的数据集,如 MNIST 和 CIFAR-10,我们使用较小的批大小的 16,因为这似乎是对模型的一个正则化。
  • 对于 ImageNet,我们使用的批量大小为

允许的 GPU 内存; 这对应于 32 × 32 ImageNet的 64 images/batch  和 64 × 64 ImageNet的 32 图像/批处理 。

在网络的输入, 除了缩放和取图像中心,我们不使用任何其他的预处理或增强。对于多项式损失函数,使用原始像素颜色值作为类别。对于所有的 PixelRNN 模型,我们学习初始递归网络的状态。

Discrete Softmax Distribution

除了直观和容易实现,我们发现,在离散像素值上使用 softmax 而不是连续像素值的混合密度方法会得到更好的结果。对于带有 softmax 的输出分布的行 LSTM 模型,在 CIFAR10 验证集上获得 3.06 bits/dim 的输出分布。对于使用MCGSM(Mixture of Conditional Gaussian Scale Mixtures)的相同模型,我们获得 3.22 bits/dim。

在图 6 中,我们展示了来自模型的一些softmax激活。虽然我们不嵌入关于
256 颜色类别的含义或关系,例如像素值 51 和 52 是邻居,模型的分布预测是有意义的,并且可以是多模态,倾斜,峰值或长尾。

还请注意,值
0 和 255 经常得到一个更高的概率,因为他们更频繁出现。离散分布的另一个优点是,我们不担心在区间[0,255]之外分布的部分,这是在连续分布中常要遇到的一些事情。

Residual Connections

网络的另一个核心组件是残余连接。在表 2 中,我们显示了在 12 层 CIFAR-10 Row LSTM 模型中,具有标准跳跃连接或有残余连接或者同时具有二者的结果。

我们看到,使用剩余连接与使用跳跃连接一样有效; 同时使用这两个连接也是有效的并保留了优势。当使用残余连接和跳约连接时,我们在表 3 中看到,Row LSTM 的性能随着深度的增加而提高。这可以容纳多达 12个 LSTM 层。

MNIST

虽然我们的工作的目标是大规模建模自然图像,我们也尝试将模型用在二值版本的MNIST上,因为这是一个良好的理智检查(sanity check),有很多以前的优秀工作在这个数据集上进行比较。在表 4 中,我们报告了对角 BiLSTM 模型的性能和以前发布的结果。据我们所知,这是迄今为止在 MNIST 上最好的报告结果。

CIFAR-10

接下来我们在 CIFAR-10 数据集上测试模型。表 5 列出了我们的模型和以前发布的方法的结果。我们所有的结果都没有数据增强。对于所提出的网络,对角 BiLSTM 具有最佳的性能,其次是行 LSTM 和 PixelCNN。这与各自感受野的大小相吻合: 对角 BiLSTM 有一个全局视图,行 LSTM 有一个部分遮挡的视图,Pixel CNN 在上下文中看到最少的像素。这表明有效地捕捉大的感受野是重要的。图 7左 显示了从对角 BiLSTM 生成的 CIFAR-10 样本。

ImageNet

虽然我们知道在 ILSVRC ImageNet 数据集上没有发布结果,我们可以比较我们的模型,我们给出我们的 ImageNet 对数似然性能在表 6 中 (没有数据增强)。

在 ImageNet 上,当前的 Pixel RNN 并没有表现为过拟合, 正如我们看到,它们的验证性能随着尺寸和深度的提高而提高。模型大小的主要约束是当前的计算时间和 GPU 内存。

请注意,ImageNet 模型通常比 CIFAR-10 图像更不可压缩。ImageNet 有更多的图像,相比于 ImageNet 图像中使用的, CIFAR-10 的图像最有可能使用不同的算法缩放大小。ImageNet 图像不那么模糊,这意味着相邻像素的相关性较小,因此更难预测。由于下采样方法会影响压缩性能,所以我们已经制作了使用了下采样的图像。

图 7右 显示从我们的 32 × 32 样品, 这来自在 ImageNet 上训练的模型。图 8 显示了来自同一模型的 64 × 64 样本,并且没有多尺度调节。最后,我们还在图 9 中展示了来自模型的图像补全样本。

总结

  • 本文将深度递归神经网络作为自然图像生成模型进行改进和构建。我们描述了新的二维 LSTM 层: 行 LSTM 和对角 BiLSTM,这更容易扩展到更大的数据集。对模型进行训练,对原始 RGB 像素值进行建模。
  • 我们在条件分布中使用 softmax 层将像素值视为离散随机变量。
  • 我们使用掩膜卷积允许 PixelRNNs 模拟颜色通道之间的完全依赖关系。
  • 我们提出并评估了这些模型的结构改进,导致高达 12 LSTM 层的 PixelRNNs。
  • 我们已经表明,PixelRNNs 显著改善了 MNIST 和 CIFAR-10 数据集上的最佳状态。

我们还提供了在 ImageNet 数据集上生成图像建模的新基准。基于从模型中提取的样本和补全结果,我们可以得出结论,PixelRNNs 可以模拟空间上局部和远程相关性,能够产生尖锐和连贯的图像。考虑到这些模型随着我们使它们变得更大而改进,并且实际上有无限的数据可供训练,更多的计算和更大的模型可能会进一步改进结果(Given that these models improve as we make them larger and that there is practically unlimited data available to train on,more computation and larger models are likely to further improve the results.)。

疑惑

关于Diagonal BiLSTM,文中提到:

Given the two output maps, to prevent the layer from seeing future pixels, the right output map is then shifted down by one row and added to the left output map.

这里应该显示的是一个所谓的 left output map,那所谓的 right output map 也就是计算的是从右上到左下的过程,但是 right output map 向下移动一行,再加到 left output map 上,那输出尺寸不就变了么? 而且为什么会认为 "seeing future pixels" ?

不理解的名词 

  • unconditional PixelRNN
  • one or more conditional PixelRNNs
  • log-likelihood performance

扩展阅读

Pixel Recurrent Neural Networks翻译的更多相关文章

  1. 论文翻译:Conditional Random Fields as Recurrent Neural Networks

    Conditional Random Fields as Recurrent Neural Networks ICCV2015    cite237 1摘要: 像素级标注的重要性(语义分割 图像理解) ...

  2. 论文翻译:2020_Lightweight Online Noise Reduction on Embedded Devices using Hierarchical Recurrent Neural Networks

    论文地址:基于分层递归神经网络的嵌入式设备轻量化在线降噪 引用格式:Schröter H, Rosenkranz T, Zobel P, et al. Lightweight Online Noise ...

  3. 第十四章——循环神经网络(Recurrent Neural Networks)(第一部分)

    由于本章过长,分为两个部分,这是第一部分. 这几年提到RNN,一般指Recurrent Neural Networks,至于翻译成循环神经网络还是递归神经网络都可以.wiki上面把Recurrent ...

  4. 第十四章——循环神经网络(Recurrent Neural Networks)(第二部分)

    本章共两部分,这是第二部分: 第十四章--循环神经网络(Recurrent Neural Networks)(第一部分) 第十四章--循环神经网络(Recurrent Neural Networks) ...

  5. 课程五(Sequence Models),第一 周(Recurrent Neural Networks) —— 1.Programming assignments:Building a recurrent neural network - step by step

    Building your Recurrent Neural Network - Step by Step Welcome to Course 5's first assignment! In thi ...

  6. Multi-Dimensional Recurrent Neural Networks

    Multi-Dimensional Recurrent Neural Networks The basic idea of MDRNNs is to replace the single recurr ...

  7. [C5W1] Sequence Models - Recurrent Neural Networks

    第一周 循环序列模型(Recurrent Neural Networks) 为什么选择序列模型?(Why Sequence Models?) 在本课程中你将学会序列模型,它是深度学习中最令人激动的内容 ...

  8. Hyperspectral Image Classification Using Similarity Measurements-Based Deep Recurrent Neural Networks

    用RNN来做像素分类,输入是一系列相近的像素,长度人为指定为l,相近是利用像素相似度或是范围相似度得到的,计算个欧氏距离或是SAM. 数据是两个高光谱数据 1.Pavia University,Ref ...

  9. 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)

    循环神经网络(RNN, Recurrent Neural Networks)介绍    这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ...

随机推荐

  1. python 模拟百度搜索

    import urllib.request def Url(url): flag = input("请输入要搜索的关键字:") headers_ = { "User-Ag ...

  2. add-migration Build failed.

    >add-migration JczInfoDateTimeBuild failed. 1编译解决方案,看是否报错,不管哪个有错误都会迁移失败 2重启vs

  3. HttpLogBrowser-GUI日志分析工具

    登陆https://www.iis.net/downloads搜索HttpLogBrowser获得最新版本

  4. zabbix 邮件报警配置

    zabbxi 邮件告警推送有两种方式: 1.使用zabbix服务端的本地邮箱账号发送,邮件名为:user@hostname.localdomain,user为发送邮件的用户,hostname为zabb ...

  5. Python爬虫与数据分析之进阶教程:文件操作、lambda表达式、递归、yield生成器

    专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...

  6. tornado架构分析3 options.py中基础类_Option

    1 数据清洗 option里面最重要的方法就是parse,在这里,parse函数的一开始就调用了后面的子函数_parse_datetime,_parse_timedelta,_parse_bool,_ ...

  7. C++_数字时钟

    利用C++语言基础,制作了一个模拟电子时钟的程序. #include<iostream> #include<windows.h> //延时与清屏头文件 using namesp ...

  8. 嵌入式linux——点亮led灯(二)

    刚才在jz2440板子上写了一个点亮中间led的程序,前前后后十几分钟才好.最终代码 本节内容: 1. 汇编点灯 2. C点灯 3. 参数选择点灯 4. 按键点灯 1. 汇编点灯 .text .glo ...

  9. SpringBoot多模块项目打包问题

    项目结构图如下: 在SpringBoot多模块项目打包时遇见如下错误: 1.repackage failed: Unable to find main class -> [Help 1] 解决步 ...

  10. Django03-视图系统views

    一.编写视图 一个视图函数,是一个简单的Python函数,它接受web请求,并且返回web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是 ...