mindspore打卡第十天transformer之训练过程

mindspore打卡第十天transformer之训练过程
理解您的需求,让我们通过一个简化的例子来说明这个过程。假设我们有一个简单的语言模型任务,模型试图预测一个小型词汇表中的下一个词。词汇表包含三个词:“狗”、“猫”、“鸟”,我们用数字1、2、3分别代表它们。我们的模型正在学习基于前文预测序列中下一个词的能力,现在考虑一个非常小的训练样本序列:

  • 样本序列:狗 猫
  • 目标序列(真实标签):猫 鸟

模型对于每个位置上的词生成了一个预测概率分布。下面是如何用数字表示这两个位置上的预测及相应的损失计算:

位置1(第一个词之后)

  • 模型预测概率分布:[ \hat{Y}_1 = [0.6, 0.2, 0.2] ] (表示预测“狗”为下一个词的概率为60%,猫为20%,鸟为20%)
  • 目标词(真实标签):猫(索引为2)

位置2(第二个词之后)

  • 模型预测概率分布:[ \hat{Y}_2 = [0.3, 0.4, 0.3] ] (表示预测“猫”为下一个词的概率为40%,狗为30%,鸟为30%)
  • 目标词(真实标签):鸟(索引为3)
计算位置1的损失

位置1的真实标签是“猫”,其索引为2,因此我们只关心(\hat{Y}1)中索引2位置的概率,即0.2。交叉熵损失公式简化为单个概率的负对数,所以位置1的损失为:
[ L_1 = -\log(\hat{Y}
{1,2}) = -\log(0.2) \approx 1.609 ]

计算位置2的损失

位置2的真实标签是“鸟”,其索引为3,相应地,我们关注(\hat{Y}2)中索引3位置的概率,即0.3。位置2的损失为:
[ L_2 = -\log(\hat{Y}
{2,3}) = -\log(0.3) \approx 1.204 ]

总损失

如果简单平均这两个位置的损失来获得整个样本的损失,则有:
[ L_{total} = \frac{L_1 + L_2}{2} \approx \frac{1.609 + 1.204}{2} \approx 1.407 ]

这个总损失值反映了模型在预测这个特定样本序列时的不准确性。目标是通过优化算法调整模型参数,最小化这个损失值,从而提高预测的准确度。

src = [‘ein’, ‘mann’, ‘mit’, ‘einem’, ‘orangefarbenen’, ‘hut’, ‘,’, ‘der’, ‘etwas’, ‘anstarrt’, ‘.’]
trg = [‘a’, ‘man’, ‘in’, ‘an’, ‘orange’, ‘hat’, ‘starring’, ‘at’, ‘something’, ‘.’]
predicted trg = [‘a’, ‘man’, ‘with’, ‘an’, ‘orange’, ‘hat’, ‘,’, ‘something’, ‘in’, ‘a’, ‘hat’, ‘.’] 请解析 trainsformer的结果

在这个例子中,我们似乎正在处理一个德语到英语的翻译任务,其中src是德语源句子,trg是英语目标句子,而predicted trg是Transformer模型尝试翻译src句子后产生的预测输出。下面是对这些句子的逐项解析和比较:

源句子(德语):

ein mann mit einem orangefarbenen hut , der etwas anstarrt .

意为:
“A man with an orange hat, who is staring at something.”

目标句子(英语,正确答案):

a man in an orange hat starring at something .

这是正确的翻译,简洁明了地传达了源句的意思。

预测的翻译句子(英语,Transformer输出):

a man with an orange hat , something in a hat .

对比分析:

  1. ein Mann -> a man: 这部分翻译是准确的。
  2. mit einem orangefarbenen Hut -> with an orange hat: Transformer正确地识别并翻译了“带有橙色帽子”的概念,尽管省略了“farbenen”(颜色的),但核心意思保留了。
  3. ,: 逗号在两个句子中都得到了适当处理。
  4. der etwas anstarrt -> something in a hat . 这里翻译出现了一些偏差,“der etwas anstarrt”意味着“正在盯着某物的人”,而模型翻译成了“something in a hat”,这不仅改变了原句的主被动关系,还未能准确表达“正在盯着”的动作。此外,句点也错误地放在了“hat”之后,影响了句子的完整性。

总结来说,Transformer模型在某些部分展现了良好的翻译能力,比如正确翻译了“一个戴橙色帽子的男人”。但在处理从句和动词时出现了误解,导致了信息的丢失和结构上的不准确。这是机器翻译中的常见挑战,尤其是对于复杂句法结构和细微语义差异的处理。改进模型可能需要更多的训练数据、更精细的模型调整,或者使用更复杂的注意力机制来增强对长距离依赖和语法结构的理解。

在机器翻译任务中,trg(Target)和predicted trg(Predicted Target)有着重要的作用,具体体现在以下几个方面:

  1. 评估翻译质量trg是人工编写的或者已知的正确翻译结果,而predicted trg是机器翻译模型基于源语言句子src生成的翻译结果。通过将predicted trgtrg进行比较,我们可以评估模型的翻译质量和性能。常用的评估指标包括BLEU分数、ROUGE分数、TER(翻译编辑率)等,这些指标可以帮助我们量化模型翻译的准确度和流畅度。

  2. 模型训练与优化:在训练阶段,模型会使用srctrg作为输入和期望输出来调整自身参数,以最小化预测输出与正确翻译之间的差距(即损失函数)。因此,trg是模型学习的依据,帮助模型理解什么样的翻译是好的。而predicted trg则反映了模型当前的翻译能力,通过对模型进行多轮训练,不断优化predicted trg以接近trg,从而提高翻译质量。

  3. 错误分析与反馈:通过对比predicted trgtrg,研究者和工程师可以发现模型翻译中的错误模式,比如特定类型的语法错误、词汇选择不当或是语序问题等。这些分析结果可以反馈到模型的改进过程中,比如增加特定领域的训练数据、调整模型架构或优化训练策略等。

  4. 性能监控:在模型部署后,持续监控predicted trg与实际应用场景中的trg(尽管实际使用中可能没有明确的trg,但可以通过用户反馈、人工审核等方式获取)的匹配程度,可以帮助维护团队了解模型在真实环境中的表现,及时发现并解决潜在的问题。

综上所述,trg作为“黄金标准”,是衡量和提升predicted trg翻译质量的基准,而predicted trg则是模型性能的直接体现,两者共同推动了机器翻译技术的进步和优化。

import mindspore
from mindspore import nn
from mindspore import ops
from mindspore import Tensor
from mindspore import dtype as mstype


class ScaledDotProductAttention(nn.Cell):
    def __init__(self, dropout_p=0.):
        super().__init__()
        self.softmax = nn.Softmax()
        self.dropout = nn.Dropout(1-dropout_p)
        self.sqrt = ops.Sqrt()


    def construct(self, query, key, value, attn_mask=None):
        """scaled dot product attention"""
        # 计算scaling factor
        embed_size = query.shape[-1]
        scaling_factor = self.sqrt(Tensor(embed_size, mstype.float32))
        
        # 注意力权重计算
        # 计算query和key之间的点积,并除以scaling factor进行归一化
        attn = ops.matmul(query, key.swapaxes(-2, -1) / scaling_factor)

        # 注意力掩码机制
        if attn_mask is not None:
            attn = attn.masked_fill(attn_mask, -1e9)
        
        # softmax,保证注意力权重范围在0-1之间
        attn = self.softmax(attn)

        # dropout
        attn = self.dropout(attn)

        # 对value进行加权
        output = ops.matmul(attn, value)  ## QK  V

        return (output, attn)
def get_attn_pad_mask(seq_q, seq_k, pad_idx):
    """注意力掩码:识别序列中的<pad>占位符

    Args:
        seq_q (Tensor): query序列,shape = [batch size, query len]
        seq_k (Tensor): key序列,shape = [batch size, key len]
        pad_idx (Tensor): key序列<pad>占位符对应的数字索引
    """
    batch_size, len_q = seq_q.shape
    batch_size, len_k = seq_k.shape

    # 如果序列中元素对应<pad>占位符,则该位置在mask中对应元素为True
    # pad_attn_mask: [batch size, key len]
    pad_attn_mask = ops.equal(seq_k, pad_idx)

    # 增加额外的维度
    # pad_attn_mask: [batch size, 1, key len]
    pad_attn_mask = pad_attn_mask.expand_dims(1)
    # 将掩码广播到[batch size, query len, key len]
    pad_attn_mask = ops.broadcast_to(pad_attn_mask, (batch_size, len_q, len_k))

    return pad_attn_mask
q = k = Tensor([[1, 1, 0, 0]], mstype.float32)
pad_idx = 0
mask = get_attn_pad_mask(q, k, pad_idx)
print(mask)
print(q.shape, mask.shape)
[[[False False  True  True]
  [False False  True  True]
  [False False  True  True]
  [False False  True  True]]]
(1, 4) (1, 4, 4)
class MultiHeadAttention(nn.Cell):
    def __init__(self, d_model, d_k, n_heads, dropout_p=0.):
        super().__init__()
        self.n_heads = n_heads
        self.d_k = d_k
        self.W_Q = nn.Dense(d_model, d_k * n_heads)
        self.W_K = nn.Dense(d_model, d_k * n_heads)
        self.W_V = nn.Dense(d_model, d_k * n_heads)
        self.W_O = nn.Dense(n_heads * d_k, d_model)
        self.attention = ScaledDotProductAttention(dropout_p=dropout_p)

    def construct(self, query, key, value, attn_mask):
        """
        query: [batch_size, len_q, d_model]
        key: [batch_size, len_k, d_model]
        value: [batch_size, len_k, d_model]
        attn_mask: [batch_size, seq_len, seq_len]
        """

        batch_size = query.shape[0]

        # 将query,key和value分别乘以对应的权重,并分割为不同的“头”
        # q_s: [batch_size, len_q, n_heads, d_k]
        # k_s: [batch_size, len_k, n_heads, d_k]
        # v_s: [batch_size, len_k, n_heads, d_k]
        q_s = self.W_Q(query).view(batch_size, -1, self.n_heads, self.d_k)
        k_s = self.W_K(key).view(batch_size, -1, self.n_heads, self.d_k)
        v_s = self.W_V(value).view(batch_size, -1, self.n_heads, self.d_k)

        # 调整query,key和value的维度
        # q_s: [batch_size, n_heads, len_q, d_k]
        # k_s: [batch_size, n_heads, len_k, d_k]
        # v_s: [batch_size, n_heads, len_k, d_k]
        q_s = q_s.transpose((0, 2, 1, 3))  ###变成 bz  head  dmodel  dk
        k_s = k_s.transpose((0, 2, 1, 3))
        v_s = v_s.transpose((0, 2, 1, 3))

        # attn_mask的dimension需与q_s, k_s, v_s对应
        # attn_mask: [batch_size, n_heads, seq_len, seq_len]
        attn_mask = attn_mask.expand_dims(1)
        attn_mask = ops.tile(attn_mask, (1, self.n_heads, 1, 1))

        # 计算每个头的注意力分数
        # context: [batch_size, n_heads, len_q, d_k]
        # attn: [batch_size, n_heads, len_q, len_k]
        context, attn = self.attention(q_s, k_s, v_s, attn_mask)

        # concatenate
        # context: [batch_size, len_q, n_heads * d_k]
        context = context.transpose((0, 2, 1, 3)).view((batch_size, -1, self.n_heads * self.d_k))

        # 乘以W_O
        # output: [batch_size, len_q, n_heads * d_k]
        output = self.W_O(context)

        return output, attn
dmodel, dk, nheads = 10, 2, 5
q = k = v = ops.ones((1, 2, 10), mstype.float32)  ##2单词  10长度
attn_mask = Tensor([False]).broadcast_to((1, 2, 2))
multi_head_attn = MultiHeadAttention(dmodel, dk, nheads)
output, attn = multi_head_attn(q, k, v, attn_mask)
print(output.shape, attn.shape)
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:12:49.851.896 [mindspore/nn/layer/basic.py:173] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.


(1, 2, 10) (1, 5, 2, 2)
attn_mask
Tensor(shape=[1, 2, 2], dtype=Bool, value=
[[[False, False],
  [False, False]]])
attn_mask1 = attn_mask.expand_dims(1)
attn_mask1
Tensor(shape=[1, 1, 2, 2], dtype=Bool, value=
[[[[False, False],
   [False, False]]]])
attn_mask2 = ops.tile(attn_mask1, (1, 5, 1, 1))
attn_mask2
Tensor(shape=[1, 5, 2, 2], dtype=Bool, value=
[[[[False, False],
   [False, False]],
  [[False, False],
   [False, False]],
  [[False, False],
   [False, False]],
  [[False, False],
   [False, False]],
  [[False, False],
   [False, False]]]])
#context, attn = self.attention(q_s, k_s, v_s, attn_mask)  ##可能是根据某种规则计算了 10长度的某些 掩码的位置  
from mindspore import numpy as mnp

class PositionalEncoding(nn.Cell):
    """位置编码"""

    def __init__(self, d_model, dropout_p=0.1, max_len=100):
        super().__init__()
        self.dropout = nn.Dropout(1 - dropout_p)

        # 位置信息
        # pe: [max_len, d_model]
        self.pe = ops.Zeros()((max_len, d_model), mstype.float32)

        # pos: [max_len, 1]
        # angle: [d_model/2, ]
        # pos/angle: [max len, d_model/2]
        pos = mnp.arange(0, max_len, dtype=mstype.float32).view((-1, 1))
        angle = ops.pow(10000.0, mnp.arange(0, d_model, 2, dtype=mstype.float32)/d_model)
        
        # pe: [max len, d_model]
        self.pe[:, 0::2] = ops.sin(pos/angle)
        self.pe[:, 1::2] = ops.cos(pos/angle)

    def construct(self, x):
        batch_size = x.shape[0]

        # broadcast
        # pe: [batch_size, max_len, d_model]
        pe = self.pe.expand_dims(0)
        pe = ops.broadcast_to(pe, (batch_size, -1, -1))

        # 将位置编码截取至x同等大小
        # x: [batch_size, seq_len, d_model]
        x = x + pe[:, :x.shape[1], :]
        return self.dropout(x)
x = ops.Zeros()((1, 2, 4), mstype.float32)
pe = PositionalEncoding(4)
print(pe(x))
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:13:42.726.95 [mindspore/nn/layer/basic.py:173] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.


[[[0.         1.         0.         1.        ]
  [0.84147096 0.5403023  0.00999983 0.99995   ]]]
class PoswiseFeedForward(nn.Cell):
    def __init__(self, d_ff, d_model, dropout_p=0.):
        super().__init__()
        self.linear1 = nn.Dense(d_model, d_ff)
        self.linear2 = nn.Dense(d_ff, d_model)
        self.dropout = nn.Dropout(1-dropout_p)
        self.relu = nn.ReLU()

    def construct(self, x):
        """前馈神经网络
        x: [batch_size, seq_len, d_model]
        """
        # x: [batch_size, seq_len, d_ff]
        x = self.linear1(x)
        x = self.relu(x)
        x = self.dropout(x)
        # x: [batch_size, seq_len, d_model]
        output = self.linear2(x)
        return output
x = ops.ones((1, 2, 4), mstype.float32)
ffn = PoswiseFeedForward(16, 4)
print(ffn(x).shape)
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:13:54.530.267 [mindspore/nn/layer/basic.py:173] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.


(1, 2, 4)
class AddNorm(nn.Cell):
    def __init__(self, d_model, dropout_p=0.):
        super().__init__()
        self.layer_norm = nn.LayerNorm((d_model, ), epsilon=1e-5)
        self.dropout = nn.Dropout(1-dropout_p)
    
    def construct(self, x, residual):
        return self.layer_norm(self.dropout(x) + residual)
x = ops.ones((1, 2, 4), mstype.float32)
residual = ops.ones((1, 2, 4), mstype.float32)
add_norm = AddNorm(4)
print(add_norm(x, residual).shape)
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:14:02.757.909 [mindspore/nn/layer/basic.py:173] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.


(1, 2, 4)
class EncoderLayer(nn.Cell):
    def __init__(self, d_model, n_heads, d_ff, dropout_p=0.):
        super().__init__()
        d_k = d_model // n_heads
        if d_k * n_heads != d_model:
            raise ValueError(f"The `d_model` {d_model} can not be divisible by `num_heads` {n_heads}.")
        self.enc_self_attn = MultiHeadAttention(d_model, d_k, n_heads, dropout_p)
        self.pos_ffn = PoswiseFeedForward(d_ff, d_model, dropout_p)
        self.add_norm1 = AddNorm(d_model, dropout_p)
        self.add_norm2 = AddNorm(d_model, dropout_p)
        
    def construct(self, enc_inputs, enc_self_attn_mask):
        """
        enc_inputs: [batch_size, src_len, d_model]
        enc_self_attn_mask: [batch_size, src_len, src_len]
        """
        residual = enc_inputs

        # multi-head attention
        enc_outputs, attn = self.enc_self_attn(enc_inputs, enc_inputs, enc_inputs, enc_self_attn_mask)

        # add & norm
        enc_outputs = self.add_norm1(enc_outputs, residual)
        residual = enc_outputs

        # feed-forward
        enc_outputs = self.pos_ffn(enc_outputs)

        # add & norm
        enc_outputs = self.add_norm2(enc_outputs, residual)

        return enc_outputs, attn
x = ops.ones((1, 2, 8), mstype.float32)
mask = Tensor([False]).broadcast_to((1, 2, 2))
encoder_layer = EncoderLayer(8, 4, 16)
output, attn = encoder_layer(x, mask)
print(output.shape, attn.shape)
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:14:04.151.640 [mindspore/nn/layer/basic.py:173] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:14:04.158.118 [mindspore/nn/layer/basic.py:173] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:14:04.161.792 [mindspore/nn/layer/basic.py:173] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:14:04.165.469 [mindspore/nn/layer/basic.py:173] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.


(1, 2, 8) (1, 4, 2, 2)
class Encoder(nn.Cell):
    def __init__(self, src_vocab_size, d_model, n_heads, d_ff, n_layers, dropout_p=0.):
        super().__init__()
        self.src_emb = nn.Embedding(src_vocab_size, d_model)
        self.pos_emb = PositionalEncoding(d_model, dropout_p)
        self.layers = nn.CellList([EncoderLayer(d_model, n_heads, d_ff, dropout_p) for _ in range(n_layers)])
        self.scaling_factor = ops.Sqrt()(Tensor(d_model, mstype.float32))

        
    def construct(self, enc_inputs, src_pad_idx):
        """enc_inputs : [batch_size, src_len]
        """
        # 将输入转换为embedding,并添加位置信息
        # enc_outputs: [batch_size, src_len, d_model]
        enc_outputs = self.src_emb(enc_inputs.astype(mstype.int32))
        enc_outputs = self.pos_emb(enc_outputs * self.scaling_factor)

        # 输入的padding掩码
        # enc_self_attn_mask: [batch_size, src_len, src_len]
        enc_self_attn_mask = get_attn_pad_mask(enc_inputs, enc_inputs, src_pad_idx)

        # 堆叠encoder层
        # enc_outputs: [batch_size, src_len, d_model]
        # enc_self_attns: [batch_size, n_heads, src_len, src_len]
        enc_self_attns = []
        for layer in self.layers:
            enc_outputs, enc_self_attn = layer(enc_outputs, enc_self_attn_mask)
            enc_self_attns.append(enc_self_attn)
        return enc_outputs, enc_self_attns
def get_attn_subsequent_mask(seq_q, seq_k):
    """生成时间掩码,使decoder在第t时刻只能看到序列的前t-1个元素
    
    Args:
        seq_q (Tensor): query序列,shape = [batch size, len_q]
        seq_k (Tensor): key序列,shape = [batch size, len_k]
    """
    batch_size, len_q = seq_q.shape
    batch_size, len_k = seq_k.shape
    # 生成三角矩阵
    # subsequent_mask: [batch size, len_q, len_k]
    ones = ops.ones((batch_size, len_q, len_k), mindspore.float32)
    subsequent_mask = mnp.triu(ones, k=1)
    return subsequent_mask
q = k = ops.ones((1, 4), mstype.float32)  ##因为 batch_size, len_q = seq_q.shape  其实修改为 1 4 4 也可以
mask = get_attn_subsequent_mask(q, k)
print(mask)
[[[0. 1. 1. 1.]
  [0. 0. 1. 1.]
  [0. 0. 0. 1.]
  [0. 0. 0. 0.]]]
class DecoderLayer(nn.Cell):
    def __init__(self, d_model, n_heads, d_ff, dropout_p=0.):
        super().__init__()
        d_k = d_model // n_heads
        if d_k * n_heads != d_model:
            raise ValueError(f"The `d_model` {d_model} can not be divisible by `num_heads` {n_heads}.")
        self.dec_self_attn = MultiHeadAttention(d_model, d_k, n_heads, dropout_p)
        self.dec_enc_attn = MultiHeadAttention(d_model, d_k, n_heads, dropout_p)
        self.pos_ffn = PoswiseFeedForward(d_ff, d_model, dropout_p)
        self.add_norm1 = AddNorm(d_model, dropout_p)
        self.add_norm2 = AddNorm(d_model, dropout_p)
        self.add_norm3 = AddNorm(d_model, dropout_p)
        
    def construct(self, dec_inputs, enc_outputs, dec_self_attn_mask, dec_enc_attn_mask):
        """
        dec_inputs: [batch_size, trg_len, d_model]
        enc_outputs: [batch_size, src_len, d_model]
        dec_self_attn_mask: [batch_size, trg_len, trg_len]
        dec_enc_attn_mask: [batch_size, trg_len, src_len]
        """
        residual = dec_inputs
    
        # decoder multi-head attention
        dec_outputs, dec_self_attn = self.dec_self_attn(dec_inputs, dec_inputs, dec_inputs, dec_self_attn_mask)

        # add & norm
        dec_outputs = self.add_norm1(dec_outputs, residual)
        residual = dec_outputs

        # encoder-decoder multi-head attention        
        dec_outputs, dec_enc_attn = self.dec_enc_attn(dec_outputs, enc_outputs, enc_outputs, dec_enc_attn_mask)## dec_outputs作为Q enc作为KV

        # add & norm
        dec_outputs = self.add_norm2(dec_outputs, residual)
        residual = dec_outputs

        # feed-forward
        dec_outputs = self.pos_ffn(dec_outputs)

        # add & norm
        dec_outputs = self.add_norm3(dec_outputs, residual)

        return dec_outputs, dec_self_attn, dec_enc_attn

这段代码是神经机器翻译(NMT)任务中Transformer模型解码器部分的一个关键环节,它展示了如何使用自注意力(self-attention)和编码器-解码器注意力(encoder-decoder attention)来处理目标序列(解码器输入)和源序列信息。下面是逐步解析:

输入参数说明:
dec_inputs: 解码器的输入,形状为 [batch_size, trg_len, d_model]。其中,batch_size 是批次大小,trg_len 是目标序列的长度,d_model 是模型的维度,即每个词嵌入的维度。
enc_outputs: 编码器的输出,形状为 [batch_size, src_len, d_model]。src_len 是源序列的长度,其他与dec_inputs相同。
dec_self_attn_mask: 解码器自注意力掩码,形状为 [batch_size, trg_len, trg_len]。用于屏蔽当前时刻之后的位置,防止看到未来的信息,实现自回归属性。
dec_enc_attn_mask: 编码器-解码器注意力掩码,形状为 [batch_size, trg_len, src_len]。用于屏蔽源序列中的padding位置,确保在计算注意力时不考虑这些位置的信息。 长度都设置为4 ,请用矩阵举例解析

[
[[1.1, 2.2, 3.3], // 第1个目标序列词的嵌入向量
[4.4, 5.5, 6.6], // 第2个…
[7.7, 8.8, 9.9], // …
[10.1, 11.1, 12.1]], // 第4个…
]

这段代码是神经机器翻译(NMT)任务中Transformer模型解码器部分的一个关键环节,它展示了如何使用自注意力(self-attention)和编码器-解码器注意力(encoder-decoder attention)来处理目标序列(解码器输入)和源序列信息。下面是逐步解析:


x = y = ops.ones((1, 2, 4), mstype.float32)
mask1 = mask2 = Tensor([False]).broadcast_to((1, 2, 2))
decoder_layer = DecoderLayer(4, 1, 16)  ## d_model, n_heads, d_ff,
output, attn1, attn2 = decoder_layer(x, y, mask1, mask2)
print(output.shape, attn1.shape, attn2.shape)
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:14:44.391.063 [mindspore/nn/layer/basic.py:173] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:14:44.405.283 [mindspore/nn/layer/basic.py:173] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:14:44.412.242 [mindspore/nn/layer/basic.py:173] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:14:44.416.517 [mindspore/nn/layer/basic.py:173] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:14:44.420.516 [mindspore/nn/layer/basic.py:173] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:14:44.424.014 [mindspore/nn/layer/basic.py:173] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.


(1, 2, 4) (1, 1, 2, 2) (1, 1, 2, 2)
def get_attn_subsequent_mask(seq_q, seq_k):
    """生成时间掩码,使decoder在第t时刻只能看到序列的前t-1个元素
    
    Args:
        seq_q (Tensor): query序列,shape = [batch size, len_q]
        seq_k (Tensor): key序列,shape = [batch size, len_k]
    """
    batch_size, len_q = seq_q.shape
    batch_size, len_k = seq_k.shape
    # 生成三角矩阵
    # subsequent_mask: [batch size, len_q, len_k]
    ones = ops.ones((batch_size, len_q, len_k), mindspore.float32)
    subsequent_mask = mnp.triu(ones, k=1)
    return subsequent_mask
def get_attn_pad_mask(seq_q, seq_k, pad_idx):
    """注意力掩码:识别序列中的<pad>占位符

    Args:
        seq_q (Tensor): query序列,shape = [batch size, query len]
        seq_k (Tensor): key序列,shape = [batch size, key len]
        pad_idx (Tensor): key序列<pad>占位符对应的数字索引
    """
    batch_size, len_q = seq_q.shape
    batch_size, len_k = seq_k.shape

    # 如果序列中元素对应<pad>占位符,则该位置在mask中对应元素为True
    # pad_attn_mask: [batch size, key len]
    pad_attn_mask = ops.equal(seq_k, pad_idx)

    # 增加额外的维度
    # pad_attn_mask: [batch size, 1, key len]
    pad_attn_mask = pad_attn_mask.expand_dims(1)
    # 将掩码广播到[batch size, query len, key len]
    pad_attn_mask = ops.broadcast_to(pad_attn_mask, (batch_size, len_q, len_k))

    return pad_attn_mask
class Decoder(nn.Cell):
    def __init__(self, trg_vocab_size, d_model, n_heads, d_ff, n_layers, dropout_p=0.):
        super().__init__()
        self.trg_emb = nn.Embedding(trg_vocab_size, d_model)
        self.pos_emb = PositionalEncoding(d_model, dropout_p)
        self.layers = nn.CellList([DecoderLayer(d_model, n_heads, d_ff) for _ in range(n_layers)])
        self.projection = nn.Dense(d_model, trg_vocab_size)
        self.scaling_factor = ops.Sqrt()(Tensor(d_model, mstype.float32))      
        
    def construct(self, dec_inputs, enc_inputs, enc_outputs, src_pad_idx, trg_pad_idx):
        """
        dec_inputs: [batch_size, trg_len]
        enc_inputs: [batch_size, src_len]
        enc_outputs: [batch_size, src_len, d_model]
        """
        # 将输入转换为Embedding,并添加位置信息
        # dec_outputs: [batch_size, trg_len, d_model]
        dec_outputs = self.trg_emb(dec_inputs.astype(mstype.int32))
        dec_outputs = self.pos_emb(dec_outputs * self.scaling_factor)

        # decoder中自注意力的掩码
        # dec_self_attn_mask: [batch_size, trg_len, trg_len]
        dec_self_attn_pad_mask = get_attn_pad_mask(dec_inputs, dec_inputs, trg_pad_idx)
        dec_self_attn_subsequent_mask = get_attn_subsequent_mask(dec_inputs, dec_inputs)
        dec_self_attn_mask = ops.gt((dec_self_attn_pad_mask + dec_self_attn_subsequent_mask), 0)

        # encoder-decoder中的注意力padding掩码
        # dec_enc_attn_mask: [batch_size, trg_len, src_len]
        dec_enc_attn_mask = get_attn_pad_mask(dec_inputs, enc_inputs, src_pad_idx)

        # 堆叠decoder层
        # dec_outputs: [batch_size, trg_len, d_model]
        dec_self_attns, dec_enc_attns = [], []
        for layer in self.layers:
            dec_outputs, dec_self_attn, dec_enc_attn = layer(dec_outputs, enc_outputs, dec_self_attn_mask, dec_enc_attn_mask)
            dec_self_attns.append(dec_self_attn)
            dec_enc_attns.append(dec_enc_attn)

        # 线性层
        # dec_outputs: [batch_size, trg_len, trg_vocab_size]
        dec_outputs = self.projection(dec_outputs)
        return dec_outputs, dec_self_attns, dec_enc_attns

这段代码定义了一个基于Transformer架构的解码器类(Decoder),用于实现序列到序列(seq2seq)模型中的解码部分。以下是该解码器工作流程的详细解释,包括每个关键步骤的计算方法:

初始化

  • Embedding层 (self.trg_emb): 将解码器的输入token索引转换为固定维度的向量表示。假设输入序列长度为trg_len,词汇表大小为trg_vocab_size,则此层将输入张量[batch_size, trg_len]映射到[batch_size, trg_len, d_model],其中d_model是模型的隐藏维度。

  • Positional Encoding (self.pos_emb): 给每个位置的embedding加上位置编码,以便模型能够区分不同位置的输入,即使它们的词嵌入相同。这一步确保了模型具有位置感知能力。

  • Decoder Layer堆叠 (self.layers): 创建多个解码器层,每个层包含自注意力、编码器-解码器注意力和前馈网络(Feed Forward Network, FFN)。

  • 投影层 (self.projection): 最后一层用于将解码器的输出从d_model维度映射到目标词汇表大小trg_vocab_size,实现最终的词汇预测。

构造函数 (construct方法)

  1. Embedding与位置编码: 首先,将解码器输入的token索引通过Embedding层转换为嵌入向量,并乘以一个缩放因子(通常是sqrt(d_model))以标准化初始的嵌入值。然后,添加位置编码。

  2. 自注意力掩码:

    • dec_self_attn_pad_mask用于屏蔽掉Padding的位置,避免自注意力计算时考虑这些位置的信息。
    • dec_self_attn_subsequent_mask用于屏蔽当前时刻之后的所有位置,确保自注意力在生成当前词时不考虑未来的词,维持自回归特性。
    • 两者相加并取大于0的元素,得到最终的自注意力掩码。
  3. 编码器-解码器注意力掩码: 用于在编码器-解码器注意力中屏蔽编码器侧的Padding位置。

  4. 解码器层堆叠: 对每一层解码器,输入包括解码器的当前输出、编码器的输出、自注意力掩码和编码器-解码器注意力掩码。每层会执行以下操作:

    • 自注意力机制,仅基于解码器的输入,使用dec_self_attn_mask
    • 编码器-解码器注意力,使用来自编码器的输出和dec_enc_attn_mask
    • 前馈网络,通常包含两个线性层和一个激活函数,用于引入非线性。

    每一层输出更新后的解码器状态,以及该层的自注意力权重和编码器-解码器注意力权重。

  5. 线性层投影: 最终,所有解码器层处理完毕后,将输出通过一个全连接层(self.projection),得到对目标词汇表的预测分布[batch_size, trg_len, trg_vocab_size]

总结

虽然解码器的内部操作在概念上遵循自回归原则,实际操作中却是并行处理的,特别是多头自注意力和前馈网络部分,这得益于Transformer架构的并行计算优势。每一步都利用掩码来确保序列的时序依赖得到正确处理,而不需要像传统RNN那样按时间步逐步推进。最终,模型一次性预测出整个目标序列的概率分布,而非一步一步生成。

src_pad_idx 代表源序列(source sequence)中的填充索引(padding index),在处理序列数据时,尤其是变长序列输入到神经网络模型中时,常常需要对序列进行填充,以使得所有序列在某个维度(通常是时间序列的长度维度)上对齐。这样做可以让批量处理成为可能,因为不同样本的序列长度往往不一致。

src_pad_idx 本身是一个标量值,它通常被设置为一个特定的整数值,这个值不在源词汇表的有效索引范围内,用来标记那些在实际序列结束后的填充位置。例如,在PyTorch或PaddlePaddle等框架中,用户可能会选择0作为src_pad_idx,但实际值可以根据具体任务和实现自由设定。

在上述代码上下文中,尽管src_pad_idx本身是一个标量,但它被用于创建掩码矩阵,这些掩码矩阵具有与序列长度相关的维度。例如:

  • 自注意力掩码 (dec_self_attn_pad_mask)编码器-解码器注意力掩码 (dec_enc_attn_mask) 使用src_pad_idx来生成二维或三维的布尔掩码张量,用于指示哪些位置是填充的。这些掩码的维度分别对应于:
    • dec_self_attn_pad_mask: [batch_size, trg_len, trg_len] 或简化版本 [trg_len, trg_len],取决于是否在自注意力中考虑批量内的不同序列长度。
    • dec_enc_attn_mask: [batch_size, trg_len, src_len],确保解码器不会关注编码器输出中的填充位置。

因此,尽管src_pad_idx本身没有维度,但它参与构建的掩码在实践中具有明确的维度,这些维度反映了模型处理序列数据时的时间序列维度和批量维度。掩码的存在确保模型在计算注意力权重时能忽略掉因对齐而添加的无关填充信息。

在这段代码中,dec_self_attn_maskdec_enc_attn_mask 分别用于两种不同的注意力机制中,它们在构造过程中的主要区别在于所关注的序列以及所执行的操作不同,具体来说:

1. dec_self_attn_mask (解码器自注意力掩码)

  • 用途: 该掩码用于解码器中的自注意力层(decoder self-attention layer)。自注意力层让序列中的每个位置能够基于序列其他位置的信息来更新自身的表示。由于解码器在生成序列时是顺序进行的,当前位置不能看到未来的位置信息(即“因果”限制),因此需要一个“后续掩码”(dec_self_attn_subsequent_mask)来阻止这种“向后看”的操作。

  • 构造方式:

    • dec_self_attn_pad_mask 是基于目标序列(解码器的输入)的填充位置生成的,确保模型不会关注那些填充的token。
    • dec_self_attn_subsequent_mask 是一个下三角矩阵,用于实施“因果”限制,保证当前位置只依赖于它之前的序列位置。
    • ops.gt((dec_self_attn_pad_mask + dec_self_attn_subsequent_mask), 0) 这行代码实质上是在组合这两个掩码:如果位置是填充的(由 dec_self_attn_pad_mask 标记)或者尝试看向未来的位置(由 dec_self_attn_subsequent_mask 防止),那么对应的掩码值就会被设为1(表示需要mask的位置),否则为0。然后通过大于0的判断来生成最终的布尔掩码。

2. dec_enc_attn_mask (编码器-解码器注意力掩码)

  • 用途: 该掩码用于解码器中的编码器-解码器注意力层(encoder-decoder attention layer),其目的是让解码器能够基于编码器的输出来生成下一个词。这里的重点在于排除解码器在关注编码器输出时,对那些在源序列中存在的填充部分的关注。

  • 构造方式:

    • get_attn_pad_mask(dec_inputs, enc_inputs, src_pad_idx) 函数是用来生成这个掩码的,它依据目标序列(dec_inputs)和源序列(enc_inputs)以及指定的填充索引(src_pad_idx)来创建。
    • 这个掩码是一个三维张量,形状为 [batch_size, trg_len, src_len],对于每个批次中的每个目标序列位置,它会检查相应的源序列位置是否为填充,并相应地设置掩码值。如果源序列中的某个位置是填充的,则在该位置对应的目标序列的所有位置上的注意力权值都会被置为极小值或直接在softmax前设置为0,从而在计算注意力时被忽略。

总结

两者的主要区别在于它们服务于不同的注意力类型,且dec_self_attn_mask 强制实施了序列内的因果关系,而 dec_enc_attn_mask 则是确保解码器在利用编码器信息时,不会关注源序列中的填充部分。这两种掩码共同协作,确保了注意力机制能够在保留序列顺序性的同时,有效地处理变长序列和避免信息泄露。

当然,为了更好地理解get_attn_pad_mask函数的工作原理,让我们通过一个简化例子来说明。假设我们有一个批次的数据,包含两个句子对,目标序列(解码器的输入)和源序列(编码器的输出)如下:

  • 目标序列(dec_inputs):

    [[1, 2, 3, 0],   # 批次1的目标序列,0表示填充
     [4, 5, 0, 0]]  # 批次2的目标序列,后两位是填充
    
  • 源序列(enc_inputs):

    [[7, 8, 9, 0],   # 批次1的源序列,最后一位是填充
     [10, 11, 0, 0]] # 批次2的源序列,后两位是填充
    
  • 填充索引(src_pad_idx): 0

现在,我们要使用get_attn_pad_mask函数来生成一个形状为 [batch_size, trg_len, src_len] 的掩码矩阵,其中 trg_len 是目标序列的最大长度,在这个例子中为4;src_len 是源序列的最大长度,同样为4。

计算过程示例:

对于每个批次中的目标序列位置,我们会检查它试图关注的源序列位置是否有填充(值为0)。如果有,就在掩码的对应位置标记为1(代表需要被mask掉),否则标记为0(表示可以正常参与注意力计算)。

掩码矩阵将会是这样的(这里我用1代表需要mask的位置,0则不需要mask):

[
  [[0, 0, 0, 1],   # 对于批次1的目标序列的第一个位置,源序列没有填充,所以前三项为0,最后一项因为是填充,所以为1
   [0, 0, 0, 1],   # 同理,第二个位置也是如此
   [0, 0, 0, 1],   # 第三个位置
   [0, 0, 0, 1]],  # 第四个位置(虽然是填充,但这个位置的掩码不影响,因为我们不从填充位置获取信息)

  [[0, 0, 0, 1],   # 批次2的第一个位置
   [0, 0, 0, 1],   # 批次2的第二个位置
   [0, 0, 1, 1],   # 批次2的第三个位置开始有填充,注意目标序列的填充并不影响此掩码
   [0, 0, 1, 1]]  # 批次2的第四个位置
]

在实际应用中,这个掩码会在计算注意力分数时应用,任何对应于1的位置的分数都会被设为极小值或直接在softmax之前设为0,从而这些位置不会获得任何注意力权重,达到了排除填充部分信息的目的。



class Transformer(nn.Cell):
    def __init__(self, encoder, decoder):
        super().__init__()
        self.encoder = encoder
        self.decoder = decoder
        
    def construct(self, enc_inputs, dec_inputs, src_pad_idx, trg_pad_idx):
        """
        enc_inputs: [batch_size, src_len]
        dec_inputs: [batch_size, trg_len]
        """
        # encoder,输出表示源序列信息tensor
        # enc_ouputs: [batch_size, src_len, d_model]
        enc_outputs, enc_self_attns = self.encoder(enc_inputs, src_pad_idx)

        # decoder
        # de_outputs: [batch_size, trg_len, trg_vocab_size]
        dec_outputs, dec_self_attns, dec_enc_attns = self.decoder(dec_inputs, enc_inputs, enc_outputs, src_pad_idx, trg_pad_idx)

        # decoder logits
        # dec_logits: [batch_size * trg_len, trg_vocab_size]
        dec_logits = dec_outputs.view((-1, dec_outputs.shape[-1]))
        print("shape:",dec_logits.shape)  ###输出的其中一个是输出的目标最大长度trg_vocab_size

        return dec_logits, enc_self_attns, dec_self_attns, dec_enc_attns
        

在定义的Transformer类中,src_pad_idxtrg_pad_idx参数扮演着关键角色,它们分别代表了源语言(source language)词汇表中的填充索引(padding index)和目标语言(target language)词汇表中的填充索引。在处理序列数据,特别是自然语言处理任务时,由于输入序列长度往往不一致,为了方便进行批量处理,通常会对较短的序列进行填充,使得所有序列达到一个固定的最大长度。填充的索引就需要用到src_pad_idxtrg_pad_idx来表示这些填充的位置。

src_pad_idx

  • 作用:在编码器(Encoder)中,src_pad_idx用来指示输入序列中哪些位置是填充的,而不是实际的单词或子词。这在计算自注意力(self-attention)和其他操作时非常重要,因为它允许模型在处理填充位置时采取特殊处理,比如在计算注意力权重时给予这些位置极低的分数,确保它们在模型学习过程中不会贡献有效信息,也不会干扰模型对实际内容的学习。

  • 使用场景:在调用encoder(enc_inputs, src_pad_idx)时,src_pad_idx会传递给编码器,用于在计算注意力时应用掩码(mask),忽略填充位置的影响。

trg_pad_idx

  • 作用:在解码器(Decoder)中,trg_pad_idx同样用于标记目标序列中的填充位置。在自注意力计算和编码器-解码器注意力计算中,它帮助模型区分真实的目标词汇和填充的索引,避免了对填充部分的错误学习或计算。

  • 使用场景:在decoder(dec_inputs, enc_inputs, enc_outputs, src_pad_idx, trg_pad_idx)中,trg_pad_idx不仅用于解码器自身的自注意力层,还会在计算编码器-解码器注意力时使用,确保解码过程遵循“因果”原则,即预测当前位置时不会看到未来的信息,同时也忽略了目标序列中的padding位置。

综合分析

在Transformer模型中,src_pad_idxtrg_pad_idx的引入,是为了在模型训练和推理过程中正确处理序列数据中的填充部分,避免它们对模型性能产生负面影响。通过在注意力机制中应用掩码,模型能够专注于有意义的输入信息,同时保持了计算效率和模型的泛化能力。

在Transformer模型中,src_pad_idxtrg_pad_idx的应用贯穿于处理诸如"Hello world"这样的英语句子翻译成目标语言(比如法语)的整个训练过程。下面以一个简化的例子来说明它们是如何工作的:

输入准备

假设我们有如下简单的数据准备过程:

  • 输入序列(源语言,英语):“Hello world”。
  • 目标序列(目标语言,假设为法语):“Bonjour le monde”。

进一步假设词汇表已建立,且每个单词映射到一个唯一的索引,同时设<PAD>为填充符号,其索引即为src_pad_idxtrg_pad_idx。为了简化,假设句子已按最大长度(本例中不需要,但实践中会)进行了填充,但实际上长度不够的句子会被填充到一个固定长度。

训练过程中的作用

编码器(Encoder)
  1. 输入处理:“Hello world”被编码成索引序列,例如[1, 2, 3](假设"Hello"->1, “world”->2, 无填充则无必要添加<PAD>)。
  2. 自注意力计算:在计算自注意力时,由于使用了src_pad_idx(假设为0),模型会为输入序列生成一个掩码矩阵,确保在计算注意力权重时,任何与<PAD>相关的注意力分数都会被抑制,即计算时不考虑填充位置的贡献。
解码器(Decoder)
  1. 输入处理:“Bonjour le monde”同样被转换成索引序列,如[4, 5, 6, 7]
  2. 自注意力与编码器-解码器注意力
    • 在解码器的自注意力层,trg_pad_idx确保在目标序列内部计算注意力时不考虑填充位置。
    • 编码器-解码器注意力计算时,不仅考虑了当前解码位置与编码器输出的注意力关系,而且通过使用src_pad_idxtrg_pad_idx确保不会错误地考虑来自源序列的填充信息或目标序列中未来的信息(通过下三角掩码实现)。

计算过程中的掩码应用实例

  • 自注意力掩码:在解码器的自注意力层,对于目标序列"Bonjour le monde",即使没有实际填充,掩码也会确保计算时遵循序列的时序性,即在预测"le"时只考虑"Bonjour"的信息,而不会考虑"monde"。
  • 编码器-解码器注意力掩码:此阶段,除了考虑目标词到源序列的依赖,还会确保在计算目标位置的注意力时,不会“看到”未来的目标词,同时忽略源序列中的填充。

通过这种方式,src_pad_idxtrg_pad_idx在Transformer模型的训练过程中扮演着确保模型有效学习、忽略无关填充信息的角色,从而提升了模型的训练效率和最终的翻译质量。

在Transformer模型的解码器部分,确实会使用掩码来确保预测下一个词时仅基于历史信息,这是通过“掩码未来信息”(也称为“因果”或“自回归”掩码)来实现的。下面,我将通过一个简化的示例来说明这一过程,以及当模型预测"le"这个词时的计算逻辑。

假设的训练数据

为了简化,我们继续使用之前的例子,但需要明确训练数据的表示形式。假设我们的目标语言词汇表的一部分及其对应的索引如下:

  • “Bonjour” -> 1
  • “le” -> 2
  • “monde” -> 3
  • “” -> 0 (解码器开始时使用的特殊标记)
  • 其他词汇…

训练过程中的一步

输入和目标序列
  • 源语言序列(编码器输入): “Hello world”,已转换为索引序列并经过编码器处理。
  • 目标语言序列(解码器训练目标): “ Bonjour le monde”
预测"le"的步骤
  1. 初始化:解码器开始时,输入是<START>标记,目标是预测出"Bonjour"。一旦"Bonjour"被预测,下一步是预测"le"。

  2. 解码器输入:此时解码器的输入实际上是上一时刻预测的词,即"Bonjour"(索引1)。因此,解码器的当前输入序列是[0, 1],其中0是<START>标记,1代表"Bonjour"。

  3. 自注意力掩码:解码器的第一个自注意力层使用了一个掩码,确保当前位置只能看到它左侧(历史)的位置。由于我们的序列只有两个元素(<START>和"Bonjour"),在这个阶段实际上没有应用到自注意力上的实际“未来”遮挡,因为并没有未来的信息可看。但这个机制为后续预测位置提供了理论基础。

  4. 编码器-解码器注意力:解码器还会关注编码器的输出来获取源语言序列的信息。这里,"Hello world"的编码信息与"Bonjour"的预测一起用于决定下一个词。但是,解释这一特定步骤的详细计算比较复杂,涉及加权求和、softmax函数和多头注意力机制。

  5. 预测“le”:基于上述信息的融合,模型更新其状态,并尝试预测下一个词。假设模型已经过训练,能理解上下文,它会输出预测概率分布,如[0.05, 0.90, 0.03, ...],其中第二个位置的高概率对应于词索引2,即"le"。模型选择概率最高的项作为预测词。

  6. 损失计算:模型预测的"le"(索引2)与实际的标签"le"(也是索引2)对比,如果预测正确,则这部分的损失较低;若预测错误,则调整模型参数以减小未来预测的误差。

总结

在预测"le"时,模型实际上依据了之前预测的词(这里是"Bonjour")、源语言序列的编码信息,以及解码器内部的状态更新,通过复杂的注意力机制和前馈神经网络计算,输出一个概率分布,选择最高概率的词作为预测结果。这个过程不断迭代,每次预测一个词,直到序列结束标记或者达到设定的最大长度。

在Transformer模型的训练过程中,确实会同时计算句子中多个位置的损失,但这并不直接等同于“同时计算多个位置字符的掩码”。Transformer模型使用自注意力机制,该机制自然地支持并行计算不同位置的注意力权重,但关于“掩码”的应用则是为了维持序列中的时序性,特别是对于解码器部分而言。

解码器中的掩码策略

  • 逐位(或逐token)预测: 在训练解码器时,尽管可以并行处理句子中的所有位置,但实际上模型是按顺序预测每个位置的词。这意味着在某一时刻,模型专注于预测当前位置的词,而不会因“未来”信息而受到污染。这是通过在自注意力层应用“掩码”来实现的,该掩码确保在计算当前位置的注意力分布时,模型只能看到当前位置及之前的所有位置。

  • 掩码的具体应用: 特别是在自注意力层,会使用一个名为“掩码矩阵”(通常称为“下三角矩阵”),它在当前token及其之前的token位置设置为1(允许注意力计算),在之后的位置设置为0(阻止使用未来信息)。这种操作确保了在预测序列中的第(i)个词时,模型只能访问(i-1)位置及之前的信息,符合语言模型的自回归特性。

并行计算与掩码结合

虽然掩码确保了序列化处理,但Transformer架构中的许多其他组件(如多头注意力、前馈网络层)是设计为可以并行执行的,特别是在现代硬件(如GPU)上,这大大加速了训练过程。例如,对于一个给定的时间步,所有位置的自注意力计算可以并行化,但每个位置的计算仍然遵守由掩码施加的限制。

实现细节

在实际的代码实现中(比如使用TensorFlow或PyTorch框架),会利用掩码来指导模型计算哪些部分的注意力。例如,在PyTorch的nn.Transformer模块中,当你传递掩码给forward方法时,它会自动应用到自注意力层,确保未来的token不被当前token“看见”。

综上所述,虽然模型在训练时可以并行处理句子中的多个位置以提高效率,但对每个位置的预测仍然是按照序列顺序进行,并且严格遵守由掩码实施的时间顺序约束。

在Transformer模型中,自注意力机制和掩码策略的结合,以及并行计算的实现,可以通过矩阵运算的形式来直观地理解。下面我将尽量简化并举例说明这一过程。

自注意力机制简述

自注意力机制的核心在于计算每个单词(或位置)的查询(Query)、键(Key)和值(Value)的注意力权重。对于一个序列,我们可以认为每个单词都通过嵌入得到一个向量表示,序列长度为(L),每个单词的嵌入维度为(d_k)(查询和键的维度相同),则可以得到查询矩阵(Q)、键矩阵(K)、值矩阵(V),它们的形状分别是((L, d_k)), ((L, d_k)), ((L, d_v))。

掩码的应用

掩码主要用于解码器,确保在计算注意力权重时遵循“因果”原则。掩码矩阵(M)是一个下三角矩阵,形状为((L, L)),对于位置(i)的单词,(M_{ij} = 1) 当且仅当 (j \leq i),否则 (M_{ij} = 0)。这意味着当计算位置(i)的单词的注意力时,只会考虑位置(i)及之前的位置。

计算过程的矩阵表示

  1. 查询与键的点积:首先计算所有位置的查询与所有位置的键之间的点积,得到一个注意力分数矩阵(S),其形状为((L, L)):
    [S = Q K^T]

  2. 应用掩码:将掩码矩阵(M)应用于(S),对那些违反时序性的位置赋予一个非常小的值(通常为负无穷大),以确保这些位置在后续的softmax操作中贡献为0:
    [S’ = S + (\text{large negative number}) \times (1 - M)]

  3. softmax:对掩码后的分数矩阵应用softmax函数,得到注意力权重矩阵(A):
    [A = \text{softmax}(S’)]

  4. 加权求和得到输出:将注意力权重矩阵与值矩阵做点积,得到每个位置的输出表示:
    [Z = A V]

并行计算的体现

在现代硬件(如GPU)上,上述步骤中的矩阵运算(如点积、softmax、加权求和)可以高度并行化。对于一个给定的时间步(或批次内的所有序列),尽管每个位置的计算都遵循掩码的限制,但所有位置的计算可以同时进行。这意味着对于(L)个位置,计算(Q K^T)、应用掩码、计算softmax以及最后的(AV)都可以并行执行,大大加速了整个计算过程。

示例矩阵

假设序列长度(L=3),简化矩阵表示如下:

  • 假设查询矩阵(Q=\begin{bmatrix} q_{1} & q_{2} & q_{3} \end{bmatrix}),键矩阵(K=\begin{bmatrix} k_{1} & k_{2} & k_{3} \end{bmatrix}),值矩阵(V=\begin{bmatrix} v_{1} & v_{2} & v_{3} \end{bmatrix})。
  • 掩码矩阵(M=\begin{bmatrix} 1 & 0 & 0 \ 1 & 1 & 0 \ 1 & 1 & 1 \end{bmatrix})。

通过上述步骤,可以高效并行地计算每个位置的注意力输出,同时确保模型遵循序列化的处理逻辑。

在标准的Transformer模型训练过程中,解码器的解码并不是一个字一个字逐步循环产生的,而是采用了并行计算的方式来处理序列中的所有位置,尽管它依然遵循自回归(Auto-regressive)的性质,即在预测每个词时只能依赖于它之前的词。这里的关键在于“教师强制”(Teacher Forcing)策略和掩码机制的使用。

教师强制策略

在训练阶段,解码器的每一个时间步实际上知道它应该预测的正确词(这是由“教师强制”提供的),而不是基于模型自己前一时间步的预测。也就是说,即使模型在训练时看似是一次预测一个词,但实际上每次迭代都会使用真实的下一个词作为输入,而非模型的预测,以加速收敛和稳定训练过程。这样,模型在每个时间步都能看到完整的、正确的序列历史信息。

掩码机制

解码器内部的自注意力层使用掩码来确保每个位置只能访问其之前位置的信息,这与循环神经网络(RNN)中的逐个生成不同,它是在并行计算框架下维持了序列的时序依赖。掩码通过在计算注意力得分时为未来位置设置为不可见(通常是通过设置极低的分数或直接在计算中排除),从而确保了模型在预测当前位置的输出时不会“偷看”未来的信息。

训练过程中的并行性

尽管解码器在逻辑上是自回归的,但由于现代深度学习框架(如TensorFlow、PyTorch)和硬件(尤其是GPU)的并行计算能力,对于一个批次中的所有样本,以及一个序列中的所有时间步,模型可以同时计算所有位置的输出。这意味着,对于一个批次内所有序列的同一时间步,模型可以并行地进行注意力计算、前馈网络的处理等,然后再移动到下一个时间步,这大大提高了训练效率。

总结

在训练时,解码器的工作方式并非像传统的循环结构那样逐一位置生成,而是通过教师强制策略和掩码机制在保持序列时序性的同时,利用并行计算的优势。每个批次内的所有序列、每个序列中的所有时间步可以同时处理,提高了训练速度,但逻辑上仍然遵循自回归原则,确保模型学习到合理的序列生成策略。


通过Transformer实现文本机器翻译

全流程

  • 数据预处理: 将图像、文本等数据处理为可以计算的Tensor
  • 模型构建: 使用框架API, 搭建模型
  • 模型训练: 定义模型训练逻辑, 遍历训练集进行训练
  • 模型评估: 使用训练好的模型, 在测试集评估效果
  • 模型推理: 将训练好的模型部署, 输入新数据获得预测结果

数据准备

我们本次使用的数据集为Multi30K数据集,它是一个大规模的图像-文本数据集,包含30K+图片,每张图片对应两类不同的文本描述:

  • 英语描述,及对应的德语翻译;
  • 五个独立的、非翻译而来的英语和德语描述,描述中包含的细节并不相同;

因其收集的不同语言对于图片的描述相互独立,所以训练出的模型可以更好地适用于有噪声的多模态内容。

multi30k
> 图片来源:Elliott, D., Frank, S., Sima’an, K., & Specia, L. (2016). Multi30K: Multilingual English-German Image Descriptions. CoRR, 1605.00459.

在本次文本翻译任务中,德语是源语言(source languag),英语是目标语言(target language)。

数据下载模块

使用download进行数据下载,并将tar.gz文件解压到指定文件夹。

# from torchtext.datasets import multi30k

# multi30k.URL["train"] = "https://raw.githubusercontent.com/neychev/small_DL_repo/master/datasets/Multi30k/training.tar.gz"
# multi30k.URL["valid"] = "https://raw.githubusercontent.com/neychev/small_DL_repo/master/datasets/Multi30k/validation.tar.gz"
# multi30k.URL["test"] = "https://raw.githubusercontent.com/neychev/small_DL_repo/master/datasets/Multi30k/mmt16_task1_test.tar.gz"

# multi30k.MD5["train"] = "20140d013d05dd9a72dfde46478663ba05737ce983f478f960c1123c6671be5e"
# multi30k.MD5["valid"] = "a7aa20e9ebd5ba5adce7909498b94410996040857154dab029851af3a866da8c"
# multi30k.MD5["test"] = "6d1ca1dba99e2c5dd54cae1226ff11c2551e6ce63527ebb072a1f70f72a5cd36"

# https://discuss.pytorch.org/
#train_path '/home/nginx/.mindspore_examples/train'
#!tar -xzvf *.gz
from download import download
from pathlib import Path
from tqdm import tqdm
import os

# # 训练、验证、测试数据集下载地址
# urls = {
#     'train': 'https://raw.githubusercontent.com/neychev/small_DL_repo/master/datasets/Multi30k/training.tar.gz',
#     'valid': 'https://raw.githubusercontent.com/neychev/small_DL_repo/master/datasets/Multi30k/validation.tar.gz',
#     'test': 'https://raw.githubusercontent.com/neychev/small_DL_repo/master/datasets/Multi30k/mmt16_task1_test.tar.gz'
# }

# # 指定保存路径为 `home_path/.mindspore_examples`
# cache_dir = Path.home() / '.mindspore_examples'

# train_path = download(urls['train'], os.path.join(cache_dir, 'train'), kind='tar.gz')
# valid_path = download(urls['valid'], os.path.join(cache_dir, 'valid'), kind='tar.gz')
# test_path = download(urls['test'], os.path.join(cache_dir, 'test'), kind='tar.gz')
train_path ="/home/nginx/work/data/train"
valid_path ="/home/nginx/work/data/valid"
test_path ="/home/nginx/work/data/test"

##tar -xzvf *.gz
#test_dataset = Multi30K(test_path)  ###test 有问题 ###重新复制保存一份就行 编码错误

test_path
'/home/nginx/work/data/test'
# from download import download
# from pathlib import Path
# from tqdm import tqdm
# import os

# # 训练、验证、测试数据集下载地址
# urls = {
#     'train': 'http://www.quest.dcs.shef.ac.uk/wmt16_files_mmt/training.tar.gz',
#     'valid': 'http://www.quest.dcs.shef.ac.uk/wmt16_files_mmt/validation.tar.gz',
#     'test': 'http://www.quest.dcs.shef.ac.uk/wmt17_files_mmt/mmt_task1_test2016.tar.gz'
# }

# # 指定保存路径为 `home_path/.mindspore_examples`
# cache_dir = Path.home() / '.mindspore_examples'

# train_path = download(urls['train'], os.path.join(cache_dir, 'train'), kind='tar.gz')
# valid_path = download(urls['valid'], os.path.join(cache_dir, 'valid'), kind='tar.gz')
# test_path = download(urls['test'], os.path.join(cache_dir, 'test'), kind='tar.gz')
##test.en 
A man in an orange hat starring at something.
A Boston Terrier is running on lush green grass in front of a white fence.
A girl in karate uniform breaking a stick with a front kick.
Five people wearing winter jackets and helmets stand in the snow, with snowmobiles in the background.
People are fixing the roof of a house.
A man in light colored clothing photographs a group of men wearing dark suits and hats standing around a woman dressed in a strapless gown.
A group of people standing in front of an igloo.
A boy in a red uniform is attempting to avoid getting out at home plate, while the catcher in the blue uniform is attempting to catch him.
A guy works on a building.
A man in a vest is sitting in a chair and holding magazines.
A mother and her young song enjoying a beautiful day outside.
Men playing volleyball, with one player missing the ball but hands still in the air.
A woman holding a bowl of food in a kitchen.
Man sitting using tool at a table in his home.
Three people sit in a cave.
A girl in a jean dress is walking along a raised balance beam.
A blond holding hands with a guy in the sand.
A woman in a gray sweater and black baseball cap is standing in line at a shop.
The person in the striped shirt is mountain climbing.
Two men pretend to be statutes while women look on.
People standing outside of a building.
A teenager plays her trumpet on the field at a game.
A woman does a somersault on a trampoline on the beach.
A man is standing by a group of video games in a bar.
A woman uses a drill while another man takes her picture.
A woman in a pink sweater and an apron, cleaning a table with a sponge.
A man cutting branches of trees.
Group of Asian boys wait for meat to cook over barbecue.
Women, wearing traditional clothing, are reenacting native life.
One man holds another man's head down and prepares to punch him in the face.
Six people ride mountain bikes through a jungle environment.
2 blond girls are sitting on a ledge in a crowded plaza.
A child is splashing in the water
Three people sit at a picnic table outside of a building painted like a union jack.
3 boys are standing on a pier in their bathing suits.
An employee is handing a woman a bag while she is browsing through fish on ice at a street market.
A pretty woman plays a harpsichord.
Outside a building, a uniformed security guard looks at the camera from behind a fence.
The young lady is looking at the pizza.
A shirtless man in shorts is fishing while standing on some rocks.
A girl wearing a life vest floats in water.
A man in uniform and a man in a blue shirt are standing in front of a truck.
People sit inside a train.
A kid swings with his feet up in the air in a forest.
A man in a red shirt entering an establishment.
Two men wearing swim trunks jump in the air at a moderately populated beach.
A toddler is cooking with another person.
A father-figure and two children outside their home doing yard work such as using a hoe on the grass and planting a tree.
A man cooking food on the stove.
A man in jeans at the beach playing with a red ball.
People walking down sidewalk next to a line of stores.
A wakeboarder performs a flip while being towed at high speed.
A large group of people fill a street.
A man on a tag line going into the water.
A woman in jeans walks by a bus with an ad depicting a woman peering over her sunglasses.
A man in a pink shirt is sitting in the grass and a ball is in the air.
A car parked at the beach.
Two men wearing black in a city
The man in the yellow pants is raising his arms.
Two men wearing hats and using walking sticks are walking near a body of water during sundown.
A cheerleading team doing a routine on chairs.
A boy is playing checkers with an adult shown off-screen while a girl looks on.
A crowd of people out for some fun in public park.
A man sits on a bench holding his dog and looking at the water.
A boy and his younger brother playing together at the playground.
A woman in blue looks in a black leather bag while sitting on a bench during a sunny afternoon while people and limousines passed behind her.
The brown dog is standing on the sandy beach.
A woman is sitting with a basket of cloth, surrounded by cloth.
A man is grilling out in his backyard.
A woman sings in a club with a guitarist behind her.
Guitar player performs at a nightclub red guitar.
A child sitting on a lawn chair looking up at the camera
Two ladies and three men looking at the ocean.
A female performer with a violin plays on a street while a woman with a blue guitar looks on.
A young girl swimming in a pool
Several children are outdoors getting ready to play tug-of-war.
Three teenagers in a subway playing around.
A brown dog walks in the grass with its tongue hanging out.
People sitting in the grass outside a building, taking a break.
Shirtless guy staring off in the distance while three woman are walking past a crowd sitting outside a cafe.
Two young boys putting fruit on the bike.
A man in a black t-shirt, cap and jeans is playing drums on an upside down yellow pail.
A young female artists paints an image of a woman on a wall.
Two female members of team USA performing a jump high-five surrounded by two other female members.
A man stirring a pot of liquid in this kitchen.
The boy is wakeboarding on the lake.
A man is working a hotdog stand.
A large group of people of various ages and genders sit outside together.
A blond-haired woman is pouring drinks at a bar.
A small child wearing a blue and white t-shirt happily holding a yellow plastic alligator.
A woman with pink hair dressed in black talks to a man.
The man in a Japanese cooking suit is preparing a meal for two people.
A girl hops across the river, from rock to rock.
A male worker with his tool box is kneeling next to two women.
An older man is opening his arms wide and looking perplexed.
A child in a white karate outfit practicing a move
Three men in same colored vests are in the outdoors.
A woman takes a picture of a baby wearing a pink hat while a man carries her.
A group of mostly asian children sitting at cubicles in blue chairs.
A young boy in a soccer uniform crying into his palms.
A happy woman is preparing a refreshment at a coffee shop.
A construction worker is driving heavy equipment at a work site.
A woman runs after making a hit in women's softball, the catcher rises to her feet.
A man in a work uniform passing a tool to another person.
A group of people are climbing in cold weather.
A mountaineer about to descend down a mountain with a blue helmet on.
A man doing handstand on top of a round statue.
A child sitting at a restaurant table holding a paper mask against his face.
A brown dog wades into a lake to retrieve a stick.
A mother teaches her two young boys to fish off of a rocky coast into very blue water.
A little kid is walking next to red banners.
A girl sits on a decorated bike with a younger boy while another girl takes a picture.
A black dog is retrieving a ball in water.
A man in white pants and a blue shirt is kicking a yellow boxing bag.
Two Indian men participating in a ceremony.
A boy with a bruised nose and writing on his hands is standing in a video rental store.
Two silhouetted people paddle a canoe on the ocean during sunset.
People are standing on a crowded subway, and the platform outside is visible through the window.
Man scaling wall with fire in hand
Two brown dogs are running through the snow.
On stage photo of small band performing for theater audience.
A baby in a Christmas outfit looks at the camera.
A man is sitting next to a computer monitor.
This lady has heard a funny joke and laughing.
People inside of a building, one is taking a photo.
Four white dogs with muzzles jump over a red wall.
The woman with the blue shirt is holding a baby.
Two people are sitting fishing on striped beach chairs in a body of water.
An old woman working at a loom making cloth.
A boy standing in the foreground looking out over other people in a court.
A man in a blue coat grabbing a young boy's shoulder.
Three brown dogs are jumping up at the woman wearing blue.
A boy hangs out of a passing taxi cab window
A man in a gray shirt jumps over the top of a sand dune in the desert.
A child wearing a yellow shirt is jumping up and down.
A worker in a yellow jacket is hoisted up high to work on a building.
A man in Brazil giving an informal talk to young adults.
A bunch of beer pull tabs at a bar with Christmas lights on the ceiling.
A man is abseiling down a cliff over the ocean.
A man in black is walking to his truck in the snow.
A fox terrier leaps after a ball.
A female police officer in a cap and navy uniform smiles while wearing sunglasses outside of a shop.
A Family going for a walk in a park.
A man in a green hard hat and yellow safety vest frowns.
Child with pink strings on head dancing surrounded by confetti, balloons.
A dog with a snub nose smells for something on a riverbank.
A man prepares his local stand for the days business.
A man in a red shirt is about to eat a taco.
A young lady in white holding a tennis racket
A boy wearing a red shirt digs into the sand with a yellow shovel.
An individual wearing rose jacket site idle on a wooden bench.
A man wearing a white shirt is looking out a window of a metal construction.
A woman is holding a small white statue.
Six shirtless children are playing in natural water and splashing around.
Two people riding bikes through a mountainous region.
A girl jumping rope on a sidewalk near a parking garage.
A man wearing an orange shirt and helmet.
A small boy plays with plastic blocks, cars, and animals with an adult watching closely.
A little girl opening a Christmas present.
The woman in blue is operating a camera in front of two other women.
A little girl tries taking a nap on the comfy sofa.
A brown and black dog running on a trail in the woods.
Two dogs play by a tree.
A navy walking wearing a black coat and pants on the stairs as camera focuses on the dog
Two men dressed in green are preparing food in a restaurant.
A man dressed in black leather and a cowboy hat is walking around a Renaissance Festival.
A dog runs outside with a yellow toy.
A dog wearing a cover runs in the snow.
A family is playing on the beach with their dog.
A woman and a child embrace while the child tastes what they have been making.
Two men and a lady are standing outside.
A group of men using logs to push a boat out of the water.
A man drinks from a wineglass while reading the paper.
A man wearing a all black and playing a piano.
A young boy wearing a blue jersey and yellow shorts is playing soccer.
A man is standing on a stone structure with his arms out like a bird.
A dog drinks water outside on the grass.
Two women wearing tank tops are looking at the camera.
A man is sitting in a barber's chair getting ready for a shave.
A young child wearing green boots playing in a mud puddle
A man using a chainsaw to cut lumber.
A man sitting at a picnic table with a tray and partially consumed beer in front of him.
The boy wearing a black shirt and blue jeans is holding a red baseball bat.
A dark-haired bearded man in glasses and a Hawaiian shirt is sitting on the grass.
Dogs run at a dog racetrack.
A light technician man with tribal tattoos aiming a spotlight over a balcony.
Two German sheperds snarling at each other.
This is a group of people standing around at some sort of event.
A brown and white dog fetching a toy.
Man with white hair playing an accordion in the middle of some buildings.
A woman with brown hair sitting on a bench outside a cafe.
A man next to a bicycle is playing a pan flute.
Two kids are balancing on a log and holding a rope.
A man riding a motorcycle is performing a trick at a track.
A young woman with a purple cloth hiding her face relaxes on a wooden deck.
The woman in the brown shirt is sitting on a bright red bench.
A dog walks on a log across a small river.
A young man wearing a white t-shirt and green and black shorts standing on a stump.
The group of people are all covered by umbrellas.
A man advertises with a giant sign tied onto his bicycle.
A man is throwing a log into a waterway while two dogs watch.
Group of elders playing instruments under a tent by the water.
A view of a crowded city street.
A young blond woman holds a white rope on a sunny day.
Two people in blue shirts are outside with a bullhorn.
A black dog springs up into a pool.
A cowboy riding on the back of a bronco in a competition.
A railroad work crew performs maintenance on railroad tracks.
A worker in an orange vest is using a shovel.
Two construction workers have a discussion while on the work site.
Three men are walking up hill.
An Asian woman in a floral wedding dress poses on a bridge close to her bridesmaids.
A young man tunes his guitar in the kitchen.
Three boys are playing with sponges and buckets of water.
Three construction workers are mending pavement.
People chilling in at forest next to canoes.
A choir group is gathered together in a church.
A group of young teenagers are jumping at night making funny poses for the camera.
Two guys are kayaking, one orange one blue, down a creek.
Two workers spread cement onto a brick building.
A lady wearing a redish sweater and jeans is sitting with hands on her left knee
Two performers putting on a mock fight for an audience that is watching attentively.
A GI relaxes and waits at an airport.
A man in a yellow coat tends a fire, a boy in a parka watches.
A man and a boy on a rocky beach.
A woman on a boat named "El Corazon" drops black weights into the water.
A boy sitting on and looking out from a microscope.
A young barefoot girl in a pink dress is jumping outside.
Many people are sitting around a tent outside.
A youth with a black shirt that says "Asian Pacific 2007" plays a drum while sitting.
A man selling items near the roadside to the great mountain of Canyon.
The girl in yellow is laughing at the girl wearing orange whilst being watched by the girl in blue.
A dog jumps over an obstacle outside.
Dog with black collar rolling in dirt and dried leaves
Two brown dogs playing in a rough manner.
A man with a mustache and beard is holding a frying pan that has flames rising from it.
A man, wearing revolutionary period clothes, is ringing a bell.
A man in a black shirt fishing on a rocky shore.
Two dogs are nuzzling each other nose to nose.
Two men stop to chat on the sidewalk as a car passes by.
A chinese man sitting down waiting for customers.
Parked cars with a school bus behind them.
Two woman wearing similar shirts walk to the left.
A young child wearing an orange life vest holding an oar paddling a blue kayak in a body of water.
People walking on a trail in a tree filled park.
Three young adults talk in a crowd of people, the woman looks upset.
Woman and child outside the front door of their scenic home.
A black man and his two white friends are putting their heads close together.
A girl wearing camouflage pants sits on top of a Hummer.
A light brown dog is running up.
A boy poses with a large green insect on his nose.
A bald man demonstarting how high his brown and black dog can jump.
A crowd on a busy daytime street.
A muzzled greyhound dog wearing yellow and black is running on the track.
A man wearing sandals sits on the sidewalk near some bags.
A man and a woman are sitting on the base of fence having a conversation.
A kid is looking at coffee machines inside a store.
A man drinking out of a yellow cup around people at a busy event
A boy is leaning on a car with flowers on the hood.
A woman in a floral dress talks to children in front of a van.
A man on his wedding day.
A young woman with a black shirt and jeans sweeping.
Woman with a hat on climbing a cliff near a large body of water.
A big black poodle running on the grass with a toy in its mouth.
A boy in shorts doing a skateboard trick.
A little boy dressed in red pants is standing in the street.
A woman texts on her phone while surrounded by umbrellas.
Eight men play instruments on stage, with a guitarist highlighted in lights.
A man in an orange jumpsuit and matching hard hat is helping with a blue hose
A man and two girls show off a fish while holding fishing poles in front of a body of water.
Man in red shirt watches dog on an agility course.
A boy wearing red and white swimming trunks diving backwards in a beautiful pool.
An Asian woman pinning her hair back.
An older woman and a young child in a pink shirt playing with multicolored blocks.
A small black dog jumping over gates
A brown-haired man in a green shirt plays a trumpet outdoors.
A man talks on the phone with his feet up.
A group of children sit on a blue mat while they eat out of bowls.
A black boy is sitting in the sand.
A small dog watches two big dogs playing rough in a field.
People sitting in a circle outside a large building.
One dog leaps to catch a softball while another looks on.
A blond child swinging on a swing.
One man and two women having a discussion over white wine
An Asian man is cooking food outdoors.
A brown dog about to catch a green Frisbee.
Fans cheer as the band plays a song.
A young boy is standing next to a sand sculpture of a pyramid.
Three young children are walking through a grassy yard.
A man pounds on an artwork perched on a cart.
A man on a bicycle rides on a mountain.
A boy with blue and yellow rain boots runs on dirt.
A woman in an orange jacket sits on a bench.
A man doing a trick on skateboard
A man in a martial arts uniform in midair.
Woman selling bags of fruit on a sidewalk.
Two soccer teams are on the field.
A child in a blue shirt jumping off a bench.
A goalie in a yellow field is protecting the goal.
A group of young people take shots in a Mexican setting.
A young man skateboards off a pink railing.
A young boy jumping from a bunk bed on a smaller bed.
Two people wearing odd alien-like costumes, one blue and one purple, are standing in a road.
Man running wearing a blue shirt with a number taped to it.
An Asian factory worker posing for the camera.
A man that appears to be running in a marathon gives us 2 thumbs up.
Basketball players shoot for a goal during a game.
A football player wearing an orange uniform smiling and holding the football.
Two downhill skateboarders round a curve while others watch.
A team in white and gold on the sidelines of a football field.
A little girl is pushing her scooter through a grassy tree lined field.
Group of asian children dressed in white shirts and hats performing with a crowd looking on.
Pedestrians walking down the street look at a child in a cardboard box.
A brown dog runs down the sandy beach.
Two men in army uniforms stand next to a woman.
The Dali Lama during a reception where participants have brought carnations, parasols and prayer flags.
A biker jumps an obstacle.
A couple sitting in white lawn chairs are smiling at the camera.
Young kids are on a small train ride.
A surfer in a blue swimsuit is riding the waves.
The boy jumps onto his soccer player brother.
Two young men on opposing soccer teams are competing to get the ball on a soccer field.
People are walking on a paved slope surrounded by Chinese vendors.
A young boy wearing white pants is jumping off the couch.
A boy in an orange shirt is pouring Legos from a bag.
Woman wearing brown sandals and blue jeans, in a white shirt, holding a baby under a tall tree.
Three people smiling and holding political signs.
An officer stands next to a car on a city street.
Two men wearing hats.
A boy in midair trying to kick a soccer ball
A young boy with a blue beanie has his head down.
A red-haired man with dreadlocks is sitting playing and acoustic guitar.
A man eating a sandwich with his baby daughter in his lap.
An African American child is holding something up that those in the picture are proud of.
A woman directs a crowd of people with a loudspeaker.
Costumed onlookers watch as a uniformed policeman makes a speech and a man in a suit holds a bowl of fruit.
A crowd is present at a bar.
A girl in white and a girl in green walk past a blue car wash station.
A man is using electronic equipment.
A person surfing through a crashing wave in the ocean.
An army officer is inspecting something.
A bride and groom kiss under the bride's veil.
Riot police are standing in the background while a young man with a red scarf covering his face is walking.
A black and white dog jumping over a steeple vault at a competition
A woman wearing a sweater is reading a book in her home.
Several teenagers are looking over a railing in a dark room.
The man in the white t-shirt is starting to climb a rock.
A teenage boy is stretching in the kitchen and you can see part of his stomach.
People are holding various types of drumsticks above different kinds of drums.
Three farmers harvest rice out in a rice field.
Two women and a man are looking at a book.
Three children's legs are shown as they stand near a mess of silly string.
A cook is posing for a camera while cooking.
Many people in a street protesting the use of coal in power plants.
The teen jumps the hill with his bicycle.
A little girl running at on the shore of a beach.
White duck flapping its wings in the water.
Two males seem to be conversing while standing in front of a truck's back, and behind a metal item, while four people stand around them.
A woman in a pink skirt is holding a baby.
A hockey player in a yellow jersey is guarding the goal.
A man is walking past a large sign that says E.S.E. Electronics.
Three boys wearing green shirts and tan pants pose at the top of a slide.
A man is dancing with a dog between his legs.
The white dog is running in the shallow water.
Oregon percussionists are marching with the band.
A group of children play together in a fenced yard as an adult watches.
A group of women are playing musical instruments together.
A little girl in a purple plaid dress is lying on the floor crying.
A man with graying hair shaves his beard.
Two black dogs, a black puppy, and a white dog in the snow.
Man in a Miami basketball uniform jumping to make a shot.
A woman is sitting outside her house with a blue door, enjoying the air.
Kids are sitting on a man in a banana suit.
A gray and white dog jumping over standing water in the sand.
A crowd gathered around a park water fountain in the rain.
Several older men, some in traditional headdress convene on a street corner.
A young Lassie looking dog is in the snow.
The soccer player wearing the gold jersey is blocking the ball from the opposing team player.
A woman in a black shirt is knitting with purple yarn.
Four females of Asian descent are wearing golden dresses while performing point ballet.
A person is playing an unique instrument.
A girl wearing black athletic clothing with the number 1102 on her jersey runs across some grass.
A kid crosscountry skis wearing the number "93".
A older gentleman and a young girl begin to work on a puzzle together.
A film crew films a young African boy in a yellow shirt.
A streetlight lit bridge with a cyclist and some cars.
A man rides a kicking bull in a bullpen.
A boy jumping to hit a tennis ball with his racket
Kids scale a wall as two other people watch.
People walking about a university campus with palm trees in the background.
Little girl kicks black object at karate class.
Two men trying to hoist themselves up from the water on to a walkway made of tires.
Two men breakdancing, with a crowd looking on.
A professionally dressed woman standing at a podium debating or discussing something of importance.
A woman is laying down on a sofa laughing.
A dirt floor gets swept by one white and one black woman.
A deer jumps a fence.
Three dogs play with each other out in the field.
Two young children are on sand.
A smiling young boy plays in the leaves among the ducks.
These four people are standing outdoors, with 3 dogs.
While visiting the Mayan ruins, a guide points in the direction of more attractions.
Girl wearing radio t-shirt has open mouth
A tribal group filling water jugs in the desert.
A man standing on a city street.
A flock of birds fly away with food in their beaks.
Two men ride through farm land as they guide their mule powered trailer.
Two people stand at the peak of a mountain.
Young girl enjoying herself as she makes a snow angel.
Three guys smiling for camera and showing off their muscles.
A person is writing on a chalkboard in a empty classroom.
A man in a black shirt sitting at a table with an open Apple laptop in front of him.
Four people relaxing on a grassy hill overlooking a rocky valley.
A boy with a skateboard if jumping in the air along some railway tracks.
There is a man in an orange shirt playing tennis.
The dog with the red collar is bearing its teeth at the dog with the blue collar.
The boy is outside enjoying a summer day.
A worker in an orange work suit is kneeling down inspecting a piece of machinery.
Men in cowboy hats stand around at a rodeo.
There are two dogs in the snow and one has something in his mouth.
An employee takes a break from working to have a drink
A beige dog runs behind a white dog holding a yellow toy.
Hockey player in white uniform with stick
Man in a white shirt with a gold watch playing with a circuit board.
A black horse sticking its head through a fence trying to reach the grass.
A crackhead is pretending to keep his hands warm but actually he is smoking crack.
Two guys and a girl smiling.
A child leans over a display made up of blue and yellow plastic, while an adult looks on.
A black-and-white dog goes for a flattened ball on the snow.
A young girl standing next to a yellow cat on a kitchen countertop.
The two kids are playing at the playground.
A tennis player in a green striped shirt is holding his hand up to his mouth.
A boy in a red suit plays in the water.
A child wearing a red coat and cap is holding a large chunk of snow.
Two officers with orange jackets stand outside a white tent with onlookers.
Two people standing next to a tree on the ground.
Two men sit talking near a stone building.
A brunette child with glasses holding a blond child wearing a red sweater and yellow boots.
A black and white dog is playing with a white ball.
Two people are kissing on a sidewalk in front of a limo while people walk by.
A woman is playing volleyball.
Two large dogs are fighting in a dirt field.
A brown dog jumping over a hurdle.
A man wearing a striped shirt is smoking a cigarette on the street
A little girl is holding a little boy on her lap.
A man trying to ride a very mad bull on a beautiful Saturday afternoon.
Children fight to win a tug-of-war battle.
A cyclist is leaning a mountain bike around a bend on a dirt track.
Two people and a leashed cow at a home.
The young boy learns how to ride a bike with his dad.
Boy in red shirt and black shorts sweeps driveway.
An african family are standing in front of some makeshift houses.
A man playing an instrument next to a tree.
Two women are holding hands over a table and smiling at the camera.
A panting brown dog walking on the grass.
A baseball player in a black shirt just tagged a player in a white shirt.
A woman is holding a large check for Kids Food Basket.
The two dogs, one with a tennis ball in its mouth, are running through tall grass.
Two adults and two children sit on a park bench.
A woman in a grassy field blows on a dandelion.
A man sells potatoes to a group of people.
A group of people on a street gather together to listen to an accordion.
A man sits on a bench listing to his iPod
An old man on a subway wearing heavy layered clothing is reading a newspaper.
An older man in glasses is preparing meat.
A man performing a trick on a bicycle by standing on the pedals while the bike is upright.
A man is at the beach making a sand sculpture.
Multiple people in a park eating at a picnic table
Two women are strapped to a tree in some type of construction job.
A cowboy in a rodeo trying to beat the 8 second clock.
A dog is jumping through a fiery obstacle.
An overweight woman with long black hair in a pink shirt with a name tag is applying lipstick.
A man fixing a little girl's bicycle.
Two girls in puffy skirts are dancing in front of some musicians in the street.
The yellow dog is carrying a stick by water.
A girl in a sweater is blocking the suns rays.
A rock concert is taking place.
Three women in bright colors and headdresses are holding love message cards.
A brown dog is digging in the dirt.
Young boy in a white striped shirt and headband holding a tennis racket.
Two dogs running away from the camera in the woods.
A girl is playing in the fountain fully clothed.
Three young sumo wrestlers standing and listening to an announcer
Two male hikers inspect a log by the side of a forest path.
Three players bring a team opponent to the ground.
Two boys cross a city street while kicking a red soccer ball.
A man holding up another with his back.
White dog on mountainside turns to face something offstage, sky in background.
A boy riding a skateboard on a skateboarding ramp
A long-haired, male musician is playing on a piano.
Three athletes holding bouquets stand on the victory podium.
Two bald drag queens in red dresses
A young boy is hanging onto a clothing rack.
A little girl wearing pink is holding on to a bar.
A man in green jumps serveral motorbikes on his own motorbike.
A woman playing with two young boys at a park
Four people are playing soccer on a beach.
Two teenage girls hugging, one wearing a bicycle helmet, with cyclists in the background.
Two medium sized dogs run across the snow.
A woman is standing in a green field holding a white dog and pointing at a brown dog.
A table full of pictures in frames, at an outdoor market.
Two people sit at a table outside against a wall and make faces.
Two guys with nipple piercings are smiling.
A child is laying on a beige rug laughing.
A man and woman are locked arms sitting down and all dressed up.
Two woman are mud wrestling in a kiddie pool.
A guy in a white shirt is walking with a drink in his hand.
Two people are silhouetted against a lake reflecting a painted sky.
Several people sit at a table in formal clothing.
Two girls (one dressed in blue, and one dressed in pink) are racing one another on rollerskates.
The four people sit on a pile of rocks.
A group of people do tricks on motorbikes.
Bicyclist in racing gear rides through forest area.
A man in a green shirt is walking on the beach carrying his sneakers.
Several men standing around an antique race car
Two men work under the hood of a white race car.
Children jump off the edge into a pool.
A man on the edge of a wall about to fall off.
A woman in a striped outfit on a bike.
A girl dressed in black is posing for the camera.
Man in shorts standing by the water.
Four black men are sitting on the steps of a church.
A crane operates amidst piles of rubble.
A gymnast wearing red and white is mid-twirl on an uneven bar.
An older lady in a green sweater picks out vegetables.
Two men are crafting items in a workshop with tools.
A teacher in white and a little girl wearing a yellow dress playing with building block.
A young child sleeping in her bed with an open book on her chest.
A woman eating in the grass on a beautiful day.
A man walks down a cobblestone street next to buildings painted tan with red eaves.
A woman wearing a hat with making bread.
A solitary woman uses a large primitive mortar and pestle to crush plant material as she stands in a stubble field.
A man in a karate is performing in front of two judges.
A man in formal attire plays a piano on the sidewalk of a city street.
An elderly man sitting in a chair, eating some snacks.
A woman in a white shirt works behind the counter at a cafe.
A man with work clothes on standing on the back of a truck.
Two children looking at horses through a small fence.
A window with some type of design painted on it.
A woman wearing a bright pink overcoat makes a face to a woman wearing a purple overcoat while standing outside a Vitamin Shoppe.
A cowboy wrapping up his arm with a bandage.
A man in a yellow shirt and a man in a dark blue shirt talking.
Three Asian children sitting on a couch with tapestries hanging in the background.
A girl in a red shirt jumps up to hit a tennis ball.
A man posing the camera with green crane.
A man clinks bottles with another person while smiling in a restaurant.
A man is loading a box truck with lots of baked pretzels.
A man in a black jacket plays the guitar out in public.
A dance group performs in a parade in china.
A man stands on a rocky cliff overlooking a body of water.
Police officer watching woman exit from bus.
Two middle-aged police officers watch over a parking lot, at night.
Two men in blue shirts looking at a soccer game.
A group of men in blue uniforms are standing together.
A young lady doing yoga on the beach.
A large crowd of people are standing around in a park and a few are playing instruments.
A man with a balloon hat makes balloon animals.
A man grilling meat on an outdoor grilling pit.
Two men selling fruit at a fruit market.
Brunette woman in a white bikini pouring a drink into a man's cup.
Boy in sunglasses is running behind a fair.
A gloved hand holds what appears to be an oversize nail against a log.
A man in a plaid shirt shows off a black set of gloves.
Two men in white plastic chairs sitting in a doorway.
A young girl in a red dress is wearing a black cowboy hat.
Man in red and white soccer uniform stands on the field boundary lines with yellow and blue soccer ball.
People jump over a mountain crevasse on a rope.
People look on as participants in a marathon pass by.
People on laptops in front pf a large window.
A disc jockey busy at work as lights shine upon him.
A man wearing gloves carries corn through a field.
A photo is taken of a mirror reflection of a cafe.
A muslim woman holding balloons at an islamic event
A woman sits in a caged in area with a cat and two bunnies.
A woman sitting against a brick wall inside a building.
Three young women face each other while sitting on red plush chairs.
A woman in a blue shirt walking in a village.
Six children, sitting on a step with notepads and crayons.
A tan dog playing with a stick on the shore.
Two dogs playfully bite a third dog, which has its tongue sticking out.
A child is on a motorcycle smiling.
6 people are gathered around to eat a big dinner.
Santa Claus being photographed at a holiday media event.
Military Families are marching through New York on a rainy day.
A woman in a blue helmet and red pants riding a motorcycle.
Several men are wearing martial arts uniforms while they perform some moves in unison.
A young lady and man dressed in warriors costume wielding sticks with a group of people in the background.
A man in a uniform walking on a street with two cars and a tree.
Young woman climbing rock face
An elderly man in a light blue coat works on a car on the roadside.
People looking over several colored pieces of paper spread on a table.
A man sings and plays the guitar into a microphone.
Two men sitting in a restaurant.
Two women in shorts run down a beach along the water.
Construction workers having a discussion by the tracks.
A view of a pedestrian thoroughfare, featuring a man in a black apron and a white baseball cap standing in the middle of the image.
A group of people are playing on an object.
A little girl in a blue outfit is climbing on metal railings in the street.
A group of men sitting and talking behind some green fruit.
A guy with a yellow outfit on standing behind a microphone under a tent.
A brown dog with a purple Frisbee in its mouth.
It looks like a man practicing his martial arts moves near some muddy looking water.
A woman with a drink and a woman with a cellphone.
A child in a red coat waves a hand in the air while lying in snow beside a red plastic sled.
A woman sitting next to her purse watching dogs at the park.
Three men are standing on a stage, one is wearing clown makeup and holding a guitar.
A woman is processing plant fluid in a tribal village
The woman in the red dress is dancing with the man in a suit.
Two small dogs follow a larger dog with a tennis ball
A man with a bushy beard and a baseball cap sits on a park bench.
An African tribe is standing in their garden with the forest in the background.
A young girl is trying to brush a goat.
Asian people sitting at a restaurant with yellow chairs.
A baby girl eats a cookie while seated in a highchair and wearing a bib.
A gray-haired man wearing black gloves is moving the lawn.
A woman reads a book while sitting in a row of red chairs.
A child claps while riding on a woman's shoulders.
A family is walking on the sidewalk through the snow while a man sits on the side with his paper cup.
A cat sits on top of a store sign.
A man in a pink shirt and black jacket with headphones on.
A young man about to throw a football.
A guy and a girl going down a spiral walkway.
A woman with pink hair bent down on the sidewalk holding to pink dogs.
A male in a suit holding a beverage in a cup walking down the sidewalk, next to a city bus.
Man jumping with a rock formation in background.
A person in a red jacket with black pants holding rainbow ribbons.
A woman puts her arm on a person sitting in a wheelchair.
A man in a white apron is cooking something with eggs on a pan outside for a woman in a tan jacket.
A woman with a push-to-talk cellphone and headset waiting at a crosswalk.
A group of men walk down a city street.
A road next to an interesting place with lots of pillars.
A group of people in black standing on a dock nearby a long structure.
Man carrying a few cases of beer.
A middle-aged man is sitting down and playing the accordion.
Girl with green arm band, hair ties, and earrings stands outside.
A young girl in a pink shirt is on a beach running toward the ocean.
A skateboarder in a black t-shirt and jeans skating threw the city.
A man in a jacket is taking a photograph of a large building.
People on the sideline of a soccer match.
In this photo there is a family of four dashing across a busy street in the city.
A group of people walk down the street in the sun.
A street near a stoplight with several people including a man wearing a brown coat and sunglasses with his hand to his face.
Some plants are growing near the window.
This player with the blue helmet was at bat and just finished swinging at the ball during a team baseball game.
The woman in the gold coat hurries to catch the subway.
Some people sit on benches under rows of trees in front of a building.
A man in a suit is sitting at a bus stop.
An African American man surrounded by empty overturned white buckets and dark colored crates expresses himself through a message handwritten on cardboard.
A young brunette woman eating and drinking something.
A man in a suit and hat is playing the guitar on the street.
A woman in a red vest working at a computer.
People standing around incense, wafting the smoke into their faces.
A man using the bathroom mirror to tie his tie.
Music being played by several individuals while a happy crowd sits and listens.
Two young men riding on a very small horse-drawn wagon full of potatoes.
A woman in a dress walking down the street past a construction site.
A clerk in a convenience store asks a customer buying alcohol for his age and identification.
A man with sunglasses is operating a construction automobile and releasing gravel on to the ground.
A baby playing with her toys looking at a black and white cat.
A teenage girl is carrying a guitar in the woods.
A man wearing a backpack is walking down the street.
Two men are having a conversation in front of a souvenir shop in Rome.
A woman in black is holding something in her mouth.
A group of people sit outdoors around a small, short table.
A man riding his bike up the ramp.
A woman wearing a black tank top and a cross necklace stares off into the distance near sunset.
Three young girls are walking together down the sidewalk.
A woman with long hair is at a graduation ceremony.
A man is skateboarding on a road while another man watches from the sidewalk.
A man in a black leather coat is standing in front of a sign.
A male and female singing a song together outside.
A young girl with curly blond-hair and wearing a white top lies in the grass, holding a flower stem.
A young women's soccer team with green uniforms is performing a stretching exercise.
A woman acts out a dramatic scene in public behind yellow caution tape.
A man crouches while doing chores, as pigeons wander in the background.
A group of men standing on a field of black balls.
A busy day for citizens at a local city court.
A man with a cigarette in his mouth fixing a plate of food.
Two groups of swimmers wade out.
People sit on a bench in a city square with random objects including a lamp and a dressmakers form standing nearby.
The workers are surrounding a hole with a bucket.
A shirtless man in black shorts is standing on the rocky shore to a large body of water.
A guard is on the look out while on duty.
People playing pool, one is a man wearing a blue shirt and the others are women but their heads are not within the camera shot.
People are standing in front of a sculpture surrounded by water.
A woman looks on as a man with folded arms is talking.
Middle-aged man in white shorts and flip-flops looking up the road
Two men dressed in dark orange coverings and sandals stand near a large reflective sculpture.
Two people are spending good time in their boat.
A man and a woman are standing on the street in the city.
Firemen emerge from a subway station.
Four men, three of whom are wearing prayer caps, are sitting on a blue and olive green patterned mat.
This is a large group of people sitting outside on benches.
A man in a red shirt walks past a turquoise and white checkered food establishment called "32 De Neude."
Doctors performing some type of surgery.
An older man with a cigarette in his mouth and a ball cap inspects his camera.
Small orchestra playing with open violin case in front
A man with a red suit is dancing with a lady.
Two people look on in the nighttime at the lights in a city.
Two motocross bikers wearing full protective gear, with one in midair after a jump and the other looking down at his motorcycle.
Several men dressed in orange gather for an outdoor social event.
Two young girls run on a sidewalk outside of a brick building with banners on it.
Two individual climbing up a steep mountain.
A child is laying on the ground next to a stroller.
A dog begging to a man and a woman.
A lot of people at the market looking at various different things.
Two young men play electric guitars on stage.
A tattooed man pouring beer out of a bottle into a young man's mouth.
Two people standing outside next to blow up toys and dumpsters.
Four people are riding bicycles on a bike path near a busy street.
Woman in a pink shirt and wearing glasses.
A woman in a red shirt raising her arm to the passing crowd below.
A boy in white shorts is jumping into a lake or river.
A little girl is looking through a telescope at the beach.
Several construction workers with orange safety vests are digging into the ground.
A person in a hood is standing in front of a run down building.
Construction workers picketing against PM Construction Services.
A man riding a running horse with some other men doing the same behind him.
An African American man walking down the street.
Two nuns are posing for a picture.
A woman with neon headphones writes in a notebook.
A woman in a green-patterned shirt is talking on a cellphone.
A small African child carries a younger child on his back.
A group of people are sitting in chairs.
A person in a bandanna stands on the street in front his things.
An oriental person in a red shirt and black pants crouching over a purse on concrete.
A black dog and a brown dog with a ball.
A man with a black vest holding a model airplane
A man in a field with an airplane in view.
A man in a suit and tie and a woman with luggage join others in waiting in the London Underground.
A kid is walking down the sidewalk with a few American flags.
A black dog runs on green grass with a toy in his mouth.
An Oriental traveler awaits his turn at the currency exchange.
A dog turns on the grass to persue a flying ball.
A group of students sit and listen to the speaker.
People are driving scooters down the street at night.
A large gray sea deck and a guy on the bike.
A man in an orange shirt and a blond boy are riding with other people on a "Pullman" vehicle.
A young man and women near a large metal sculpture
A boat with red, white and blue sails docking at a pier.
A man wearing a black hat taking a photo in a busy street.
A man is standing on a busy street looking with his head tilted up.
A woman in black has a little girl in a yellow dress on her shoulders.
A group of people on the street setting up instruments.
A fallen dirt biker is aided by another.
Three people are walking up a mountain trail, while one woman is looking at her camera.
Several Asian men wearing black clothing in some kind of station.
A woman in a red skirt is walking on the street with graffiti in the background.
A rhythmic gymnast in a blue and pink outfit performs a ribbon routine.
People cooling off in a fountain, a woman in a white dress sits on the edge looking on.
A man sitting on a bench under a large tree.
Three men in red and white striped shirts, white pants, and black hats hold flags.
People are admiring a work of art.
Busy Asian mall with paper lanterns and shoppers.
These people are climbing the steps to go the mountain
A small child in a blue outfit is looking off at some trees in the distance.
People are looking at children's toys in a store.
A man with a hat is playing the drum in the street.
A boy stands with three girls.
A smiling man wearing a backpack holds his fists up in front of a boy in glasses.
Four men are outside looking down over the green bridge they are on.
A woman lounges on a towel in front of people enjoying the blue water.
An adult Australian Shepherd follows behind a running Australian Shepherd puppy.
Fall shoppers and bistro food lovers caught in the ebb and flow of the city.
The African American man protests against unlawful sex.
A policeman is on a bike waiting for the light to change.
A group of men are sitting around a table.
High class group of business people including older men have drinks in park.
Woman talking to friend while walking dog outside on a sunny day.
A young man wearing a gray and black shirt and a white headband
Two people are riding a motorcycle along with many other riders.
Two women in military uniform are standing with other soldiers in formation.
Three girls are smiling for a picture.
The lady wearing black rimmed glasses and a yellow sweater jacket looks confused as she sits on the tan covered bench.
A red-haired young man drinks from a water fountain shaped like a woman.
Two men and a woman are walking down a city street.
A middle-aged man with red-hair and glasses holding an infant.
A young boy in a red hat rides on a horse.
Two boys are playing on the sidewalk.
A little girl wearing a black swimming suit holding a shovel at a beach.
Old man wearing a hat and coat sleeping sitting up on a sofa.
Two boys are looking up at the sky and waving theirs arms and they are dressed in clothes to keep them warm.
A young couple sits on the sidewalk and relaxes together.
A youth wearing a shirt and tie crouching down and giving the peace sign.
Three people sitting at a table outside Bar Gelati Tabacchi.
A boy in a black shirt and red wristbands hanging upside down while other people look on.
A man walking in front of a colorful wall mural.
A young man walking with another young man glances back at three girls they just passed
A man trimming a palm tree inside a patio-type cafe'.
Five people walking up a set of stairs led by a woman in a pink shirt and brown skirt.
A group of people at an outdoor fruit market
Two boys eat their McDonalds lunch in an outdoor seating area surrounded by many other people.
A woman wearing a denim jacket walking along a sidewalk
A man driving a four wheeled vehicle with four passengers riding on the front and a man sitting sideways on the back.
A man in a teal shirt reads a newspaper.
A boy in a stroller is wearing a green shirt and holding a book.
Two children sit side by side while eating a treat.
People are riding bicycles in the street, and they are all wearing helmets.
Crowds of people are all riding bicycles.
A man seated on a platform with wheels is being pulled by a burrow.
A man on a bicycle pedals through an archway.
A colorfully dressed young man with visible skin lesions is sitting and smoking a cigarette.
Two men in suits under an umbrella and in front of graffiti.
An old skinny man wearing the dirty white shirt riding on a bicycle on the street
On horseback a man attempts to rope a young bull.
A cowboy is attempting to lasso a calf while riding a horse.
Two bicyclists with helmets on are riding past some empty country fields.
A man is leaning over and pulling something out of a bag.
A man in a motor cart rides by to witness the park area.
A person with tattoos is looking at a photo on a digital camera, or cellphone.
A man in a black shirt and jeans standing on the sidewalk looking at the camera.
A boy and girl standing together on the pavement as they look at an object.
Several people in blue scrubs and one in a skirt and black blouse.
A woman and a dog sit on a white bench near a beach.
Two women are walking in dirt outside a large building.
A group of men and a child in white shirts are standing in the road.
A woman wearing all black and carrying a black bag on sidewalk
Group of men sitting around a table having a conversation.
A mural on the side of a building.
An Asian man wearing gloves is working at a food stall.
Woman sitting at a table while working on her laptop computer.
A person is looking at the computer on a desk with a phone and a box.
A man sits in a chair watching people stroll by.
Two people wearing hats are standing in a field tending to a crop.
Some leaping over a high bar in Barcelona.
A man dressed in boots and a cowboy hat sits atop a horse that is jumping while spectators sit in the stands.
Two young girls are sitting on the street eating corn.
Three children in football uniforms of two different teams are playing football on a football field, while another player and an adult stand in the background.
A young child with a dirty face being held by an old woman.
A man with glasses looks at camera while another man in a blue shirt looks intently at something.
Two people sitting under a tree picking a green vegetable.
A young boy wearing a blue hat is looking through a telescope while another boy watches.
3 men cooking in a small kitchen.
A young girl wearing a gray snowsuit skiing on a snowy mountain.
A group of village women gathered in dance
A man and a woman are sorting through laundry with latex gloves on.
A young girl sitting on a wooden chair.
Two workers weld the bars of a fence near a busy suburban street.
A long-haired young man skateboarding on the rails on a cloudy day.
In a outdoor market two men shovel snow and slush out of the path.
A guy wearing a white shirt is playing a white guitar.
A young girl shows her friends how to use a disposable camera.
A little boy jumping off of a dock into a lake.
Lady with a green mask at the dentist and she just look very unhappy.
A man with an orange jacket and blue hat climbing a snowy mountain.
A little girl with blond-hair is playing and splashing in a mud puddle.
A child is riding a bike down an alleyway with graffiti in it.
A gymnast is being judged at en event.
People walking down the street with a street vendor.
Man clothed in a traditional dress like attire, while standing next to his mule who also seems to be clothed as well.
Two children are playing on a bicycle.
Two men on opposing teams are playing soccer in a field.
A man jumps and poses for photographers lying on the ground.
The girl is taking a drink from a water fountain.
The spelunker finds water during his trek.
A man in a lab coat is looking through a microscope.
A blond girl sleeps on a brown couch.
A man sweeps a sidewalk outside of a brick building during the day.
Three men are cooking in a kitchen.
A man on a scaffold in front of a house is smiling and posing for the photographer.
Two girls in shorts are holding hands at a pool.
Four Asian kids sit on a bench and wave and smile to the camera.
Children ride bikes in what appears to be an impoverished nation.
A young boy, wearing a chef's hat and apron, is cutting sausages in a kitchen.
This is a clown at an elementary school.
The smiling ship captain is holding the wheel of his wooden ship.
A yellow bulldozer working to move dirt.
A woman in a red shirt is riding an all white horse that is galloping along the trees.
A woman sitting on a very large rock smiling at the camera with trees in the background.
Three men wearing brightly colored costumes take to the streets with wigs and crazy sunglasses.
A girl plays in a small pool.
Two children, a boy in a yellow shirt and a girl in blue and white stripes, swinging.
A man throws a fishing net into the bay.
A man wearing a gray shirt, blue jeans and a neon green safety vest is standing on a railroad track with a white truck and a white building in the background.
Two construction workers are laying sheet metal across beams.
There is a band on stage with band members wearing hints of blue.
A rocker with his shirt off sings into a microphone while he plays the drums.
I see a man putting his items from the shopping cart, ready to be checked out.
The man with the cane is on a walk.
A woman wearing a white shirt works out on an elliptical machine.
A girl wearing a mask rides on a man's shoulders through a crowded sidewalk.
Two girls, one older and in black and one younger and in white, are performing the same ballet move in front of decorations made from balloons.
Several women are performing a dance in front of a building.
A bald man walking down a city sidewalk while talking on his cellphone.
A woman plays with finger puppets as a small child in a costume walks by.
A group of people watch young men play the drums using makeshift buckets as instruments.
A girl with normal and improvised safety gear rollerblades.
A small white car is on the train tracks and may or may not have been hit by the train behind it.
Two rockers are singing and playing on a dark stage.
A girl wearing a baseball cap, white t-shirt and blue shorts is standing in a rock-bottomed, forest-lined mountain stream.
Two men playing guitar in front of a large audience.
A number of people are dancing with their significant others in front of this huge house.
Woman and dog selling her wares on the old building steps outside.
A woman and two men, that are dressed professionally, are having a discussion.
A group of men in red and black jackets waits on motorcycles.
A guy dressed in a white uniform with a number 3 on it playing soccer.
A man is selling snacks at a sporting event.
Two males from the green team tackles the other members from black team for the ball in a game of rugby.
Kids compete to gain possession of the soccer ball.
A person in blue is the only person currently throwing their ball at a bowling alley.
Several football players on a field in action.
Young man sitting on a skateboard, holding a cellphone, and posing on the escalator.
A lady dressed in blue running a marathon.
This band is getting ready to perform in front of an audience at church.
# 8 for Iowa State stiff arms a Texas AM player attempting to tackle him.
Two male curling players are on ice sweeping the path in front of polished rock, a small crowd watches.
Men play soccer on a muddy field.
A basketball player in white squats while a player in red moves toward him.
People walk through an arch in an old-looking city.
Two race cars, one red and one blue, are driving side by side down a racetrack while being watched by several onlookers.
A football player in a white uniform is holding a football.
A very young boy stares ahead as he is biting onto a small object.
A woman and a child are walking down a street.
A hockey game is being played with lots of people watching it.
Three woman bouncing on balls in the grass.
An African-American boy wearing blue shorts, a black and red shirt, and white sneakers, is playing tennis.
A man and a woman in white shirts are hugging each other.
A man talking to a family unit holding some sort of probing device as they look on and smile to be polite.
Very young boy in a green shirt laying face down on a white bed.
An extreme cyclist stops to rest as the sun sets in the background.
A woman is skying in a snowy area wearing warm clothing.
Four girls and a lady learning how to do some crafts.
A man wearing black and white stripes is trying to stop a horse.
The gentleman is scanning the image that the woman in the blue shirt is providing him.
A woman with red-hair is neck deep in cloudy blue water.
Two young boys pose with a puppy for a family picture.
Four children practice karate while two adults watch.
A man lounges on a red sofa in a furniture showroom.
A group of people talking at tables.
Two horse racing jockeys, one in checkered blue and red and the other in orange and brown, are racing against a blurry background.
The red car is ahead of the two cars in the background.
A large bull targets a man, inches away, in a rodeo with his horns, while a rodeo clown runs to help.
A shirtless man walks toward a yellow kayak.
A boy at a gun range aims and shoots.
Two teams of boys playing football in the sand.
A child in blue and a child in white stand on a short concrete wall by a stream.
A woman draws a floral design on a clay pot.
People are walking down a busy street in a foreign country.
A right-handed pitcher for the Saints is throwing a pitch.
Two men, one in black and white and one in red, are playing beach volleyball.
A man is standing in a boat holding some netting.
A surfer who fell off his surfboard in the ocean while trying to ride a wave.
A technician preparing a sample in the lab.
Soccer players are jumping in the air to hit the ball with their heads.
Two boys play soccer against each other.
An elderly person is crossing a street with an umbrella in their hands.
A group of runners are running towards two identical skyscrapers.
A skateboarder rides up a concrete wall, nearly falling off as he tries a trick.
People playing a game in the pool.
A guy give a kiss to a guy also
A man signs an autograph in a young boy's book.
A young man in a blue shirt grinds a rail on a skateboard in an urban area.
An Asian man sits on the tracks with crates of peanuts.
A British gentleman, dressed in full military uniform, waving his hat with a background of people sitting back and looking out onto the waterway.
Two cars are driving on a racetrack.
A man in a black and white jersey is holding yellow ski poles and preparing to take off.
Two people are laying down and kissing on a grassy lawn.
A very young child in a denim baseball cap eats a green apple.
The football players are running to get the ball.
A man in a black jacket and checkered hat wearing black and white striped pants plays an electric guitar on a stage with a singer and another guitar player in the background.
A man is leaping over a barrier away from a bull.
A woman in a blue shirt and white shorts playing tennis.
A man is playing an interment in a concert
A man is carrying a large load of metal beams on his shoulder through a lumberyard.
Woman with camera is throwing a Frisbee for her brown dog to catch.
There is an outline of a male and female observing a bonfire or other large burning wooden object.
Two girls dipping their hands in a fountain as people walk by.
A wet, smiling child without a shirt poses with arms raised.
Two men, one wearing white and the other wearing blue, are wrestling.
A woman in a red bikini jumping to hit a ball while playing volleyball at a beach.
Orange striped kitten biting blond girl on the nose
A woman, wearing a yellow apron, is taking the lid off of a large pot.
Two children cross a small brook using a stone bridge.
Two African american females ride on a moped down a city street that appears to be in a well congested area of a large city area.
Two boys in front of a soda machine.
Bicycle rider wearing black, riding down a dirt trail in a mountain bike.
A lady with tattoos is taking a picture of a painting with her smartphone.
A woman in a mostly black outfit and white helmet riding a bike with blurred trees in the background.
A team of cyclists rounds a bend while nearby spectators cheer and take photographs.
Four football players in black are tackling the opposing team's player, shown in white, while it is raining.
A runner scrambles for yardage while being brought down by two tacklers.
The basketball player in the white uniform with the number 55 on it is guarding the player in the black uniform with the number 10 on it.
A man is talking on a cellphone outside.
Professional baseball players during the All Star game watch an opponent at bat.
Dirt biker makes a sloping turn in a forest during the fall.
3 basketball players vying for the ball and one in red jersey trying to take ball from guy in white jersey.
A boy grabs his leg as he jumps in the air.
Two children wearing striped sweaters and black pants tussle outdoors near a play set.
A man wearing sunglasses is riding a scooter.
A small boy wearing baseball regalia holds a bat behind his head with a baseball mounted in front of him.
Six men sit in a field of crops containing wooden crates.
A brown dog picks up a twig from a stone surface.
This is a man dressed in yellow holding the reign of a brown horse
A man in a white shirt and apron cuts up a bird.
A hispanic woman is using a outdoors wok to cook.
Marathon runners are racing on a city street, with other people standing around.
Asian woman wearing a sunhat while riding a bike.
Some children are outside playing in the dirt where two trees are.
An older man is playing a video arcade game.
A girl at the shore of a beach with a mountain in the distance.

  Cell In[32], line 2
    A man in an orange hat starring at something.
      ^
SyntaxError: invalid syntax
#test.de
Ein Mann mit einem orangefarbenen Hut, der etwas anstarrt.
Ein Boston Terrier l?uft über saftig-grünes Gras vor einem wei?en Zaun.
Ein M?dchen in einem Karateanzug bricht ein Brett mit einem Tritt.
Fünf Leute in Winterjacken und mit Helmen stehen im Schnee mit Schneemobilen im Hintergrund.
Leute Reparieren das Dach eines Hauses.
Ein hell gekleideter Mann fotografiert eine Gruppe von M?nnern in dunklen Anzügen und mit Hüten, die um eine Frau in einem tr?gerlosen Kleid herum stehen.
Eine Gruppe von Menschen steht vor einem Iglu.
Ein Junge in einem roten Trikot versucht, die Home Base zu erreichen, w?hrend der Catcher im blauen Trikot versucht, ihn zu fangen.
Ein Typ arbeitet an einem Geb?ude.
Ein Mann in einer Weste sitzt auf einem Stuhl und h?lt Magazine.
Eine Mutter und ihr kleiner Sohn genie?en einen sch?nen Tag im Freien.
M?nner, die Volleyball spielen, wobei ein Mann den Ball nicht trifft, w?hrend seine H?nde immer noch in der Luft sind.
Eine Frau, die in einer Küche eine Schale mit Essen h?lt.
Ein sitzender Mann, der an einem Tisch in seinem Haus mit einem Werkzeug arbeitet.
Drei Leute sitzen in einer H?hle.
Ein M?dchen in einem Jeanskleid l?uft über einen erh?hten Schwebebalken.
Eine Blondine h?lt mit einem Mann im Sand H?ndchen.
Eine Frau in einem Grauen Pulli und mit einer schwarzen Baseballmütze steht in einem Gesch?ft in der Schlange.
Die Person im gestreiften Shirt klettert auf einen Berg.
Zwei M?nner tun so als seien sie Statuen, w?hrend Frauen ihnen zusehen.
Leute, die vor einem Geb?ude stehen.
Eine Teenagerin spielt bei einem Spiel Trompete auf dem Feld.
Eine Frau macht einen Salto auf einem Trampolin am Strand.
Ein Mann steht bei einigen Spielautomaten in einer Bar.
Eine Frau verwendet eine Bohrmaschine w?hrend ein Mann sie fotografiert.
Eine Frau in einem pinken Pulli und einer Schürze putzt einen Tisch mit einem Schwamm.
Ein Mann schneidet ?ste von B?umen.
Eine Gruppe Asiatischer Jungen wartet am Grill darauf, dass Fleisch gar wird.
Frauen, die traditionelle Kleidung tragen, spielen das Leben Einheimischer nach.
Ein Mann drückt den Kopf eines anderen Mannes nach unten und will ihm ins Gesicht schlagen.
Sechs Leute fahren Mountainbikes durch eine Dschungellandschaft.
2 blonde M?dchen sitzen auf einem Absatz auf einem belebten Platz.
Ein Kind planscht im Wasser.
Drei Leute sitzen an einem Picknicktisch vor einem Geb?ude, das wie der Union Jack bemalt ist.
3 Jungen stehen in ihren Badehosen auf einem Pier.
Ein Angestellter reicht einer Frau auf einem Markt eine Tüte, w?hrend sie auf Eis gelegten Fisch begutachtet.
Eine sch?ne Frau spielt auf einer Harfe.
Vor einem Geb?ude sieht ein uniformierter Sicherheitsbeamter hinter einem Zaun in die Kamera.
Die junge Dame sieht auf die Pizza.
Ein Mann mit freiem Oberk?rper und Shorts steht auf ein paar Steinen und angelt.
Ein M?dchen in einer Rettungsweste treibt im Wasser.
Ein Mann in Uniform und ein Mann in einem blauen Hemd stehen vor einem Wagen.
Leute sitzen in einem Zug.
Ein Junge schaukelt mit den Fü?en in der Luft in einem Wald.
Ein Mann in einem roten Hemd betritt ein Etablissement.
Zwei M?nner in Badehosen springen auf einem m??ig belebten Strand in die Luft.
Ein kleines Kind kocht mit einer anderen Person.
Eine Vaterfigur und zwei Kinder machen vor ihrem Zuhause Gartenarbeit wie den Rasen mit einer Gartenhacke zu bearbeiten und einen Baum zu pflanzen.
Ein Mann bereitet am Herd Essen zu.
Ein Mann in Jeans spielt an einem Strand mit einem roten Ball.
Leute gehen auf einem Gehsteig neben einer Reihe von Gesch?ften.
Ein Wakeboarder macht einen Salto w?hrend er bei hoher Geschwindigkeit an einem Seil gezogen wird.
Eine gro?e Menschenmenge füllt eine Stra?e.
Ein Mann an einem Halteseil geht ins Wasser.
Eine Frau in Jeans l?uft vor einem Bus vorbei, auf dem eine Werbung eine Frau zeigt, die über den Rand ihrer Sonnenbrille blickt.
Ein Mann in einem pinken Hemd sitzt auf dem Gras und ein Ball ist in der Luft.
Ein am Strand geparktes Auto.
Zwei M?nner in Schwarz in einer Stadt
Der Mann in der gelben Hose hebt seine Arme.
Zwei M?nner mit Hüten und Spazierst?cken schlendern neben einem Gew?sser bei Sonnenuntergang.
Ein Cheerleaderteam macht eine übung auf Stühlen.
Ein Junge spielt mit einem Erwachsenen au?erhalb des Bildes Dame w?hrend ein M?dchen zusieht.
Eine Gruppe Menschen, die sich in einem ?ffentlichen Park amüsieren wollen.
Ein Mann sitzt auf einer Bank w?hrend er seinen Hund h?lt und aufs Wasser blickt.
Ein Junge und sein jüngerer Bruder spielen gemeinsam auf einem Spielplatz.
Ein blau gekleidete Frau sieht in eine schwarze Ledertasche w?hrend sie an einem sonnigen Nachmittag auf einer Bank sitzt und Menschen und Autos hinter ihr vorbeiziehen.
Der braune Hund steht auf dem Sandstrand.
Eine Frau Sitzt mit einem Korb voller Stoff, umgeben von Stoff.
Ein Mann grillt im Freien in seinem Hof.
Eine Frau singt in einem Klub mit einem Gitarristen hinter ihr.
Gitarristin spielt in einem Nachtklub auf einer roten Gitarre.
Ein Kind sitzt auf einem Gartenstuhl und sieht zur Kamera auf
Zwei Frauen und drei M?nner blicken auf den Ozean.
Eine Musikantin mit einer Violine spielt auf der Stra?e w?hrend eine Frau mit einer blauen Gitarre zusieht.
Ein junges M?dchen schwimmt in einem Pool
Mehrere Kinder sind im Freien und bereiten sich auf Tauziehen vor.
Drei Teenager in einer U-Bahn albern herum.
Ein brauner Hund l?uft durchs Gras und seine Zunge h?ngt heraus.
Leute sitzen vor einem Geb?ude im Gras und machen Pause.
Mann ohne Hemd starrt vor einem Café in die Ferne w?hrend drei Frauen an einer Menschenmenge vorbeigehen.
Zwei Jungen packen Obst auf das Fahrrad.
Ein Mann in einem schwarzen T-Shirt spielt Trommel auf einem umgedrehten gelben Kübel.
Eine junge Künstlerin malt ein Bild einer Frau auf eine Wand.
Zwei Spielerinnen der US-Nationalmannschaft klatschen im Sprung ab, umgeben von zwei weiteren Spielerinnen.
Ein Mann rührt in einem Topf in seiner Küche.
Ein Junge beim Wakeboarden auf dem See.
Ein Mann arbeitet an einem Hotdog-Stand.
Eine gro?e Gruppe von Menschen unterschiedlichen Alters und Geschlechts sitzt gemeinsam im Freien.
Eine blonde Frau schenkt an einer Bar Getr?nke ein.
Ein kleines Kind in einem blau-wei?en T-Shirt h?lt glücklich einen gelben Plastik-Alligator.
Eine schwarz gekleidete Frau mit rosa Haaren spricht mit einem Mann.
Der Mann im japanischen Kochgewand bereitet ein Essen für zwei Personen zu.
Ein M?dchen springt von Fels zu Fels über den Bach.
Ein Arbeiter mit Werkzeugkiste kniet neben zwei Frauen.
Ein ?lterer Mann breitet seine Arme aus und blickt verblüfft.
Ein Kind in einem wei?en Karateanzug übt eine Bewegung.
Drei M?nner in gleichfarbigen Westen halten sich im Freien auf.
Eine Frau macht ein Bild von einem Baby mit rosa Mütze, das von einem Mann getragen wird.
Eine Gruppe überwiegend asiatischer Kinder sitzt in Arbeitsnischen verteilt auf blauen Stühlen.
Ein kleiner Junge im Fu?balldress h?lt die H?nde vors Gesicht und weint.
Eine glückliche Frau bereitet in einem Coffee-Shop eine Erfrischung zu.
Ein Bauarbeiter bewegt schweres Ger?t auf einer Baustelle.
Eine Frau l?uft beim Softball nach einem erfolgreichen Schlag los w?hrend die F?ngerin sich erhebt.
Ein Mann in Arbeitskleidung reicht einer anderen Person ein Werkzeug.
Eine Gruppe klettert bei kaltem Wetter.
Ein Bergsteiger mit einem blauen Helm beginnt mit dem Abstieg.
Ein Mann macht einen Handstand auf einer runden Skulptur.
Ein Kind sitzt an einem Restauranttisch und h?lt eine Papiermaske vors Gesicht.
Ein brauner Hund watet in einen See, um einen Stock zu holen.
Eine Mutter bringt ihren zwei kleinen S?hnen an einer felsigen Küste mit sehr blauem Wasser das Angeln bei.
Ein kleines Kind l?uft neben roten Stühlen.
Ein M?dchen sitzt mit einem kleineren Jungen auf einem dekorierten Fahrrad w?hrend ein weiteres M?dchen ein Foto macht.
Ein Schwarzer Hund holt einen Ball im Wasser.
Ein Mann in wei?en Hosen und einem blauen Hemd tritt gegen einen gelben Boxsack.
Zwei indische M?nner nehmen an einer Zeremonie teil.
Ein Junge mit verschrammter Nase und bekritzelten H?nden steht in einer Videothek.
Zwei Silhouetten paddeln in einem Kanu auf dem Ozean bei Sonnenuntergang.
Menschen stehen in einer vollen U-Bahn, der Bahnsteig drau?en ist durch das Fenster zu sehen.
Mann erklettert Mauer mit Feuer in der Hand
Zwei braune Hunde rennen durch den Schnee.
Bühnenfoto einer kleinen Band, die für ein Theaterpublikum spielt.
Ein Baby im Weihnachtskostüm blickt in die Kamera.
Ein Mann Sitzt neben einem Computermonitor.
Diese Frau hat gerade einen lustigen Witz geh?rt und lacht.
Personen in einem Geb?ude, eine von ihnen macht ein Foto.
Vier wei?e Hunde mit Maulk?rben springen über eine rote Wand.
Die Frau im blauen Shirt h?lt ein Baby.
Zwei Personen sitzen auf gestreiften Liegestühlen und angeln in einem Gew?sser.
Eine alte Frau sitzt an einem Webstuhl und stellt Stoff her.
Ein Junge im Vordergrund blickt über andere Personen auf einem Platz.
Ein Mann in einer blauen Jacke h?lt einen Jungen an der Schulter.
Drei braune Hunde springen an der blau gekleideten Frau hoch.
Ein Junge h?ngt aus dem Fenster eines vorbeifahrenden Taxis.
Ein Mann in einem grauen Shirt springt über die Spitze einer Sanddüne in der Wüste.
Ein Kind in einem gelben Shirt springt rauf und runter.
Ein Arbeiter in einer gelben Jacke wird auf ein Geb?ude gehoben, um zu arbeiten.
Ein Mann in Brasilien unterh?lt sich mit jungen Erwachsenen.
Ein paar Bier-Zapfh?hne in einer Bar mit Weihnachtsdekoration an der Decke.
Ein Mann seilt sich an einer Klippe über dem Ozean ab.
Ein Mann in schwarz geht im Schnee zu seinem Fahrzeug.
Ein Foxterrier springt nach einem Ball.
Eine Polizistin mit Mütze und blauer Uniform tr?gt eine Sonnenbrille und l?chelt vor einem Gesch?ft.
Eine Familie spaziert durch einen Park.
Ein Mann mit einem grünen Schutzhelm und Sicherheitsweste blickt ernst.
Ein Kind mit pinken F?den auf dem Kopf tanzt umgeben von Konfetti und Ballons.
Ein Hund mit Stupsnase schnuppert nach etwas an einem Flussufer.
Ein Mann bereitet seinen Stand für das Tagesgesch?ft vor.
Ein Mann in einem roten Hemd schickt sich an, einen Taco zu essen.
Eine junge Dame in wei? h?lt einen Tennisschl?ger.
Ein Junge in einem roten Shirt gr?bt mit einer gelben Schaufel im Sand.
Eine Person in einer rosa Jacke sitzt unt?tig auf einer h?lzernen Bank.
Ein Mann in einem wei?en Hemd blickt durch ein Fenster einer Metallkonstruktion.
Eine Frau h?lt eine kleine wei?e Statue.
Sechs Kinder ohne Hemd spielen in natürlichem Gew?sser und planschen.
Zwei Personen fahren auf Fahrr?dern durch eine Gebirgslandschaft.
Ein M?dchen beim Seilhüpfen auf dem Gehweg nahe einer Garage.
Ein Mann tr?gt ein orangefarbenes Shirt und einen Helm.
Ein kleiner Junge spielt mit Plastikkl?tzen, Autos und Tieren w?hrend eine Erwachsene ihn aufmerksam beobachtet.
Ein kleines M?dchen, das ein Weihnachtsgeschenk auspackt.
Die blau gekleidete Frau bedient eine Kamera vor zwei anderen Frauen.
Ein kleines M?dchen versucht auf einem gemütlichen Sofa ein Nickerchen zu machen.
Ein braun-schwarzer Hund l?uft auf einem Pfad im Wald.
Zwei Hunde spielen an einem Baum.
Ein Marineoffizier in einem schwarzen Mantel und Hose steigt Treppen w?hrend die Kamera auf den Hund fokussiert.
Zwei grün gekleidete M?nner bereiten in einem Restaurant Essen zu.
Ein Mann in schwarzem Leder und einem Cowboyhut schlendert auf einem Renaissancefestival.
Ein Hund l?uft mit einem gelben Spielzeug im Freien.
Ein Hund, der einen Mantel tr?gt, l?uft im Schnee.
Eine Familie spielt am Strand mit ihrem Hund.
Eine Frau und ein Kind umarmen sich w?hrend das Kind kostet, was sie gerade gemeinsam zubereiten.
Zwei M?nner und eine Dame stehen im Freien.
Eine Gruppe von M?nnern verwendet Baumst?mme, um ein Boot aus dem Wasser zu schieben.
Ein Mann trinkt aus einem Weinglas w?hrend er eine Zeitung liest.
Ein ganz in schwarz gekleideter Mann spielt Piano.
Ein Junge in einem blauen Trikot und gelben Shorts spielt Fu?ball.
Ein Mann steht auf einem Stein und breitet seine Arme aus wie ein Vogel.
Ein Hund trinkt drau?en Wasser auf dem Gras.
Zwei Frauen in Tank-Tops blicken in die Kamera.
Ein Mann sitzt im Friseurstuhl und bereitet sich auf eine Rasur vor.
Ein kleines Kind in grünen Stiefeln spielt in einer Schlammpfütze.
Ein Mann schneidet Holz mit einer Kettens?ge.
Ein Mann sitzt an einem Picknicktisch mit einem Tablett und halb ausgetrunkenem Bier vor sich.
Der Junge im schwarzen T-Shirt und blauen Jeans h?lt einen roten Baseballschl?ger.
Ein dunkelhaariger Mann mit Bart, Brille und Hawaiihemd sitzt auf dem Gras.
Hunde Laufen auf einer Hunderennbahn.
Ein Lichttechniker mit Tribal-Tattoos richtet einen Scheinwerfer über einen Balkon.
Zwei Deutsche Sch?ferhunde knurren einander an.
Das ist eine Gruppe von Leuten, die auf einem Event herumstehen.
Ein braun-wei?er Hund holt ein Spielzeug.
Ein wei?haariger Mann spielt Akkordeon zwischen ein paar Geb?uden.
Eine Frau mit braunen Haaren sitzt auf einer Bank vor einem Café.
Ein Mann spielt neben einem Fahrrad Panfl?te.
Zwei Kinder balancieren auf einem Stamm und halten ein Seil.
Ein Mann auf einem Motorrad zeigt einen Trick auf einer Rennstrecke.
Eine junge Frau mit einem purpurnen Tuch über dem Gesicht entspannt auf einem h?lzernen Deck.
Die Frau im braunen Shirt sitzt auf einer hellroten Bank.
Ein Hund l?uft auf einem Baumstamm über einen kleinen Fluss.
Ein junger Mann in einem wei?en T-Shirt und grün-schwarzen Shorts steht auf einem Pfeiler.
Alle Personen in der Gruppe stehen unter Regenschirmen.
Ein Mann macht Werbung mit einem riesigen Schild, das auf sein Fahrrad gebunden ist.
Ein Mann wirft einen Ast in einen Kanal w?hrend zwei Hunde zusehen.
Gruppe ?lterer Menschen, die in einem Zelt am Wasser Instrumente spielen.
Eine Ansicht einer belebten Stra?e in der Stadt.
Eine junge blonde Frau h?lt ein wei?es Seil an einem sonnigen Tag.
Zwei Personen in blauen Hemden stehen mit einem Megafon im Freien.
Ein schwarzer Hund springt in einen Pool.
Ein Cowboy reitet ein Wildpferd in einem Wettbewerb.
Eine Gruppe von Bahnarbeitern macht Wartungsarbeiten an Bahngleisen.
Ein Arbeiter in einer orangefarbenen Weste arbeitet mit einer Schaufel.
Zwei Bauarbeiter diskutieren auf einer Baustelle.
Drei M?nner gehen bergauf.
Eine asiatische Frau in einem Hochzeitskleid mit Blumenmuster posiert mit ihren Brautjungfern auf einer Brücke.
Ein junger Mann stimmt seine Gitarre in der Küche.
Drei Jungen spielen mit Schw?mmen und Wassereimern.
Drei Arbeiter machen Ausbesserungen auf dem Gehsteig.
Leute entspannen in einem Wald neben Kanus.
Ein Chor versammelt sich in einer Kirche.
Eine Gruppe Teenager springt bei Nacht in die Luft und macht lustige Posen für die Kamera.
Zwei M?nner fahren in Kajaks, eines orange und das andere blau, einen Fluss hinab.
Zwei Arbeiter streichen Zement auf einen Ziegelbau.
Eine Dame in einem r?tlichen Sweater und Jeans sitzt mit den H?nden auf ihrem linken Knie.
Zwei Schauspieler inszenieren einen Kampf vor einen gebannten Publikum.
Ein Soldat entspannt und wartet auf einem Flughafen.
Ein Mann in einem gelben Mantel achtet auf ein Feuer, ein Junge im Anorak sieht zu.
Ein Mann und ein Junge auf einem felsigen Strand.
Eine Frau auf einem Boot namens "El Corazon" l?sst schwarze Gewichte ins Wasser fallen.
Ein Junge sitzt auf einem Fernrohr und schaut hindurch.
Ein barfü?iges junges M?dchen in einem rosa Kleid springt im Freien.
Viele Menschen sitzen um ein Zelt im Freien.
Ein Jugendlicher in einem schwarzen T-Shirt mit dem Aufdruck "Asian Pacific 2007" sitzt und spielt eine Trommel.
Ein Mann verkauft Waren am Rand der Stra?e, die zu einem Gro?en Berg im Canyon führt.
Das M?dchen in Gelb lacht das M?dchen in Orange aus w?hrend das M?dchen in Blau zusieht.
Ein Hund springt im Freien über ein Hindernis.
Hund mit schwarzem Halsband w?lzt sich in Staub und trockenen Bl?ttern.
Zwei braune Hunde spielen grob miteinander.
Ein Mann mit Schnurrbart und Bart h?lt eine Pfanne, aus der Flammen hochsteigen.
Ein Mann mit Kleidung aus dem Unabh?ngigkeitskrieg schl?gt eine Glocke.
Ein Mann in einem schwarzen Shirt angelt an einem felsigen Ufer.
Zwei Hunde beschnuppern sich gegenseitig Nase an Nase.
Zwei M?nner unterhalten sich auf dem Gehsteig w?hrend ein Auto vorbeif?hrt.
Ein Chinese sitzt und wartet auf Kundschaft.
Geparkte Autos mit einem Schulbus dahinter.
Zwei Frauen in ?hnlichen T-Shirts gehen nach links.
Ein kleines Kind in einer orangefarbenen Rettungsweste h?lt ein Paddel und paddelt in einem blauen Kajak auf einem Gew?sser.
Menschen gehen auf einem Pfad in einem Park voller B?ume.
Drei Jugendliche reden in einer Menschenmenge, die Frau blickt ver?rgert.
Eine Frau und ein Kind vor der Tür ihres idyllischen Hauses.
Ein schwarzer Mann und seine zwei wei?en Freunde stecken die K?pfe zusammen.
Eine junge Frau in Tarnhose sitzt auf einem Hummer-Truppentransporter.
Ein hellbrauner Hund l?uft bergauf.
Ein Junge posiert mit einem gro?en grünen Insekt auf der Nase.
Ein glatzk?pfiger Mann demonstriert, wie hoch sein braun-schwarzer Hund springen kann.
Eine Menschenmenge auf einer gesch?ftigen Stra?e bei Tag.
Ein Windhund mit Maulkorb in gelb und schwarz l?uft auf der Strecke.
Ein Mann in Sandalen sitzt auf dem Gehsteig neben ein paar Taschen.
Ein Mann und eine Frau sitzen an einem Zaun und unterhalten sich.
Ein Kind sieht sich Kaffeemaschinen in einem Gesch?ft an.
Ein Mann, der aus einer gelben Tasse Trinkt, umgeben von Menschen auf einer gesch?ftigen Veranstaltung.
Ein Junge lehnt sich an ein Auto mit Blumen auf der Motorhaube.
Eine Frau in einem Kleid mit Blumenmuster spricht mit Kindern vor einem Kleinbus.
Ein Mann an seinem Hochzeitstag.
Eine junge Frau in einem schwarzen T-Shirt und Jeans beim Kehren.
Eine Frau mit einer Mütze klettert auf einer Klippe nahe eines gro?en Gew?ssers.
Ein gro?er schwarzer Pudel l?uft auf dem Gras mit einem Spielzeug im Maul.
Ein Junge in Shorts macht einen Skateboard-Trick.
Ein kleiner Junge in roten Hosen steht auf der Stra?e.
Eine Frau tippt auf ihrem Handy, umgeben von Regenschirmen.
Acht M?nner spielen auf der Bühne, w?hrend ein Gitarrist im Scheinwerferlicht spielt.
Ein Mann in einem orangefarbenen Overall und passendem Schutzhelm hilft mit einem blauen Schlauch
Ein Mann und zwei M?dchen mit Angelruten vor einem Gew?sser halten einen Fisch hoch.
Ein Mann in einem roten Shirt beobachtet einen Hund beim Hindernislauf.
Ein Junge in einer rot-wei?en Badehose springt rückw?rts in einen sch?nen Pool.
Eine Asiatin steckt ihre Haare zurück.
Ein ?ltere Frau und ein kleines Kind in einem pinkfarbenen Shirt spielen mit bunten Kl?tzen.
Ein kleiner schwarzer Hund springt über Gatter
Ein Mann mit braunen Haaren in einem grünen Hemd spielt im Freien Trompete.
Ein Mann telefoniert mit hochgelegten Fü?en.
Ein Gruppe Kinder sitzt auf einer Blauen Matte und isst aus Schalen.
Ein schwarzer Junge sitzt im Sand.
Ein kleiner Hund sieht zu wie zwei gr??ere Hunde auf einem Feld stürmisch spielen.
Menschen, die vor einem gro?en Geb?ude im Kreis sitzen.
Ein Hund springt um einen Ball zu fangen, w?hrend ein anderer zusieht.
Ein blondes Kind schaukelt auf einer Schaukel.
Ein Mann und zwei Frauen diskutieren und trinnken Wei?wein
Ein Asiate bereitet im Freien Essen zu.
Ein brauner Hund ist kurz davor, einen Frisbee zu fangen.
Fans jubeln w?hrend die Band ein Lied spielt.
Ein kleiner Junge steht neben einer Pyramide aus Sand.
Drei kleine Kinder gehen durch einen grasbewachsenen Hof.
Ein Mann grübelt über einer Skulptur auf einem Wagen.
Ein Mann f?hrt auf einem Berg Fahrrad.
Ein Junge in blau-gelben Gummistiefeln l?uft auf Erde.
Eine Frau in einer orangefarbenen Jacke sitzt auf einer Bank.
Ein Mann macht einen Trick auf dem Skateboard
Ein Mann in einem Karateanzug in der Luft.
Eine Frau verkauft auf einem Gehsteig Tüten mit Früchten.
Zwei Fu?ballmannschaften auf dem Feld.
Ein Kind in einem blauen Shirt springt von einer Bank.
Ein Torwart in einem gelben Trikot schützt das Tor.
Eine Gruppe junger Menschen trinkt Shots in einem Mexikanischen Setting.
Ein Junger Mann rutscht mit dem Skateboard über ein rosa Gel?nder.
Ein kleiner Junge springt von einem Stockbett auf ein kleineres Bett.
Zwei Leute in komischen Alienkostümen, eines blau und eines purpurn, stehen auf einer Stra?e.
Ein L?ufer in einem blauen Shirt mit einer aufgeklebten Nummer.
Ein asiatischer Fabrikarbeiter posiert für die Kamera.
Ein Mann, der anscheinend bei einem Marathon mitl?uft, zeigt zwei Daumen nach oben.
Basketballspieler versuchen w?hrend eines Spiels, einen Korb zu erzielen.
Ein Footballspieler in einem orangefarbenen Trikot l?chelt und h?lt einen Football.
Zwei Downhill-Skateboarder fahren um eine Kurve w?hrend andere zusehen.
Ein Team in Wei? und Gold an der Seitenlinie eines Footballfeldes.
Ein kleines M?dchen schiebt seinen Roller über eine Wiese mit B?umen.
Eine Gruppe asiatischer Kinder in wei?en Hemden und Kappen gibt eine Vorstellung vor einer Menge.
Fu?g?nger auf einer Stra?e blicken auf ein Kind in einem Karton.
Ein brauner Hund l?uft über den Sandstrand.
Zwei M?nner in Armeeuniform stehen neben einer Frau.
Der Dalai Lama bei einem Empfang, zu dem Besucher Nelken, Schirme und Gebetsfahnen bringen.
Ein Radfahrer springt über eine Hindernis.
Ein Paar sitzt auf wei?en Gartenstühlen und l?chelt in die Kamera.
Kleine Kinder fahren in einem Miniaturzug.
Ein Surfer beim Wellenreiten in einem blauen Neoprenanzug.
Ein Junge springt auf seinen Fu?ball spielenden Bruder.
Zwei junge M?nner aus verschiedenen Fu?ballmannschaften versuchen auf einem Fu?ballplatz den Ball zu bekommen.
Leute gehen auf einer befestigten abschüssigen Stra?e, umgeben von Chinesischen H?ndlern.
Ein kleiner Junge in wei?en Hosen springt von der Couch.
Ein Junge in einem orangefarbenen Shirt schüttet Legosteine aus einer Tasche.
Eine Frau in braunen Sandalen, blauen Jeans und einem wei?en Shirt h?lt ein Baby unter einem gro?en Baum.
Drei Personen l?cheln und halten politische Schilder.
Ein Polizist steht neben einem Auto auf einer st?dtischen Stra?e.
Zwei M?nner mit Mützen.
Ein Junge ist in der Luft und versucht einen Fu?ball zu treffen
Ein kleiner Junge mit einer blauen Beanie-Mütze h?lt den Kopf gesenkt.
Ein rothaariger Mann mit Dreadlocks sitzt und spielt auf einer akustischen Gitarre.
Ein Mann isst ein Sandwich und h?lt seine kleine Tochter auf dem Scho?.
Ein afroamerikanisches Kind h?lt etwas hoch, worauf die Leute auf dem Bild stolz sind.
Eine Frau gibt einer Gruppe Anweisungen über einen Lautsprecher.
Kostümierte Zuschauer sehen zu wie ein Polizist eine Rede h?lt und ein Mann im Anzug eine Schale mit Obst h?lt.
Eine Gruppe ist in einer Bar.
Ein M?dchen in Wei? und eines in Grün gehen an einer blauen Autowaschanlage vorbei.
Ein Mann verwendet elektronische Ger?te.
Eine Person surft auf einer brechenden Welle auf dem Ozean.
Ein Armeeoffizier inspiziert etwas.
Eine Braut und Br?utigam küssen sich unter dem Brautschleier.
Bereitschaftspolizei steht im Hintergrund w?hrend ein junger Mann mit einem roten Schal über dem Gesicht vorbeigeht.
Ein schwarz-wei?er Hund springt bei einem Wettbewerb über ein Hindernis
Eine Frau in einer Strickjacke liest zu Hause ein Buch.
Mehrere Teenager blicken über ein Gel?nder in einem dunklen Raum.
Der Mann im wei?en T-Shirt macht sich daran, auf einen Fels zu klettern.
Ein Teenager streckt sich in der Küche und sein Bauch ist teilweise sichtbar.
Personen halten verschiedene Arten von Trommelschl?geln über unterschiedliche Trommeln.
Drei Farmer ernten Reis auf einem Feld.
Zwei Frauen und ein Mann betrachten ein Buch.
Die Beine von drei Kindern, die neben einem Durcheinander verknoteter F?den stehen.
Ein Koch posiert beim Kochen für die Kamera.
Viele Leute protestieren auf einer Stra?e gegen Kohlekraftwerke.
Der Teenager springt mit seinem Fahrrad über den Hügel.
Ein kleines M?dchen l?uft entlang einer Küste.
Eine wei?e Ente schl?gt im Wasser mit den Flügeln.
Zwei M?nner stehen vor dem Heck eines Lasters und hinter einem Metallgegenstand und unterhalten sich anscheinend w?hrend vier weitere Personen um sie herum stehen.
Eine Frau in einem rosa Rock h?lt ein Baby.
Ein Hockeyspieler in einem gelben Trikot schützt das Tor.
Ein Mann l?uft an einem Schild vorbei, auf dem E.S.E. Electronics steht.
Drei Jungen in grünen Shirts und braunen Hosen posieren auf dem Oberteil einer Rutsche.
Ein Mann tanzt mit einem Hund zwischen den Beinen.
Der wei?e Hund l?uft im flachen Wasser.
Schlagzeuger aus Oregon marschieren mit der Band.
Eine Gruppe Kinder spielt in einem eingez?unten Hof w?hrend ein Erwachsener zusieht.
Eine Gruppe Frauen spielt gemeinsam auf Musikinstrumenten.
Ein kleines M?dchen in einem violett karierten Kleid liegt auf dem Boden und weint.
Ein Mann mit ergrauenden Haaren rasiert seinen Bart.
Zwei schwarze Hunde, ein schwarzer Welpe und ein wei?er Hund im Schnee.
Ein Mann in einem Basketballtrikot von Miami macht einen Sprungwurf.
Eine Frau sitzt vor ihrem Haus mit einer blauen Tür und genie?t die frische Luft.
Kinder sitzen auf einem Mann in einem Bananenkostüm.
Ein grauwei?er Hund springt über stehendes Wasser im Sand.
Eine Menschenmenge hat sich im Regen um einen Springbrunnen im Park versammelt.
Mehrere ?ltere M?nner, einige mit traditionellen Kopfbedeckungen, treffen sich an einer Stra?enecke.
Ein junger Hund, der aussieht wie Lassie, im Schnee.
Der Fu?baller im goldenen Trikot blockt den Ball vor dem gegnerischen Spieler.
Eine Frau in einem schwarzen Hemd strickt mit rotem Garn.
Vier Frauen asiatischer Herkunft tragen goldene Kleider und tanzen Ballett.
Eine Person spielt auf einem einzigartigen Instrument.
Ein M?dchen in schwarzer Sportbekleidung mit der Nummer 1102 auf dem Trikot l?uft über einen Rasen.
Ein Kind mit der Nummer "93" f?hrt Ski.
Ein ?lterer Herr und ein junges M?dchen fangen an, gemeinsam ein Puzzle zusammenzusetzen.
Ein Filmteam filmt einen afrikanischen Jungen in einem gelben Shirt.
Eine beleuchtete Brücke mit einem Radfahrer und ein paar Autos.
Ein Mann reitet auf einem Bullen in einem Gehege.
Ein Junge springt hoch, um einen Tennisball mit seinem Schl?ger zu treffen
Kinder klettern auf eine Wand w?hrend zwei weitere Personen zusehen.
Menschen laufen über einen Universit?tscampus mit Palmen im Hintergrund.
Ein kleines M?dchen tritt in einem Karatekurs einen schwarzen Gegenstand.
Zwei M?nner versuchen sich aus dem Wasser auf einen Steg aus Autoreifen hochzuziehen.
Eine Menschenmenge beobachtet zwei M?nner beim Breakdancen.
Eine professionell gekleidete Frau steht an einem Podium und debattiert oder diskutiert über etwas Wichtiges.
Eine Frau liegt auf einem Sofa und lacht.
Eine schwarze und eine wei?e Frau wischen einen schmutzigen Boden.
Ein Reh springt über einen Zaun.
Drei Hunde spielen auf einem Feld.
Zwei kleine Kinder auf dem Sand.
Ein l?chelnder Junge spielt im Laub mit den Enten.
Diese vier Personen stehen mit 3 Hunden im Freien.
Beim Besuch von Maya-Ruinen zeigt ein Führer in Richtung weiterer Sehenswürdigkeiten.
Ein M?dchen in einem Radio-T-Shirt mit offenem Mund
Eine Gruppe Stammesangeh?riger füllt in der Wüste Wasserbeh?lter.
Ein Mann steht auf einer Stra?e in der Stadt.
Ein Schwarm V?gel fliegt mit Futter in den Schn?beln weg.
Zwei M?nner reiten über eine Farm und führen einen von einem Esel gezogenen Wagen.
Zwei M?nner stehen auf einem Berggipfel.
Ein junges M?dchen hat Spa? w?hrend es einen Schneeengel macht.
Drei M?nner l?cheln für die Kamera und zeigen ihre Muskeln.
Eine Person schreibt auf einer Tafel in einem leeren Klassenzimmer.
Ein Mann in einem schwarzen Shirt sitzt mit einem offenen Apple-Laptop vor sich an einem Tisch.
Vier Personen entspannen auf einem grasbewachsenen Hügel mit Ausblick auf ein felsiges Tal.
Ein Junge auf einem Skateboard springt neben Eisenbahnschienen in die Luft.
Ein Mann in einem orangefarbenen Shirt spielt Tennis.
Der Hund mit dem roten Halsband knurrt den Hund mit dem blauen Halsband an.
Der Junge ist im Freien und genie?t einen Sommertag.
Ein Arbeiter in einem orangefarbenen Arbeitsanzug kniet und inspiziert eine Maschine.
M?nner in Cowboyhüten stehen bei einem Rodeo herum.
Zwei Hunde sind im Schnee, einer von ihnen hat etwas im Maul.
Eine Arbeitnehmerin macht eine Pause, um etwas zu trinken.
Ein beigefarbener Hund l?uft hinter einem wei?en Hund mit einem gelben Spielzeug.
Hockeyspieler in wei?em Trikot mit einem Schl?ger.
Mann in einem wei?en Hemd und Golduhr spielt mit einer Platine.
Ein schwarzes Pferd steckt seinen Kopf durch einen Zaun und versucht, an das Gras zu kommen.
Ein Crack-Opfer tut so, als würde es seine H?nde aufw?rmen wollen, raucht aber in Wahrheit Crack.
Zwei Typen und eine Frau l?cheln.
Ein Kind beugt sich über eine Auslage aus blauem und gelbem Plastik w?hrend eine Erwachsener zusieht.
Ein schwarz-wei?er Hund l?uft zu einem kaputten Ball im Schnee.
Ein junges M?dchen steht neben einer gelben Katze auf einer Küchenarbeitsplatte.
Die zwei Kinder Spielen auf dem Spielplatz.
Ein Tennisspieler in einem grün gestreiften Shirt h?lt seine Hand vor den Mund.
Ein Junge in einem roten Badeanzug spielt im Wasser.
Ein Kind mit roter Jacke und Mütze h?lt ein gro?es Stück Schnee.
Zwei Polizisten in orangefarbenen Warnwesten stehen mit Passanten vor einem wei?en Zelt.
Zwei Personen stehen neben einem Baum.
Zwei M?nner sitzen und unterhalten sich neben einem Geb?ude aus Stein.
Ein brünettes Kind mit Brille h?lt ein blondes Kind in einem roten Sweatshirt und gelben Stiefeln.
Ein schwarz-wei?er Hund spielt mit einem wei?en Ball.
Zwei Personen küssen sich auf einem Gehsteig vor eine Limousine w?hrend Leute vorbeigehen.
Eine Frau spielt Volleyball.
Zwei gro?e Hunde k?mpfen auf einem unbefestigten unbewachsenen Gel?nde.
Ein brauner Hund springt über eine Hürde.
Ein Mann in einem gestreiften Shirt raucht auf der Stra?e eine Zigarette.
Ein kleines M?dchen h?lt einen kleinen Jungen auf ihrem Scho?.
Ein Mann versucht an einem sch?nen Samstagnachmittag, einen sehr wütenden Bullen zu reiten.
Kinder bemühen sich, beim Seilziehen zu gewinnen.
Ein Radfahrer lehnt sich auf einer unbefestigten Piste mit einem Mountainbike in die Kurve.
Zwei Personen und eine angebundene Kuh vor einem Haus.
Der kleine Junge lernt mit seinem Vater, Rad zu fahren.
Ein Junge in einem roten Shirt und schwarzen Shorts kehrt eine Einfahrt.
Eine afrikanische Familie steht vor ein paar provisorischen Behausungen.
Ein Mann spielt neben einem Baum ein Instrument.
Zwei Frauen halten sich über einen Tisch an den H?nden und l?cheln in die Kamera.
Ein hechelnder brauner Hund geht auf dem Gras.
Eine Baseballspielerin in einem schwarzen Shirt f?ngt eine Spielerin in einem wei?en Shirt.
Eine Frau h?lt einen gro?en Scheck für "Kids' Food Basket".
Die zwei Hunde, einer mit einem Tennisball im Maul, laufen durch hohes Gras.
Zwei Erwachsene und zwei Kinder sitzen auf einer Parkbank.
Eine Frau bl?st eine Pusteblume auf einer Wiese.
Ein Mann verkauft Kartoffeln an eine Gruppe.
Eine Gruppe versammelt sich auf einer Stra?e um einem Akkordeonspieler zuzuh?ren.
Ein Mann sitzt auf einer Bank und h?rt Musik auf seinem iPod.
Ein alter Mann in dicker Kleidung sitzt in der U-Bahn und liest eine Zeitung.
Ein ?lterer Mann mit Brille bereitet Fleisch zu.
Ein Mann macht einen Trick auf dem Fahrrad, bei dem er auf dem Hinterreifen balanciert.
Ein Mann ist am Strand und macht eine Sandskulptur.
Mehrere Menschen essen an einem Picknicktisch im Park.
Zwei Frauen werden bei einer Art Bauma?nahme an einem Baum festgeschnallt.
Ein Cowboy versucht beim Rodeo, die 8 Sekunden zu schaffen.
Ein Hund springt durch ein brennendes Hindernis.
Eine übergewichtige Frau mit langen schwarzen Haaren in einem rosa Shirt mit Namensschild tr?gt Lippenstift auf.
Ein Mann repariert das Fahrrad eines kleinen M?dchens.
Zwei M?dchen in bauschigen Kleidern tanzen vor ein paar Musikanten auf der Stra?e.
Der gelbe Hund tr?gt einen Stock übers Wasser.
Ein M?dchen in einem Sweatshirt verdeckt die Sonne.
Ein Rockkonzert findet statt.
Drei Frauen in leuchtenden Farben und mit Kopfbedeckungen halten Karten mit Liebesbotschaften.
Ein brauner Hund gr?bt im Dreck.
Ein kleiner Junge in einem wei? gestreiften Shirt und mit einem Stirnband h?lt einen Tennisschl?ger.
Zwei Hunde laufen im Wald weg von der Kamera.
Ein M?dchen spielt komplett bekleidet im Springbrunnen.
Drei junge Sumoringer stehen und h?ren einem Ansager zu
Zwei m?nnliche Wanderer inspizieren einen Baumstamm, der am Rand eines Waldweges liegt.
Drei Spieler bringen einen gegnerischen Spieler zu Boden.
Zwei Jungen überqueren eine Stra?e in einer Stadt w?hrend sie mit einem roten Fu?ball spielen.
Ein Mann h?lt einen anderen mit seinem Rücken hoch.
Wei?er Hund auf einem Berg dreht sich zu etwas au?erhalb des Bildes um, Himmel im Hintergrund.
Ein Junge f?hrt Skateboard auf einer Skateboardrampe.
Ein Musiker mit langen Haaren spielt Keyboard.
Drei Sportler halten Blumenstr?u?e und stehen auf dem Siegerpodest.
Zwei glatzk?pfige Drag Queens in roten Kleidern.
Ein kleiner Junge h?ngt von einer Kleiderstange.
Ein kleines M?dchen in Pink h?lt sich an einer Stange fest.
Ein Mann in Grün springt auf seinem Motorrad über mehrere andere Motorr?der.
Eine Frau spielt im Park mit zwei kleinen Jungen.
Vier Personen spielen Fu?ball auf einem Strand.
Zwei Teenagerinnen umarmen sich vor Radfahrern im Hintergrund, eine tr?gt einen Fahrradhelm.
Zwei mittelgro?e Hunde laufen über den Schnee.
Eine Frau steht auf einem grünen Feld, h?lt einen wei?en Hund und zeigt auf einen braunen Hund.
Ein Tisch voller gerahmter Bilder, ein Freiluftmarkt.
Zwei Personen sitzen gegen eine Wand gelehnt an einem Tisch im Freien und machen Grimassen.
Zwei Typen mit gepiercten Brustwarzen l?cheln.
Ein Kind liegt auf einem beigefarbenen Teppich und lacht.
Ein Mann und eine Frau sitzen, fein gekleidet und mit eingehakten Armen.
Zwei Frauen beim Schlammringen in einem Kinderbecken.
Ein Typ in einem wei?en Shirt schlendert mit einem Drink in der Hand.
Die Silhouetten von zwei Personen auf einem See, der einen bunten Himmel reflektiert.
Mehrere formell gekleidete Personen sitzen an einem Tisch.
Zwei M?dchen (eine in Blau und die andere in Pink) liefern sich ein Rennen auf Rollschuhen.
Die vier Personen sitzen auf einem Haufen von Steinen.
Eine Gruppe macht Tricks auf Motorr?dern.
Radfahrer in Rennmontur f?hrt durch ein Waldgebiet.
Ein Mann in einem grünen Shirt spaziert am Strand mit seinen Turnschuhen in der Hand.
Mehrere M?nner stehen um ein antikes Rennauto herum.
Zwei M?nner arbeiten unter der Haube eines wei?en Rennautos.
Kinder Springen vom Rand in einen Pool.
Ein Mann steht am Rand einer Mauer und f?llt gleich runter.
Eine Frau in einem gestreiften Outfit auf einem Fahrrad.
Ein schwarz gekleidetes M?dchen posiert für die Kamera.
Ein Mann in Shorts steht am Wasser.
Vier schwarze M?nner sitzen auf den Stufen einer Kirche.
Ein Kran arbeitet mitten in einem Schutthaufen.
Eine Turnerin in Rot und Wei? in der Drehung auf einem ungeraden Balken.
Eine ?ltere Dame in einem grünen Sweatshirt w?hlt Gemüse aus.
Zwei M?nner stellen in einer Werkstatt mit Werkzeugen Gegenst?nde her.
Eine Lehrerin in Wei? und ein kleines M?dchen in einem gelben Kleid spielen mit Baukl?tzen.
Ein kleines Kind schl?ft in seinem Bett mit einem offenen Buch auf der Brust.
Eine Frau isst an einem sch?nen Tag auf dem Gras.
Ein Mann geht auf einer Kopfsteinstra?e neben Geb?uden mit roten Dachtraufen.
Eine Frau mit einem Hut macht Brot.
Eine einzelne Frau verwendet einen gro?en einfachen St??el und M?rser, um Pflanzenmaterial zu zerdrücken, w?hrend sie auf einem Stoppelfeld steht.
Ein Mann in einem Karateanzug macht eine Vorführung vor zwei Punktrichtern.
Ein formell gekleideter Mann spielt Klavier auf dem Gehsteig an einer st?dtischen Stra?e.
Ein ?lterer Mann sitzt in einem Stuhl und isst ein paar Snacks.
Eine Frau in einem wei?en Hemd arbeitet hinter dem Tresen in einem Café.
Ein Mann in Arbeitskleidung steht auf der Ladefl?che seines Lasters.
Zwei Kinder beobachten Pferde durch einen kleinen Zaun.
Ein Fenster mit einem aufgemalten Design.
Eine Frau in einem knallrosa Mantel steht vor einer Vitamin Shoppe-Filiale und macht eine Grimasse in Richtung einer Frau in einem violetten Mantel.
Ein Cowboy bandagiert seinen Arm.
Ein Mann in einem gelben Hemd und ein Mann in einem dunkelblauen Hemd unterhalten sich.
Drei asiatische Kinder sitzen auf einer Couch mit Wandteppichen im Hintergrund.
Ein M?dchen in einem roten Shirt springt hoch, um einen Tennisball zu treffen.
Ein Mann posiert für die Kamera mit einem grünen Kran.
Ein Mann st??t in einem Restaurant l?chelnd mit einer anderen Person an.
Ein Mann l?dt gebackene Brezeln auf einen Koffer-LKW.
Ein Mann in einer schwarzen Jacke spielt in der ?ffentlichkeit Gitarre.
Eine Tanztruppe bei einer Aufführung w?hrend einer Parade in China.
Ein Mann steht auf einem steinigen Abhang und blickt auf ein Gew?sser.
Ein Polizist beobachtet eine Frau beim Aussteigen aus dem Bus.
Zwei Polizisten mittleren Alters beobachten nachts einen Parkplatz.
Zwei M?nner in blauen Hemden sehen sich ein Fu?ballspiel an.
Eine Gruppe von M?nnern in blauen Uniformen stehen zusammen.
Eine junge Dame macht Yoga am Strand.
Eine gro?e Menschenmenge steht in einem Park herum und einige spielen auf Instrumenten.
Ein Mann mit einem Luftballon, der Ballontiere macht.
Ein Mann, der über einem Grill im Freien Fleisch grillt.
Zwei M?nner verkaufen Obst auf einem Obstmarkt.
Eine brünette Frau in einem wei?en Bikini gie?t einem Mann einen Drink ins Glas.
Ein Junge mit Sonnenbrille l?uft hinter einem Rummelplatz.
Eine Hand mit Handschuh h?lt etwas, was wie ein übergro?er Nagel aussieht, an einen Holzklotz.
Ein Mann in einem karierten Hemd zeigt ein schwarzes Paar Handschuhe.
Zwei M?nner auf wei?en Plastikstühlen sitzen in einem Eingang.
Ein junges M?dchen in einem roten Kleid tr?gt einen schwarzen Cowboyhut.
Mann in einem rot-wei?en Fu?balltrikot steht an der Seitenlinie mit einem gelb-blauen Fu?ball.
Leute springen an einem Seil über eine Gletscherspalte.
Leute sehen zu w?hrend Marathonl?ufer vorbeilaufen.
Leute mit Laptops vor einem gro?en Fenster.
Ein DJ bei der Arbeit wird von Scheinwerfern angestrahlt.
Ein Mann mit Handschuhen tr?gt Mais durch ein Feld.
In einem Café wird von einer Spiegelreflexion ein Foto gemacht.
Eine muslimische Frau h?lt Luftballons bei einer muslimischen Veranstaltung.
Eine Frau sitzt in einem K?fig mit einer Katze und zwei Kaninchen.
Eine Frau sitzt gegen eine Ziegelwand gelehnt in einem Geb?ude.
Drei junge Frauen sitzen sich auf roten Plüschstühlen gegenüber.
Eine Frau in einem blauen Shirt spaziert in einem Dorf.
Sechs Kinder sitzen mit Bl?cken und Stiften auf einer Stufe.
Ein brauner Hund spielt am Ufer mit einem Stock.
Zwei Hunde bei?en spielerisch einen dritten Hund, dessen Zunge heraush?ngt.
Ein Kind sitzt l?chelnd auf dem Motorrad.
6 Personen versammeln sich zu einem gro?en Abendessen.
Santa Claus wird bei einem Medienevent zu Weihnachten fotografiert.
Milit?rangeh?rige marschieren an einem regnerischen Tag durch New York.
Eine Frau in roten Hosen und mit einem blauen Helm f?hrt Fahrrad.
Mehrere M?nner in Kampfsportuniformen machen gemeinsam Bewegungen.
Eine junge Frau und ein Mann in Kriegerkostümen hantieren vor einer Gruppe im Hintergrund mit Schwertern.
Ein uniformierter Mann geht auf einer Stra?e mit zwei Autos und einem Baum.
Junge Frau klettert auf Felswand
Ein ?lterer Mann in einem hellblauen Mantel arbeitet am Stra?enrand an einem Auto.
Personen betrachten mehrere farbige Papierstücke auf einem Tisch.
Ein Mann singt und spielt Gitarre in ein Mikrofon.
Zwei M?nner sitzen in einem Restaurant.
Zwei Frauen in Shorts laufen auf einem Strand entlang des Wassers.
Arbeiter diskutieren neben den Schienen.
Ein Ausblick auf eine Fu?g?ngerzone mit einem Mann in einer schwarzen Schürze und wei?en Baseballmütze, der in der Mitte des Bildes steht.
Eine Gruppe spielt an einem Gegenstand.
Ein kleines M?dchen in Blau klettert auf der Stra?e auf ein Metallgel?nder.
Eine Gruppe von M?nnern sitzt und unterh?lt sich hinter grünen Früchten.
Ein Typ in einem gelben Outfit steht hinter dem Mikrofon in einem Zelt.
Ein brauner Hund mit einem lilafarbenen Frisbee im Mund.
Ein Mann, der aussieht als würde er Kampfsportübungen machen, vor schlammig aussehendem Wasser.
Eine Frau mit einem Getr?nk und eine Frau mit einem Mobiltelefon.
Ein Kind in einer roten Jacke winkt mit einer Hand w?hrend es neben einem Plastikschlitten im Schnee liegt.
Eine Frau sitzt neben ihrer Tasche und sieht Hunden im Park zu.
Drei M?nner stehen auf einer Bühne, einer von ihnen tr?gt Clown-Makeup und h?lt eine Gitarre.
Eine Frau verarbeitet Pflanzensaft in einem Stammesdorf
Die Frau im roten Kleid tanzt mit dem Mann im Anzug.
Zwei kleine Hunde folgen einem gr??eren Hund mit einem Tennisball
Ein Mann mit buschigem Bart und Baseballmütze sitzt auf einer Parkbank.
Ein afrikanischer Stamm steht im Garten mit dem Wald im Hintergrund.
Ein junges M?dchen versucht, eine Ziege zu bürsten.
Asiaten sitzen in einem Restaurant mit gelben Stühlen.
Ein Baby sitzt mit L?tzchen in einem Hochstuhl und isst einen Keks .
Ein grauhaariger Mann mit schwarzen Handschuhen m?ht den Rasen.
Eine Frau sitzt in einer Reihe aus roten Stühlen und liest ein Buch.
Ein Kind sitzt auf den Schultern einer Frau und klatscht.
Eine Familie geht auf dem Gehsteig durch den Schnee w?hrend am Rand ein Mann mit seinem Papierbecher sitzt.
Eine Katze sitzt auf einem Werbeschild.
Ein Mann in einem pinken Shirt und schwarzer Jacke mit Kopfh?rern.
Ein junger Mann wirft einen Football.
Ein Typ und ein M?dchen gehen einen spiralf?rmigen Fu?weg hinunter.
Eine Frau mit pinken Haaren beugt sich auf dem Gehweg hinunter und h?lt zwei pinke Hunde.
Ein Mann im Anzug h?lt ein Getr?nk in einem Becher w?hrend er auf dem Gehweg an einem st?dtischen Bus vorbeigeht.
Mann springt vor einer Felsformation im Hintergrund.
Eine Person in einer roten Jacke und schwarzen Hosen h?lt Regenbogenb?nder.
Eine Frau legt den Arm um eine Person im Rollstuhl.
Ein Mann in einer wei?en Schürze bereitet für eine Frau in einer wei?en Jacke im Freien in einer Pfanne etwas mit Eiern zu.
Eine Frau mit einem Push-to-Talk-Mobiltelefon und einem Headset wartet an einem Zebrastreifen.
Eine Gruppe von M?nnern geht auf einer st?dtischen Stra?e.
Eine Stra?e neben einem interessanten Ort mit vielen S?ulen.
Eine Gruppe von Personen in Schwarz steht an einem Dock nahe eines gro?en Geb?udes.
Ein Mann mit ein paar Kisten Bier.
Ein Mann mittleren Alters sitzt und spielt Akkordeon.
M?dchen mit grünem Pulsw?rmer, Haargummis und Ohrringen steht im Freien.
Ein junges M?dchen in einem pinken Oberteil ist am Strand und l?uft in Richtung des Ozeans.
Ein Skateboarder in einem schwarzen T-Shirt und Jeans f?hrt durch die Stadt.
Ein Mann in einer Jacke macht Fotos von einem gro?en Geb?ude.
Menschen an der Seitenlinie bei einem Fu?ballspiel.
Auf diesem Foto eilt eine vierk?pfige Familie über eine gesch?ftige Stra?e in der Stadt.
Eine Menschengruppe l?uft bei Sonnenschein die Stra?e hinunter.
Eine Stra?e bei einer Ampel mit mehreren Personen, darunter ein Mann in einem braunen Mantel und Sonnenbrille, der seine Hand ans Gesicht h?lt.
Ein paar Pflanzen wachsen beim Fenster.
Dieser Spieler mit dem blauen Helm war in einem Baseballspiel zwischen zwei Teams gerade am Schlagmal und ist gerade mit dem Schlagen fertig.
Die Frau im goldenen Mantel beeilt sich, um die U-Bahn zu erwischen.
Einige Leute sitzen auf B?nken unter Reihen von B?umen vor einem Geb?ude.
Ein Mann im Anzug sitzt an einer Bushaltestelle.
Ein afroamerikanischer Mann ist umgeben von umgedrehten wei?en Eimern und dunkleren Kisten und drückt sich über eine handgeschriebene Nachricht auf einem Stück Karton aus.
Eine junge brünette Frau isst und trinkt etwas.
Ein Mann in einem Anzug und mit Hut spielt auf der Stra?e Gitarre.
Eine Frau in einer roten Weste arbeitet am Computer.
Personen stehen um R?ucherst?bchen herum und wedeln sich den Rauch ins Gesicht.
Ein Mann verwendet den Badezimmerspiegel, um seine Krawatte zu binden.
Mehrere Personen spielen Musik w?hrend eine gut gelaunte Menge sitzt und zuh?rt.
Zwei junge M?nner fahren auf einem sehr kleinen Wagen voller Kartoffeln, der von einem Pferd gezogen wird.
Eine Frau in einem Klid geht auf der Stra?e an einer Baustelle vorbei.
Ein Mitarbeiter in einem Laden fragt einen Kunden, der Alkohol kauft, nach seinem Alter und einem Ausweis.
Ein Mann mit Sonnenbrille bedient ein Baufahrzeug und l?dt Kies auf den Boden ab.
Ein Baby spielt mit seinem Spielzeug und betrachtet eine schwarz-wei?e Katze.
Eine Teenagerin tr?gt eine Gitarre im Wald.
Ein Mann mit einem Rucksack geht eine Stra?e hinunter.
Zwei M?nner unterhalten sich vor einem Souvenirgesch?ft in Rom.
Ein Frau in Schwarz h?lt etwas im Mund.
Eine Gruppe von Leuten sitzt im Freien um einen kleinen, kurzen Tisch.
Ein Mann f?hrt sein Fahrrad die Rampe hoch.
Eine Frau in einem schwarzen Tank-Top mit einem Kreuz-Halsband blickt kurz vor Sonnenuntergang in die Ferne.
Drei junge M?dchen gehen gemeinsam auf dem Gehsteig.
Eine Frau mit langen Haaren bei einer Abschlussfeier.
Ein Mann f?hrt auf einer Stra?e Skateboard w?hrend ihm ein anderer Mann vom Gehsteig aus zusieht.
Ein Mann in einer schwarzen Lederjacke steht vor einem Schild.
Ein Mann und eine Frau singen gemeinsam im Freien.
Ein junges M?dchen mit gelockten blonden Haaren in einem wei?en Top liegt im Gras und h?lt einen Blumenstiel.
Eine Frauenfu?ballmannschaft in grünen Trikots macht eine Dehnübung.
Eine Frau spielt in der ?ffentlichkeit eine dramatische Szene hinter gelbem Absperrband.
Ein Mann bückt sich und macht Hausarbeiten w?hrend im Hintergrund Tauben vorbeilaufen.
Eine Gruppe von M?nnern steht auf einem Feld aus schwarzen B?llen.
Ein gesch?ftiger Tag auf einem st?dtischen Platz.
Ein Mann mit einer Zigarette im Mund macht sich einen Teller mit Essen.
Zwei Gruppen von Schwimmern waten ins Wasser.
Menschen sitzen auf einer Bank auf einem Platz in der Stadt w?hrend in der N?he zuf?llige Gegenst?nde wie eine Lampe und ein Mannequin stehen.
Die Arbeiter stehen um ein Loch mit einem Eimer herum.
Ein Mann ohne Hemd in schwarzen Shorts steht an einer felsigen Küste neben einem gro?en Gew?sser.
Ein Wachmann h?lt Wache w?hrend seiner Schicht.
Leute spielen Pool, einer davon ist ein Mann in einem blauen Hemd, der Rest sind Frauen, deren K?pfe allerdings nicht im Bild sind.
Leute stehen vor einer von Wasser umgebenen Skulptur.
Eine Frau sieht zu, w?hrend ein Mann mit verschr?nkten Armen spricht.
Ein Mann mittleren Alters in wei?en Shorts und Flip-Flops blickt die Stra?e hoch.
Zwei M?nner in dunkeloranger Kleidung und Sandalen stehen neben einer gro?en, reflektierenden Skulptur.
Zwei Personen vergnügen sich auf ihrem Boot.
Ein Mann und eine Frau stehen in einer Stadt auf der Stra?e.
Feuerwehrm?nner kommen aus einer U-Bahnstation.
Vier M?nner, drei von ihnen mit Gebetskappen, sitzen auf einer blau und olivgrün gemusterten Matte.
Das ist eine gro?e Menschengruppe, die im Freien auf B?nken sitzt.
Ein Mann in einem roten Shirt geht an einem türkis und wei? karierten Imbissladen Namens "32 De Neude" vorbei.
?rzte bei einer Art Operation.
Ein ?lterer Mann mit einer Zigarette im Mund und einer Mütze inspiziert seine Kamera.
Kleines Orchester spielt im Freien mit einem Gitarrenkoffer auf dem Boden.
Ein Mann in einem roten Anzug tanzt mit einer Dame.
Zwei Personen betrachten die Lichter einer Stadt bei Nacht.
Zwei Motocrossfahrer in voller Schutzkleidung, einer von ihnen ist nach einem Sprung in der Luft, der andere blickt auf sein Motorrad hinunter.
Mehrere M?nner in Orange versammeln sich im Freien für ein gesellschaftliches Ereignis.
Zwei junge M?dchen rennen auf einem Gehsteig vor einem Ziegelgeb?ude mit Plakaten.
Zwei Personen klettern einen steilen Berg hoch.
Ein Kind liegt auf dem Boden neben einem Sportwagen.
Ein Hund bettelt bei einem Mann und einer Frau.
Viele Leute auf dem Markt, die verschiedene Dinge betrachten.
Zwei junge M?nner spielen E-Gitarren auf einer Bühne.
Ein t?towierter Mann gie?t Bier aus einer Flasche in den Mund eines jungen Mannes.
Zwei Personen stehen drau?en neben aufblasbaren Spielsachen und Baggern.
Vier Personen fahren Rad auf einem Radweg neben einer viel befahrenen Stra?e.
Frau mit Brille in einem pinken Hemd.
Eine Frau in einem roten Shirt hebt ihren Arm in Richtung der unten vorbeiziehenden Menge.
Ein Junge in wei?en Shorts springt in einen See oder einen Fluss.
Ein kleines M?dchen blickt durch ein Teleskop auf den Strand.
Mehrere Bauarbeiter in orangen Sicherheitswesten graben im Boden.
Eine Person mit Kapuze steht vor einem heruntergekommenen Geb?ude.
Bauarbeiter streiken gegen PM Construction Services.
Ein Mann auf einem Rennpferd mit anderen M?nnern auf Pferden hinter ihm.
Ein Afroamerikaner geht die Stra?e hinunter.
Zwei Nonnen posieren für ein Foto.
Eine Frau mit neonfarbenen Kopfh?rern schreibt in einen Block.
Eine Frau in einem grün gemusterten Hemd telefoniert mit dem Handy.
Ein kleines afrikanisches Kind tr?gt ein jüngeres Kind auf dem Rücken.
Eine Gruppe von Leuten, die auf Stühlen sitzen.
Eine Mann mit einem Kopftuch steht auf der Stra?e vor seinen Sachen.
Eine Person orientalischen Aussehens in einem roten Shirt und schwarzer Hose hockt über einer Handtasche auf dem Beton.
Ein schwarzer und ein brauner Hund mit einem Ball.
Ein Mann mit einer schwarzen Weste h?lt ein Modellflugzeug
Ein Mann auf einem Feld mit einem Flugzeug in Sicht.
Ein Mann in einem Anzug mit Krawatte und eine Frau mit Gep?ck gesellen sich zu anderen Wartenden in der Londoner U-Bahn.
Ein Kind geht auf dem Gehsteig und tr?gt ein paar amerikanische Flaggen.
Ein schwarzer Hund l?uft auf grünem Gras mit einem Spielzeug im Maul.
Ein orientalischer Reisender wartet am Wechselschalter bis er dran ist.
Ein Hund dreht sich auf dem Gras um einem fliegenden Ball nachzulaufen.
Eine Gruppe von Studenten sitzt und h?rt der Sprecherin zu.
Menschen fahren bei Nacht mit Mopeds die Stra?e hinunter.
Ein gro?es, graues Seedeck und ein Typ auf dem Fahrrad.
Ein Mann in einem orangen Shirt und ein blonder Junge fahren mit anderen Personen in einem "Pullman".
Ein junger Mann und Frauen nahe einer gro?en Metallskulptur
Ein Boot mit roten, wei?en und blauen Segeln dockt an einem Pier an.
Ein Mann mit einer schwarzen Mütze macht ein Foto auf einer belebten Stra?e.
Ein Mann steht auf einer belebten Stra?e und sieht sich mit in den Nacken gelegten Kopf um.
Eine Frau in Schwarz tr?gt ein kleines M?dchen in einem gelben Kleid auf ihren Schultern.
Eine Gruppe von Menschen baut auf der Stra?e Instrumente auf.
Ein Offroad-Biker hilft einem anderen, der hingefallen ist, auf.
Drei Personen gehen einen Gebirgspfad hoch, eine davon blickt auf ihre Kamera.
Mehrere asiatische M?nner in schwarzer Kleidung in einer Art Station.
Eine Frau in einem roten Rock geht auf der Stra?e mit Graffiti im Hintergrund.
Eine rhythmische Sportgymnastin in einem blauen und pinken Outfit vollführt eine Bewegung mit dem Band.
Leute, die sich in einem Springbrunnen abkühlen, eine Frau in einem wei?en Kleid sitzt am Rand und sieht zu.
Ein Mann sitzt auf einer Bank unter einem gro?en Baum.
Drei M?nner in rot und wei? gestreiften Shirts, wei?en Hosen und mit schwarzen Hüten halten Flaggen.
Leute bewundern ein Kunstwerk.
Gesch?ftiges asiatisches Einkaufszentrum mit Papierlaternen und Eink?ufern.
Diese Personen klettern die Stufen zum Berg hoch
Ein kleines Kind in Blau sieht zu B?umen, die in der Ferne stehen.
Leute betrachten Kinderspielzeug in einem Gesch?ft.
Ein Mann mit Hut spielt auf der Stra?e Schlagzeug.
Ein Junge steht mit drei M?dchen.
Ein l?chelnder Mann mit Rucksack streckt vor einem Jungen mit Brille die F?uste in die Luft.
Vier M?nner sind im Freien und blicken von der grünen Brücke, auf der sie stehen, hinunter.
Eine Frau entspannt vor Leuten, die das blaue Wasser genie?en, auf einem Handtuch.
Ein ausgewachsener Australian Shepherd folgt einem Welpen, der vor ihm l?uft.
Herbsteink?ufer und Bistroliebhaber lassen sich in den Gezeiten der Stadt treiben.
Der Afroamerikaner protestiert gegen gesetzwidrigen Sex.
Ein Polizist sitzt auf dem Motorrad und wartet, bis die Ampel auf Grün springt.
Eine Gruppe von M?nnern sitzt an einem Tisch.
Gruppe hochrangiger Gesch?ftsleute, darunter auch ?ltere Personen, nehmen in einem Park Drinks zu sich.
Frau spricht mit Freundin w?hrend Spaziergangs mit Hund im Freien an einem sonnigen Tag.
Ein junger Mann in einem schwarz-wei?en Shirt und wei?em Stirnband.
Zwei Personen fahren Motorrad gemeinsam mit vielen anderen Motorradfahrern.
Zwei Frauen in Milit?runiformen stehen mit anderen Soldaten in Formation.
Drei M?dchen l?cheln für ein Foto.
Die Dame mit der schwarz gerahmten Brille und der gelben Sweatjacke blickt verwirrt w?hrend sie auf der braunen Bank sitzt.
Ein rothaariger junger Mann trinkt aus einem Springbrunnen, der wie eine Frau geformt ist.
Zwei M?nner und eine Frau gehen eine Stra?e in einer Stadt entlang.
Ein Mann mittleren Alters mit roten Haaren und Brille h?lt einen S?ugling.
Ein kleiner Junge mit roter Mütze reitet auf einem Pferd.
Zwei Jungen spielen auf dem Gehsteig.
Ein kleines M?dchen in einem schwarzen Badeanzug h?lt eine Schaufel am Strand.
Alter Mann mit Hut und Mantel schl?ft im Sitzen auf einem Sofa.
Zwei Jungen in Winterkleidung sehen zum Himmel hoch und winken mit den Armen.
Ein junges Paar sitzt auf dem Gehsteig und entspannt gemeinsam.
Ein Jugendlicher in Hemd und Krawatte kniet und macht ein Peace-Zeichen.
Drei Personen sitzen an einem Tisch vor der Bar Gelati Tabacchi.
Ein Junge in einem schwarzen Shirt und mit roten Schwei?b?ndern h?ngt kopfüber w?hrend andere Leute zusehen.
Ein Mann geht vor einem bunten Wandgem?lde vorbei.
Ein junger Mann, der mit einem weiteren jungen Mann unterwegs ist, blickt sich nach drei M?dchen um, an denen sie gerade vorbeigegangen sind.
Ein Mann schneidet in einem garten?hnlichen Café eine Palme zurück.
Fünf Personen, angeführt von einer Frau in einem pinken Hemd und braunen Rock, gehen eine Treppe hoch.
Eine Gruppe von Menschen auf einem Obstmarkt im Freien.
Zwei Jungen essen ihr McDonald's-Menü im Au?enbereich, umgeben von vielen anderen Leuten.
Eine Frau in einer Jeansjacke geht auf einem Gehweg.
Ein Mann f?hrt ein Allradfahrzeug mit vier Passagieren vorne und einem seitlich sitzenden Mann hinten.
Ein Mann in einem smaragdgrünen Hemd liest eine Zeitung.
Ein Junge in einem Rutschfahrzeug tr?gt ein grünes Shirt und h?lt ein Buch.
Zwei Kinder sitzen nebeneinander und essen Sü?igkeiten.
Radfahrer auf der Stra?e, alle tragen Helme.
Menschengruppen, die alle Fahrrad fahren.
Ein Mann sitzt auf einer Plattform mit R?dern und wird von einem Esel gezogen.
Ein Mann f?hrt auf einem Fahrrad durch einen Torbogen.
Ein bunt gekleideter junger Mann mit sichtbaren Hautverletzungen sitzt und raucht eine Zigarette.
Zwei M?nner in Anzügen unter einem Regenschirm vor einem Graffiti.
Ein dünner alter Mann tr?gt ein schmutziges wei?es Hemd und f?hrt Fahrrad auf der Stra?e.
Ein Mann versucht, einen jungen Stier von einem Pferd aus mit dem Seil zu fangen.
Ein Cowboy versucht von einem Pferd aus ein Kalb mit dem Lasso zu fangen.
Zwei Radfahrer mit Helmen fahren an ein paar abgeernteten Feldern vorbei.
Ein Mann beugt sich zur Seite und zieht etwas aus einer Tasche.
Ein Mann f?hrt in einem motorisierten Wagen vorbei, um den Park zu sehen.
Eine t?towierte Person betrachtet ein Foto auf einer Digitalkamera oder einem Handy.
Ein Mann in einem schwarzen Hemd und Jeans steht auf dem Gehsteig und blickt in die Kamera.
Ein Junge und ein M?dchen stehen gemeinsam auf dem Gehsteig und betrachten einen Gegenstand.
Mehrere Personen in blauen Kitteln und eine in einem Rock und schwarzer Bluse.
Eine Frau und eine Hund sitzen auf einer wei?en Bank in der N?he eines Strandes.
Zwei Frauen gehen auf der Erde vor einem Geb?ude.
Eine Gruppe von M?nnern und ein Kind in wei?en Shorts stehen auf der Stra?e.
Eine ganz in schwarz gekleidete Frau tr?gt auf dem Gehsteig eine schwarze Tasche.
Gruppe von M?nnern sitzt an einem Tisch und unterh?lt sich.
Ein Wandgem?lde auf einem Geb?ude.
Ein asiatischer Mann mit Handschuhen arbeitet an einem Imbissstand.
Frau sitzt an einem Tisch und arbeitet an ihrem Laptop.
Eine Person sieht zum Computer auf einem Tisch mit einem Telefon und einer Schachtel.
Ein Mann sitzt in einem Stuhl und beobachtet Leute, die vorbeigehen.
Zwei Personen mit Hüten stehen auf einem Feld und pflegen Nutzpflanzen.
Jemand springt in Barcelona über ein Reck.
Ein Mann in Stiefeln und einem Cowboyhut sitzt auf einem springenden Pferd w?hrend Zuschauer auf den Tribünen sitzen.
Zwei junge M?dchen sitzen auf der Stra?e und essen Mais.
Drei Kinder in Footballtrikots zweier verschiedener Mannschaften spielen Football auf einem Footballplatz w?hrend ein weiterer Spieler und ein Erwachsener im Hintergrund stehen.
Ein kleines Kind mit schmutzigem Gesicht wird von einer alten Frau gehalten.
Ein Mann mit Brille blickt in die Kamera w?hrend ein anderer Mann in einem blauen Hemd sich auf etwas konzentriert.
Zwei Personen sitzen unter einem Baum mit grünem Gemüse.
Ein kleiner Junge mit einer blauen Mütze blickt durch ein Teleskop w?hrend ein anderer Junge zusieht.
3 M?nner kochen in einer kleinen Küche.
Ein junges M?dchen in einem grauen Schneeanzug f?hrt Ski auf einem verschneiten Berg.
Eine Gruppe von Dorfbewohnerinnen versammelt sich beim Tanz.
Ein Mann und eine Frau sortieren W?sche mit Latexhandschuhen.
Ein junges M?dchen sitzt auf einem Holzstuhl.
Zwei Arbeiter verschwei?en die Stangen eines Zauns an einer viel befahrenen Vorstadtstra?e.
Ein junger Mann mit langen Haaren f?hrt an einem bew?lkten Tag Skateboard auf dem Gel?nder.
Zwei M?nner schaufeln auf einem Freiluftmarkt den Weg von Schnee und Matsch frei.
Ein Typ in einem wei?en Hemd spielt auf einer wei?en Gitarre.
Ein junges M?dchen zeigt seiner Freundin, wie man eine Einwegkamera verwendet.
Ein kleiner Junge springt von einem Steg in einen See.
Eine sehr unglücklich aussehende Dame mit einer grünen Maske beim Zahnarzt.
Ein Mann mit einer orangen Jacke und blauem Mütze klettert auf einen verschneiten Berg.
Ein kleines M?dchen mit blonden Haaren spielt und spritzt in einer Schlammpfütze.
Ein Kind f?hrt auf einem Fahrrad durch eine Gasse mit einem Graffiti.
Eine Turnerin wird bei einer Veranstaltung beurteilt.
Menschen gehen auf einer Stra?e mit einem Stra?enh?ndler.
Ein Mann in traditionellem Gewand steht neben seinem Esel, der anscheinend auch bekleidet ist.
Zwei Kinder spielen auf einem Fahrrad.
Zwei M?nner aus gegnerischen Mannschaften spielen Fu?ball auf einem Fu?ballplatz.
Ein Mann springt in die Luft und posiert für Fotografen, die auf dem Boden liegen.
Das M?dchen trinkt aus einem Springbrunnen.
Der Hobbyh?hlenforscher findet auf seiner Wanderung Wasser.
Ein Mann in einem Laborkittel blickt durch ein Mikroskop.
Ein blondes M?dchen schl?ft auf einer braunen Couch.
Ein Mann kehrt tagsüber den Gehsteig vor einem Ziegelbau.
Drei M?nner kochen in einer Küche.
Ein Mann auf einem Gerüst vor einem Haus l?chelt und posiert für den Fotografen.
Zwei M?dchen in Shorts halten H?ndchen an einem Pool.
Vier asiatische Kinder sitzen auf einer Bank und winken l?chelnd in die Kamera.
Kinder auf Fahrr?dern in einem scheinbar verarmten Land.
Ein kleiner Junge mit Kochmütze und Schürze schneidet in einer Küche Würstchen.
Das ist ein Clown in einer Grundschule.
Der Schiffskapit?n l?chelt und h?lt das Steuerrad seines h?lzernen Schiffs.
Ein gelber Bulldozer schafft Erdreich aus dem Weg.
Eine Frau in einem roten Hemd reitet auf einem wei?en Pferd, das an den B?umen entlang galoppiert.
Eine Frau sitzt vor B?umen im Hintergrund auf einem sehr gro?en Stein und l?chelt in die Kamera.
Drei M?nner in bunten Kostümen, Perücken und verrückten Sonnenbrillen gehen auf die Stra?e.
Ein M?dchen spielt in einem kleinen Pool.
Zwei Kinder, ein Junge in einem gelben Shirt und ein M?dchen in blau-wei? gestreiften Klamotten, schaukeln.
Ein Mann wirft ein Fischernetz in die Bucht.
Ein Mann mit einem grauen Shirt, blauen Jeans und neongrüner Sicherheitsweste steht mit einem wei?en Lieferwagen und einem wei?en Geb?ude im Hintergrund auf einer Bahnstrecke.
Zwei Bauarbeiter legen Blech über Balken.
Eine Band mit dezent in blau gekleideten Bandmitgliedern steht auf der Bühne.
Ein Rocker mit freiem Oberk?rper singt in ein Mikrofon w?hrend er Schlagzeug spielt.
Ich sehe einen Mann, der die Artikel aus seinem Einkaufswagen nimmt um zu bezahlen.
Der Mann mit dem Spazierstock macht einen Spaziergang.
Eine Frau in einem wei?en Pullover trainiert auf einem Crosstrainer.
Ein M?dchen mit einer Maske reitet auf den Schultern eines Mannes durch eine Menschenmenge.
Zwei M?dchen, eines ?lter und in Schwarz, das andere jünger und in Wei?, machen dieselbe Tanzbewegung vor einer Dekoration aus Ballons.
Mehrere Frauen führen vor einem Geb?ude einen Tanz auf.
Ein glatzk?pfiger Mann geht auf einem Gehsteig und telefoniert mit seinem Handy.
Eine Frau spielt mit Fingerpuppen w?hrend ein kleines Kind in einem Kostüm vorbeigeht.
Eine Gruppe von Leuten beobachtet junge M?nner, die auf Eimern Schlagzeug spielen.
Ein M?dchen mit gew?hnlicher und improvisierter Schutzausrüstung f?hrt Rollerblades.
Ein kleines wei?es Auto steht auf den Bahngleisen und wurde eventuell vom Zug im Hintergrund gerammt.
Zwei Rocker singen und spielen auf einer dunklen Bühne.
Ein M?dchen mit einer Baseballmütze, wei?em T-Shirt und blauen Shorts steht in einem von Wald umgebenen Gebirgsbach.
Zwei M?nner spielen Gitarre vor einem gro?en Publikum.
Mehrere Leute tanzen vor diesem riesigen Haus mit ihren Partnern.
Frau mit Hund verkauft ihre Ware im Freien auf den Treppen des alten Geb?udes.
Eine Frau diskutiert mit zwei professionell gekleideten M?nnern.
Eine Gruppe von M?nnern in roten und schwarzen Jacken sitzt auf Motorr?dern und wartet.
Ein Typ in einem wei?en Trikot mit der Nummer 3 auf dem Rücken spielt Fu?ball.
Ein Mann verkauft Snacks bei einer Sportveranstaltung.
Zwei M?nner vom grünen Team tackeln in einem Rugbymatch die anderen Spieler des schwarzen Teams, um an den Ball zu kommen.
Kinder k?mpfen um den Ballbesitz.
Eine Person in Blau wirft auf einer Bowlingbahn als einzige ihre Kugel.
Mehrere Fu?baller auf einem Feld in Aktion.
Junger Mann sitzt auf einem Skateboard, h?lt sein Handy und posiert auf der Rolltreppe.
Eine blau gekleidete Frau l?uft einen Marathon.
Diese Band bereitet sich auf einen Auftritt vor Publikum in einer Kirche vor.
Die # 8 von Iowa State streckt den Arm in Richtung eines Spielers der Texas AM beim Versuch, ihn zu tackeln.
Zwei m?nnliche Curler sind auf dem Eis und wischen den Pfad vor dem Stein, w?hrend eine kleine Menschenmenge zusieht.
M?nner spielen auf einem matschigen Platz Fu?ball.
Ein Basketballspieler in Wei? geht in die Hocke w?hrend ein Spieler in Rot auf ihn zu l?uft.
Menschen gehen durch einen Torbogen in einer alt aussehenden Stadt.
Zwei Rennautos, eines rot und das andere blau, fahren nebeneinander auf einer Rennstrecke w?hrend mehrere Personen zusehen.
Ein Footballspieler in einem wei?en Trikot h?lt einen Football.
Ein sehr kleiner Junge guckt nach vorne w?hrend er in einen kleinen Gegenstand bei?t.
Eine Frau und ein Kind gehen eine Stra?e entlang.
Ein Hockeyspiel wird vor gro?em Publikum gespielt.
Drei Frauen springen im Gras auf B?llen.
Ein afroamerikanischer Junge in blauen Shorts, einem schwarz-roten Shirt und wei?en Turnschuhen spielt Tennis.
Ein Mann und eine Frau in wei?en Shirts umarmen sich.
Ein Mann mit einer Art Messsonde spricht mit einer Familie, die versucht, zu l?cheln und freundlich zu sein.
Sehr kleiner Junge in einem grünen Shirt liegt mit dem Gesicht nach unten auf einem wei?en Bett.
Ein Extremradfahrer ruht sich aus w?hrend im Hintergrund die Sonne untergeht.
Eine warm gekleidete Frau f?hrt in einem verschneiten Gebiet Ski.
Vier M?dchen und eine Frau lernen zu basteln.
Ein Mann in schwarz-wei? gestreifter Kleidung versucht, ein Pferd anzuhalten.
Der Herr scannt das Bild, das ihm die Frau im blauen Hemd zeigt.
Eine Frau mit roten Haaren steht bis zum Hals in trübem blauem Wasser.
Zwei kleine Jungen posieren mit einem Welpen für eine Familienfoto.
Vier Kinder üben Karate w?hrend zwei Erwachsene zusehen.
Ein Mann liegt auf einem Sofa in einem M?belhaus.
Eine Gruppe von Leuten unterh?lt sich an Tischen.
Zwei Jockeys, einer in rot-blauen Karos und der andere in Orange und Braun, liefern sich ein Rennen vor einem verschwommenen Hintergrund.
Das rote Auto f?hrt vor den beiden Autos im Hintergrund.
Ein gro?er Stier versucht einen Mann bei einem Rodeo auf die H?rner zu nehmen w?hrend ein Rodeoclown herbeil?uft, um zu helfen.
Ein Mann ohne Hemd geht zu einem gelben Kajak.
Ein Junge zielt und schie?t auf einem Schie?stand.
Zwei Jugendteams spielen Football im Sand.
Ein Kind in Blau und ein Kind in Wei? stehen auf einer niedrigen Betonmauer neben einem Fluss.
Eine Frau malt ein Blumenmuster auf einen Tontopf.
Leute gehen auf einer belebten Stra?e in einem fremden Land.
Ein rechtsh?ndiger Pitcher der Saints wirft einen Ball.
Zwei M?nner, einer in Schwarz und Wei? und einer in Rot, spielen Beachvolleyball.
Ein Mann steht in einem Boot und flickt Netze.
Ein Surfer, der im Ozean beim Versuch, auf einer Welle zu reiten, von seinem Brett gefallen ist.
Ein Techniker bereitet im Labor eine Probe vor.
Fu?baller springen in die Luft, um den Ball mit dem Kopf zu treffen.
Zwei Jungen spielen gegeneinander Fu?ball.
Eine ?ltere Person überquert die Stra?e mit einem Regenschirm in der Hand.
Eine Gruppe von L?ufern l?uft auf zwei identische Wolkenkratzer zu.
Ein Skateboarder f?hrt eine Betonwand hoch und f?llt beinahe beim Versuch, einen Trick zu machen.
Leute spielen ein Spiel im Pool.
Ein Typ küsst einen anderen Typ
Ein Mann schreibt einem kleinen Jungen ein Autogramm ins Buch.
Ein junger Mann in einem blauen Shirt f?hrt in einer st?dtischen Gegend über ein Gel?nder.
Ein Asiate sitzt mit Kisten von Erdnüssen auf der Stra?e.
Ein britischer Gentleman in voller milit?rischer Uniform winkt mit seiner Mütze Leuten zu, die im Hintergrund sitzen und auf den Kanal blicken.
Zwei Autos fahren auf einer Rennstrecke.
Ein Mann in einem schwarz-wei?en Trikot h?lt gelbe Skist?cke und bereitet sich auf den Start vor.
Zwei Personen liegen auf einem Rasen und küssen sich.
Ein sehr kleines Kind mit einer Jeansmütze isst einen grünen Apfel.
Die Footballspieler laufen, um den Ball zu fangen.
Ein Mann mit kariertem Hut in einer schwarzen Jacke und einer schwarz-wei? gestreiften Hose spielt auf einer Bühne mit einem S?nger und einem weiteren Gitarristen im Hintergrund auf einer E-Gitarre.
Ein Mann springt von einem Stier weg über eine Absperrung.
Eine Frau in einem blauen Shirt und wei?en Shorts spielt Tennis.
Ein Mann spielt ein Intermezzo in einem Konzert.
Ein Mann tr?gt eine gro?e Ladung von Metallst?ben auf seiner Schulter durch ein Holzlager.
Frau mit Kamera wirft ihrem braunen Hund einen Frisbee zum Fangen zu.
Die Silhouette eines Mannes und einer Frau, die ein gro?es Bonfire oder einen anderen gro?en, brennenden Holzgegenstand betrachten.
Zwei M?dchen tauchen ihre H?nde in einen Springbrunnen w?hrend Leute vorbeigehen.
Ein nasses, l?chelndes Kind ohne Hemd posiert mit seinen Armen in der Luft.
Zwei M?nner, einer in Wei? und einer in Blau, ringen.
Eine Frau in einem roten Bikini springt beim Volleyball am Strand hoch, um einen Ball zu treffen.
K?tzchen mit orangen Streifen bei?t blondes M?dchen in die Nase.
Eine Frau in einer gelben Schürze nimmt den Deckel von einem gro?en Topf.
Zwei Kinder überqueren einen kleinen Bach über eine Steinbrücke.
Zwei afroamerikanische Frauen fahren auf einem Moped auf einer st?dtischen Stra?e, die sich anscheinend in einem Gro?stadtgebiet mit Stau befindet.
Zwei Jungen vor einem Getr?nkeautomaten.
Radfahrer in Schwarz f?hrt auf einem Mountainbike einen unbefestigten Pfad hinunter.
Eine Frau mit Tattoos macht mit ihrem Handy ein Foto von einem Gem?lde.
Eine überwiegend schwarz gekleidete Frau mit einem wei?en Helm f?hrt vor verschwommenen B?umen im Hintergrund Fahrrad.
Ein Team von Radfahrern f?hrt um die Kurve w?hrend in Zuschauer der N?he jubeln und Fotos machen.
Vier Footballspieler in Schwarz tackeln im Regen einen Spieler der gegnerischen Mannschaft in Wei?.
Ein Runner versucht, Extra-Yards zu machen w?hrend er von zwei Tacklern zu Boden gebracht wird.
Der Basketballspieler im wei?en Trikot mit der Nummer 55 deckt den Spieler im schwarzen Trikot mit der Nummer 10.
Ein Mann telefoniert im Freien mit dem Handy.
Professionelle Baseballspieler beobachten beim All-Star Game einen gegnerischen Batter.
Ein Offroad-Biker f?hrt im Herbst durch eine steile Kurve.
3 Basketballspieler k?mpfen um den Ball, einer in einem roten Trikot versucht, einem in einem wei?en Trikot den Ball wegzunehmen.
Ein Junge greift sich ans Bein w?hrend er in die Luft springt.
Zwei Kinder in gestreiften Sweatern und schwarzen Hosen rangeln im Freien neben einem Spielplatz.
Ein Mann mit Sonnenbrille f?hrt auf einem Roller.
Ein kleiner Junge in Baseballmontur holt mit einem Schl?ger hinter seinem Kopf in Richtung eines vor ihm montierten Baseballs aus.
Sechs M?nner sitzen auf einem Acker mit Holzkisten.
Ein brauner Hund hebt einen Zweig von einer steinernen Oberfl?che.
Das ist ein gelb gekleideter Mann, der ein braunes Pferd an der Leine h?lt.
Ein Mann in einem wei?en Shirt und einer Schürze zerlegt einen Vogel.
Eine hispanische Frau kocht im Freien in einem Wok.
Marathonl?uferinnen laufen auf einer st?dtischen Stra?e w?hrend andere Personen um sie herum stehen.
Asiatische Frau tr?gt einen Sonnenhut beim Fahrradfahren.
Ein paar Kinder sind im Freien und spielen auf dem Boden bei zwei B?umen.
Ein ?lterer Mann spielt ein Videospiel.
Ein M?dchen an einer Küste mit einem Berg im Hintergrund.



print("yangge  mindspore 打卡第九天  trainsformer之encoder和decoder部分 2024-06-29")
yangge  mindspore 打卡第九天  trainsformer之encoder和decoder部分 2024-06-29

数据预处理

在使用数据进行模型训练等操作时,我们需要对数据进行预处理,流程如下:

  1. 加载数据集;
  2. 构建词典;
  3. 创建数据迭代器;
数据加载器

加载数据集,并进行分词,即将句子拆解为单独的词元(token,可以为字符或者单词)。一般在机器翻译类任务中,我们习惯进行单词级词元化,即每个词元要么为一个单词,要么为一个标点符号。同一个单词,不论首字母是否大写,都应该对应同一个词元,故在分词前,我们需统一将单词转换为小写。

"Hello world!" --> ["hello", "world", "!"]

接下来,我们创建数据加载器Multi30K。后期调用该类进行遍历时,每次返回当前源语言(德语)与目标语言(英语)文本描述的词元列表。

import re

class Multi30K():
    """Multi30K数据集加载器
    
    加载Multi30K数据集并处理为一个Python迭代对象。
    
    """
    def __init__(self, path):
        self.data = self._load(path)
        
    def _load(self, path):
        def tokenize(text):
            # 对句子进行分词,统一大小写
            text = text.rstrip()
            return [tok.lower() for tok in re.findall(r'\w+|[^\w\s]', text)]
        
        # 读取Multi30K数据,并进行分词
        members = {i.split('.')[-1]: i for i in os.listdir(path)}
        de_path = os.path.join(path, members['de'])
        en_path = os.path.join(path, members['en1'])
        with open(de_path, 'r', encoding='utf-8') as de_file:
            de = de_file.readlines()[:-1]
            de = [tokenize(i) for i in de]
        with open(en_path, 'r', encoding='utf-8') as en_file:
            en = en_file.readlines()[:-1]
            en = [tokenize(i) for i in en]

        return list(zip(de, en))
        
    def __getitem__(self, idx):
        return self.data[idx]
    
    def __len__(self):
        return len(self.data)
train_dataset= Multi30K(train_path)
valid_dataset= Multi30K(valid_path)
test_dataset =  Multi30K(test_path) #####复制变为utf-8编码就没报错了 或者改为test.en1
train_dataset, valid_dataset, test_dataset = Multi30K(train_path), Multi30K(valid_path), Multi30K(test_path)

对解压和分词结果进行测试,打印测试数据集第一组英德语文本,可以看到每一个单词和标点符号已经被单独分离出来。

for de, en in test_dataset:
    print(f'de = {de}')
    print(f'en = {en}')
    break
de = ['ein', 'mann', 'mit', 'einem', 'orangefarbenen', 'hut', ',', 'der', 'etwas', 'anstarrt', '.']
en = ['a', 'man', 'in', 'an', 'orange', 'hat', 'starring', 'at', 'something', '.']
词典

将每个词元映射到从0开始的数字索引中(为节约存储空间,可过滤掉词频低的词元),词元和数字索引所构成的集合叫做词典(vocabulary)。

以上述“Hello world!”为例,该序列组成的词典为:

{"<unk>": 0, "<pad>": 1, "<bos>": 2, "<eos>": 3, "hello": 4, "world": 5, "!": 6}

在构建词典中,我们使用了4个特殊词元。

  • <unk>:未知词元(unknown),将出现次数少于一定频率的单词统一判定为未知词元;
  • <bos>:起始词元(begin of sentence),用来标注一个句子的开始;
  • <eos>:结束词元(end of sentence),用来标注一个句子的结束;
  • <pad>:填充词元(padding),当句子长度不够时将句子填充至统一长度;

通过Vocab创建词典后,我们可以实现词元与数字索引之间的互相转换。我们可以通过调用enocde函数,返回输入词元或者词元序列对应的数字索引或数字索引序列,反之亦然,我们同样可以通过调用decode函数,返回输入数字索引或数字索引序列对应的词元或词元序列。

class Vocab:
    """通过词频字典,构建词典"""

    special_tokens = ['<unk>', '<pad>', '<bos>', '<eos>']

    def __init__(self, word_count_dict, min_freq=1):
        self.word2idx = {}
        for idx, tok in enumerate(self.special_tokens):
            self.word2idx[tok] = idx

        # 过滤低词频的词元,并为每个词元配置数字索引
        filted_dict = {
            w: c
            for w, c in word_count_dict.items() if c >= min_freq
        }
        for w, _ in filted_dict.items():
            self.word2idx[w] = len(self.word2idx)

        self.idx2word = {idx: word for word, idx in self.word2idx.items()}

        self.bos_idx = self.word2idx['<bos>']  # 特殊占位符:序列开始
        self.eos_idx = self.word2idx['<eos>']  # 特殊占位符:序列结束
        self.pad_idx = self.word2idx['<pad>']  # 特殊占位符:补充字符
        self.unk_idx = self.word2idx['<unk>']  # 特殊占位符:低词频词元或未曾出现的词元

    def _word2idx(self, word):
        """单词映射至数字索引"""
        if word not in self.word2idx:
            return self.unk_idx
        return self.word2idx[word]

    def _idx2word(self, idx):
        """数字索引映射至单词"""
        if idx not in self.idx2word:
            raise ValueError('input index is not in vocabulary.')
        return self.idx2word[idx]

    def encode(self, word_or_list):
        """将单个单词或单词数组映射至单个数字索引或数字索引数组"""
        if isinstance(word_or_list, list):
            return [self._word2idx(i) for i in word_or_list]
        return self._word2idx(word_or_list)

    def decode(self, idx_or_list):
        """将单个数字索引或数字索引数组映射至单个单词或单词数组"""
        if isinstance(idx_or_list, list):
            return [self._idx2word(i) for i in idx_or_list]
        return self._idx2word(idx_or_list)

    def __len__(self):
        return len(self.word2idx)

通过自定义词频字典进行测试,我们可以看到词典已去除词频少于2的词元c,并加入了默认的四个特殊占位符,故词典整体长度为:4 - 1 + 4 = 7

word_count = {'a':20, 'b':10, 'c':1, 'd':2}

vocab = Vocab(word_count, min_freq=2)
len(vocab)
7

使用collections中的CounterOrderedDict统计英/德语每个单词在整体文本中出现的频率。构建词频字典,然后再将词频字典转为词典。其中,收录所有源语言(德语)词元的词典为de_vocab,收录所有目标语言(英语)词元的词典为en_vocab

在分配数字索引时有一个小技巧:常用的词元对应数值较小的索引,这样可以节约空间。

from collections import Counter, OrderedDict

def build_vocab(dataset):
    de_words, en_words = [], []
    for de, en in dataset:
        de_words.extend(de)
        en_words.extend(en)

    de_count_dict = OrderedDict(sorted(Counter(de_words).items(), key=lambda t: t[1], reverse=True))
    en_count_dict = OrderedDict(sorted(Counter(en_words).items(), key=lambda t: t[1], reverse=True))

    return Vocab(de_count_dict, min_freq=2), Vocab(en_count_dict, min_freq=2)
de_vocab, en_vocab = build_vocab(train_dataset)   ####用训练集的词典
print('Unique tokens in de vocabulary:', len(de_vocab))
Unique tokens in de vocabulary: 7882
数据迭代器

数据预处理的最后一步是创建数据迭代器。截至目前,我们已经通过数据加载器Multi30K将源语言(德语)与目标语言(英语)的文本描述转换为词元序列,并构建了词元与数字索引一一对应的词典,接下来,需要将词元序列转换为数字索引序列。

还是以“Hello world!”为例,我们逐步演示数据迭代器中的操作

  1. 我们将表示开始和结束的特殊词元<bos><eos>分别添加在每个词元序列的句首和句尾。
["hello", "world", "!"] --> ["<bos>", "hello", "world", "!", "<eos>"]
  1. 统一序列长度(超出长度的进行截断,未达到长度的通过填充<pad>进行补齐),同时记录序列的有效长度。此处假定统一的长度为7。
["<bos>", "hello", "world", "!", "<eos>"] --> ["<bos>", "hello", "world", "!", "<eos>", "<pad>", "<pad>"], valid length = 5
  1. 最后,对文本序列进行批处理。对于每个batch中的序列,通过调用词典中的encode为序列中的所有词元找到其对应的数字索引,将结果以Tensor的形式返回。
["<bos>", "hello", "world", "!", "<eos>", "<pad>", "<pad>"] --> [2, 4, 5, 6, 3, 1, 1] --> tensor
import mindspore

class Iterator():
    """创建数据迭代器"""
    def __init__(self, dataset, de_vocab, en_vocab, batch_size, max_len=32, drop_reminder=False):
        self.dataset = dataset
        self.de_vocab = de_vocab
        self.en_vocab = en_vocab

        self.batch_size = batch_size
        self.max_len = max_len
        self.drop_reminder = drop_reminder

        length = len(self.dataset) // batch_size
        self.len = length if drop_reminder else length + 1  # 批量数量

    def __call__(self):
        def pad(idx_list, vocab, max_len):
            """统一序列长度,并记录有效长度"""
            idx_pad_list, idx_len = [], []
            # 当前序列度超过最大长度时,将超出的部分丢弃;当前序列长度小于最大长度时,用占位符补齐
            for i in idx_list:
                if len(i) > max_len - 2:
                    idx_pad_list.append(
                        [vocab.bos_idx] + i[:max_len-2] + [vocab.eos_idx]
                    )
                    idx_len.append(max_len)
                else:
                    idx_pad_list.append(
                        [vocab.bos_idx] + i + [vocab.eos_idx] + [vocab.pad_idx] * (max_len - len(i) - 2)
                    )
                    idx_len.append(len(i) + 2)
            return idx_pad_list, idx_len

        def sort_by_length(src, trg):
            """对德/英语的字段长度进行排序"""
            data = zip(src, trg)
            data = sorted(data, key=lambda t: len(t[0]), reverse=True)
            return zip(*list(data))

        def encode_and_pad(batch_data, max_len):
            """将批量中的文本数据转换为数字索引,并统一每个序列的长度"""
            # 将当前批量数据中的词元转化为索引
            src_data, trg_data = zip(*batch_data)
            src_idx = [self.de_vocab.encode(i) for i in src_data]
            trg_idx = [self.en_vocab.encode(i) for i in trg_data]

            # 统一序列长度
            src_idx, trg_idx = sort_by_length(src_idx, trg_idx)
            src_idx_pad, src_len = pad(src_idx, de_vocab, max_len)
            trg_idx_pad, _ = pad(trg_idx, en_vocab, max_len)

            return src_idx_pad, src_len, trg_idx_pad

        for i in range(self.len):
            # 获取当前批量的数据
            if i == self.len - 1 and not self.drop_reminder:
                batch_data = self.dataset[i * self.batch_size:]
            else:
                batch_data = self.dataset[i * self.batch_size: (i+1) * self.batch_size]

            src_idx, src_len, trg_idx = encode_and_pad(batch_data, self.max_len)
            # 将序列数据转换为tensor
            yield mindspore.Tensor(src_idx, mindspore.int32), \
                mindspore.Tensor(src_len, mindspore.int32), \
                mindspore.Tensor(trg_idx, mindspore.int32)

    def __len__(self):
        return self.len

这段代码定义了一个函数 encode_and_pad,其目的是对一批文本数据进行预处理,以便于输入到神经网络模型中进行训练或预测。具体来说,它完成了以下几个关键步骤:

  1. 词元到索引的转换:利用预先构建好的词汇表(de_vocaben_vocab 分别对应源语言和目标语言的词汇表),将原始文本中的单词或子词转换成模型可以理解的数字索引。

  2. 按照序列长度排序:为了优化后续处理效率,特别是对于需要使用pad(填充)操作统一序列长度的情况,先根据源语言和目标语言序列的长度进行排序。这样做的好处是可以让类似长度的序列尽可能在一起处理,减少padding的数量。

  3. 序列统一长度:由于模型输入通常要求所有序列具有相同的长度,对于短于设定最大长度 max_len 的序列,会在末尾添加特殊的填充标记(pad token)至该长度。对于超过最大长度的序列,则通常需要截断。

下面通过一个具体的例子来说明这个过程:

假设情况

  • batch_data 是一个包含两组源语言-目标语言对的数据列表,每组数据又分别是句子的单词列表:
    batch_data = [
        (["我", "爱", "自然", "语言", "处理"], ["I", "love", "Natural", "Language", "Processing"]),
        (["深度", "学习", "很", "有趣"], ["Deep", "Learning", "is", "fun"])
    ]
    
  • max_len 设定为 5。
  • de_vocaben_vocab 分别是中文和英文词汇表,假设它们已经包含了上述示例中所有单词的索引映射。

过程解析

  1. 词元到索引转换:

    • 源语言(中文)转换后可能为:[[1, 2, 3, 4, 5], [6, 7, 8, 9]]
    • 目标语言(英文)转换后可能为:[[10, 11, 12, 13, 14], [15, 16, 17, 18]]
  2. 按照长度排序(假设不改变顺序,因为例子中两个序列长度相同,实际应用中如果长度不同,会重新排列)。

  3. 统一序列长度:

    • 源语言序列已经是最大长度5,所以不需要增加pad,但假设为了说明,我们假装每个序列都进行了pad操作,实际上第一个序列不需要pad。
    • 目标语言序列也已经是最大长度5,同样地,这里也是假设说明,实际上不需要pad。

最终返回的结果可能是这样的(实际上第二个序列不需要pad,这里简化说明):

src_idx_pad = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 0]]  # 假设0是pad的索引
src_len = [5, 4]  # 每个序列的实际长度
trg_idx_pad = [[10, 11, 12, 13, 14], [15, 16, 17, 18, 0]]  # 同样,第二个序列末尾不应有pad

请注意,实际应用中,对于长度已经等于或小于 max_len 的序列,不会进行额外的填充,而超过 max_len 的序列则会在前面进行截断。这里的解释简化了一些细节,以直观展示函数的主要功能。

max_len=32

train_iterator = Iterator(train_dataset, de_vocab, en_vocab, batch_size=128, max_len=32, drop_reminder=True)
valid_iterator = Iterator(valid_dataset, de_vocab, en_vocab, batch_size=128, max_len=32, drop_reminder=False)
test_iterator = Iterator(test_dataset, de_vocab, en_vocab, batch_size=1, max_len=32, drop_reminder=False)

模型构建

定义超参数,实例化模型。

len(de_vocab)
7882
len(en_vocab)
5898
32*32
1024
#shape: (3968, 5898)
128*31
3968

在神经机器翻译(NMT)任务中,当你看到输出的形状是(3968, 5898),这通常意味着你在处理一个批次的数据,其中:

  • 3968 是批次中句子的数量(或者说是样本数量)。这意味着每次训练时,你的模型正在处理3968个句子作为一次迭代的输入。这个数字是由你的数据加载器(在这里是Iterator)根据指定的batch_size动态计算得到的。如果训练集中总样本数不能被batch_size整除,而你设置了drop_reminder=True(如在训练和验证迭代器中),那么最后一个不完整批次可能被丢弃以保持所有批次大小一致。但在这个情况下,3968正好是能被128整除的(3968 / 128 = 31),表明没有样本被丢弃,且训练数据能够完美地构成整数倍的批次。

  • 5898 确实对应于英语词汇表(en_vocab)的长度,这是模型预测阶段输出层的维度,每一个元素代表了预测为词汇表中特定单词的概率。

因此,(3968, 5898)表示在这次训练迭代中,模型为3968个句子中的每个单词预测了英语词汇表中每个词的概率分布,每个句子中的每个位置都有一个长度为5898的向量,表示该位置上每个词可能出现的概率。

de_vocab.pad_idx
1
en_vocab.pad_idx
1
# vocabulary
src_vocab_size = len(de_vocab)
trg_vocab_size = len(en_vocab)
src_pad_idx = de_vocab.pad_idx
trg_pad_idx = en_vocab.pad_idx

# hyper-parameters
d_model = 512
d_ff = 2048
n_layers = 6
n_heads = 8

# 实例化模型
encoder = Encoder(src_vocab_size, d_model, n_heads, d_ff, n_layers, dropout_p=0.1)
decoder = Decoder(trg_vocab_size, d_model, n_heads, d_ff, n_layers, dropout_p=0.1)
model = Transformer(encoder, decoder)
model
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:02.990.638 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:02.991.862 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:02.992.688 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:02.993.516 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:02.994.185 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:02.994.915 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:02.995.568 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:02.996.266 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:02.996.959 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:02.997.586 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:02.998.267 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:02.998.978 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:02.999.676 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.335. [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.937. [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.166.8 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.453.2 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.524.5 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.623.3 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.692.2 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.766.2 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.834.0 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.900.5 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.970.2 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.103.94 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.111.08 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.118.13 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.124.63 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.130.95 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.137.87 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.144.49 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.151.83 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.176.86 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.183.87 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.190.47 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.197.07 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.204.39 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.210.85 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.217.92 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.224.53 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.230.66 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.238.00 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.244.67 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.252.26 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.269.49 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.275.71 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.282.52 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.289.50 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.296.50 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.303.39 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.324.11 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.330.71 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.337.50 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.344.61 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.351.72 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.365.85 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.373.02 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.379.57 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.386.09 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.393.12 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.399.66 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.
[WARNING] ME(226:281473141946672,MainProcess):2024-06-30-14:31:03.407.15 [mindspore/nn/layer/basic.py:199] For Dropout, this parameter `keep_prob` will be deprecated, please use `p` instead.





Transformer<
  (encoder): Encoder<
    (src_emb): Embedding<vocab_size=7882, embedding_size=512, use_one_hot=False, embedding_table=Parameter (name=encoder.src_emb.embedding_table, shape=(7882, 512), dtype=Float32, requires_grad=True), dtype=Float32, padding_idx=None>
    (pos_emb): PositionalEncoding<
      (dropout): Dropout<keep_prob=0.9>
      >
    (layers): CellList<
      (0): EncoderLayer<
        (enc_self_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=0.9>
            >
          >
        (pos_ffn): PoswiseFeedForward<
          (linear1): Dense<input_channels=512, output_channels=2048, has_bias=True>
          (linear2): Dense<input_channels=2048, output_channels=512, has_bias=True>
          (dropout): Dropout<keep_prob=0.9>
          (relu): ReLU<>
          >
        (add_norm1): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=encoder.layers.0.add_norm1.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=encoder.layers.0.add_norm1.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=0.9>
          >
        (add_norm2): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=encoder.layers.0.add_norm2.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=encoder.layers.0.add_norm2.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=0.9>
          >
        >
      (1): EncoderLayer<
        (enc_self_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=0.9>
            >
          >
        (pos_ffn): PoswiseFeedForward<
          (linear1): Dense<input_channels=512, output_channels=2048, has_bias=True>
          (linear2): Dense<input_channels=2048, output_channels=512, has_bias=True>
          (dropout): Dropout<keep_prob=0.9>
          (relu): ReLU<>
          >
        (add_norm1): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=encoder.layers.1.add_norm1.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=encoder.layers.1.add_norm1.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=0.9>
          >
        (add_norm2): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=encoder.layers.1.add_norm2.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=encoder.layers.1.add_norm2.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=0.9>
          >
        >
      (2): EncoderLayer<
        (enc_self_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=0.9>
            >
          >
        (pos_ffn): PoswiseFeedForward<
          (linear1): Dense<input_channels=512, output_channels=2048, has_bias=True>
          (linear2): Dense<input_channels=2048, output_channels=512, has_bias=True>
          (dropout): Dropout<keep_prob=0.9>
          (relu): ReLU<>
          >
        (add_norm1): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=encoder.layers.2.add_norm1.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=encoder.layers.2.add_norm1.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=0.9>
          >
        (add_norm2): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=encoder.layers.2.add_norm2.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=encoder.layers.2.add_norm2.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=0.9>
          >
        >
      (3): EncoderLayer<
        (enc_self_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=0.9>
            >
          >
        (pos_ffn): PoswiseFeedForward<
          (linear1): Dense<input_channels=512, output_channels=2048, has_bias=True>
          (linear2): Dense<input_channels=2048, output_channels=512, has_bias=True>
          (dropout): Dropout<keep_prob=0.9>
          (relu): ReLU<>
          >
        (add_norm1): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=encoder.layers.3.add_norm1.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=encoder.layers.3.add_norm1.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=0.9>
          >
        (add_norm2): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=encoder.layers.3.add_norm2.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=encoder.layers.3.add_norm2.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=0.9>
          >
        >
      (4): EncoderLayer<
        (enc_self_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=0.9>
            >
          >
        (pos_ffn): PoswiseFeedForward<
          (linear1): Dense<input_channels=512, output_channels=2048, has_bias=True>
          (linear2): Dense<input_channels=2048, output_channels=512, has_bias=True>
          (dropout): Dropout<keep_prob=0.9>
          (relu): ReLU<>
          >
        (add_norm1): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=encoder.layers.4.add_norm1.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=encoder.layers.4.add_norm1.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=0.9>
          >
        (add_norm2): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=encoder.layers.4.add_norm2.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=encoder.layers.4.add_norm2.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=0.9>
          >
        >
      (5): EncoderLayer<
        (enc_self_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=0.9>
            >
          >
        (pos_ffn): PoswiseFeedForward<
          (linear1): Dense<input_channels=512, output_channels=2048, has_bias=True>
          (linear2): Dense<input_channels=2048, output_channels=512, has_bias=True>
          (dropout): Dropout<keep_prob=0.9>
          (relu): ReLU<>
          >
        (add_norm1): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=encoder.layers.5.add_norm1.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=encoder.layers.5.add_norm1.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=0.9>
          >
        (add_norm2): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=encoder.layers.5.add_norm2.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=encoder.layers.5.add_norm2.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=0.9>
          >
        >
      >
    >
  (decoder): Decoder<
    (trg_emb): Embedding<vocab_size=5898, embedding_size=512, use_one_hot=False, embedding_table=Parameter (name=decoder.trg_emb.embedding_table, shape=(5898, 512), dtype=Float32, requires_grad=True), dtype=Float32, padding_idx=None>
    (pos_emb): PositionalEncoding<
      (dropout): Dropout<keep_prob=0.9>
      >
    (layers): CellList<
      (0): DecoderLayer<
        (dec_self_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=1.0>
            >
          >
        (dec_enc_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=1.0>
            >
          >
        (pos_ffn): PoswiseFeedForward<
          (linear1): Dense<input_channels=512, output_channels=2048, has_bias=True>
          (linear2): Dense<input_channels=2048, output_channels=512, has_bias=True>
          (dropout): Dropout<keep_prob=1.0>
          (relu): ReLU<>
          >
        (add_norm1): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.0.add_norm1.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.0.add_norm1.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        (add_norm2): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.0.add_norm2.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.0.add_norm2.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        (add_norm3): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.0.add_norm3.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.0.add_norm3.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        >
      (1): DecoderLayer<
        (dec_self_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=1.0>
            >
          >
        (dec_enc_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=1.0>
            >
          >
        (pos_ffn): PoswiseFeedForward<
          (linear1): Dense<input_channels=512, output_channels=2048, has_bias=True>
          (linear2): Dense<input_channels=2048, output_channels=512, has_bias=True>
          (dropout): Dropout<keep_prob=1.0>
          (relu): ReLU<>
          >
        (add_norm1): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.1.add_norm1.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.1.add_norm1.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        (add_norm2): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.1.add_norm2.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.1.add_norm2.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        (add_norm3): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.1.add_norm3.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.1.add_norm3.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        >
      (2): DecoderLayer<
        (dec_self_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=1.0>
            >
          >
        (dec_enc_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=1.0>
            >
          >
        (pos_ffn): PoswiseFeedForward<
          (linear1): Dense<input_channels=512, output_channels=2048, has_bias=True>
          (linear2): Dense<input_channels=2048, output_channels=512, has_bias=True>
          (dropout): Dropout<keep_prob=1.0>
          (relu): ReLU<>
          >
        (add_norm1): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.2.add_norm1.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.2.add_norm1.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        (add_norm2): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.2.add_norm2.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.2.add_norm2.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        (add_norm3): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.2.add_norm3.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.2.add_norm3.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        >
      (3): DecoderLayer<
        (dec_self_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=1.0>
            >
          >
        (dec_enc_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=1.0>
            >
          >
        (pos_ffn): PoswiseFeedForward<
          (linear1): Dense<input_channels=512, output_channels=2048, has_bias=True>
          (linear2): Dense<input_channels=2048, output_channels=512, has_bias=True>
          (dropout): Dropout<keep_prob=1.0>
          (relu): ReLU<>
          >
        (add_norm1): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.3.add_norm1.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.3.add_norm1.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        (add_norm2): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.3.add_norm2.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.3.add_norm2.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        (add_norm3): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.3.add_norm3.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.3.add_norm3.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        >
      (4): DecoderLayer<
        (dec_self_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=1.0>
            >
          >
        (dec_enc_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=1.0>
            >
          >
        (pos_ffn): PoswiseFeedForward<
          (linear1): Dense<input_channels=512, output_channels=2048, has_bias=True>
          (linear2): Dense<input_channels=2048, output_channels=512, has_bias=True>
          (dropout): Dropout<keep_prob=1.0>
          (relu): ReLU<>
          >
        (add_norm1): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.4.add_norm1.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.4.add_norm1.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        (add_norm2): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.4.add_norm2.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.4.add_norm2.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        (add_norm3): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.4.add_norm3.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.4.add_norm3.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        >
      (5): DecoderLayer<
        (dec_self_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=1.0>
            >
          >
        (dec_enc_attn): MultiHeadAttention<
          (W_Q): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_K): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_V): Dense<input_channels=512, output_channels=512, has_bias=True>
          (W_O): Dense<input_channels=512, output_channels=512, has_bias=True>
          (attention): ScaledDotProductAttention<
            (softmax): Softmax<>
            (dropout): Dropout<keep_prob=1.0>
            >
          >
        (pos_ffn): PoswiseFeedForward<
          (linear1): Dense<input_channels=512, output_channels=2048, has_bias=True>
          (linear2): Dense<input_channels=2048, output_channels=512, has_bias=True>
          (dropout): Dropout<keep_prob=1.0>
          (relu): ReLU<>
          >
        (add_norm1): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.5.add_norm1.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.5.add_norm1.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        (add_norm2): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.5.add_norm2.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.5.add_norm2.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        (add_norm3): AddNorm<
          (layer_norm): LayerNorm<normalized_shape=(512,), begin_norm_axis=-1, begin_params_axis=-1, gammaParameter (name=decoder.layers.5.add_norm3.layer_norm.gamma, shape=(512,), dtype=Float32, requires_grad=True), beta=Parameter (name=decoder.layers.5.add_norm3.layer_norm.beta, shape=(512,), dtype=Float32, requires_grad=True)>
          (dropout): Dropout<keep_prob=1.0>
          >
        >
      >
    (projection): Dense<input_channels=512, output_channels=5898, has_bias=True>
    >
  >



\

这段代码展示的是Transformer模型解码器中的一个DecoderLayer结构。解码器层是Transformer解码器的核心组成部分,负责在考虑先前生成的词以及编码器提供的信息的基础上,生成目标序列的下一个词。下面是各部分的中文解释:

DecoderLayer结构概览

  • dec_self_attn (自注意力层): 负责捕获目标序列中不同位置间的依赖关系。它通过三个线性变换(W_Q, W_K, W_V)分别将输入转化为查询(Query)、键(Key)和值(Value)向量,然后通过Scaled Dot-Product Attention计算注意力权重,最后通过W_O变换合并这些信息以更新每个位置的表示。注意力机制中包含了一个缩放因子和Dropout层来控制复杂度和正则化。

  • dec_enc_attn (编码器-解码器注意力层): 用于结合编码器的输出信息与解码器当前的状态。这一层的结构与自注意力层类似,但它的查询向量来自于解码器,而键和值向量来自于编码器的输出。这样解码器在生成目标序列时可以参考源序列的相关信息。

  • pos_ffn (位置前馈网络): 包含两层线性变换(linear1linear2)以及激活函数ReLU和Dropout层。它的作用是引入非线性并进一步丰富特征表示,增加模型的表达能力。

  • add_norm1/2/3 (残差连接与层归一化): 在每个子层(自注意力、编码器-解码器注意力和前馈网络)之后,都有一个残差连接(将输入直接加回)和一个LayerNorm层,用来稳定训练并加速收敛。残差连接帮助信息直接流通,而LayerNorm则确保每一层的输入具有稳定的均值和方差,有利于训练稳定。每个add_norm还包括一个Dropout层用于正则化,但在这个配置中,所有Dropout的keep_prob=1.0意味着不执行随机失活,即不进行Dropout操作。

综上所述,DecoderLayer通过自注意力机制捕捉目标序列的内在依赖,利用编码器-解码器注意力融合源序列信息,再通过前馈网络增强表达力,最后通过残差和层归一化保证训练的稳定性和效率。这样的设计使得解码器能够高效地生成高质量的目标序列。

在神经网络模型中处理序列数据时,如自然语言处理任务中的机器翻译,引入src_pad_idxtrg_pad_idx是为了标识输入序列(源语言)和目标序列(目标语言)中的填充(padding)元素。这些索引值对于模型训练和预测过程中的几个关键操作至关重要,主要涉及以下几个方面:

  1. 注意力机制的遮挡(Masking):在Transformer模型中,自注意力(Self-Attention)机制和编码器-解码器注意力(Encoder-Decoder Attention)都需要用到掩码。对于输入序列中的填充部分,模型需要确保这些位置不参与注意力计算,也不对损失函数或最终输出产生影响。通过指定src_pad_idxtrg_pad_idx,模型可以在计算注意力得分时为这些位置设置极小值(通常是负无穷大),这样在softmax操作后,这些位置的权重会变为0,从而被“遮挡”或忽略。

  2. 损失计算:在计算交叉熵损失时,模型通常会为填充位置的预测分配一个特殊的标记(通常是-100),并告知损失函数忽略这些位置,以免它们对模型的学习造成负面影响。这是通过设置一个掩码向量实现的,该向量与标签序列对齐,其中填充位置标记为False,有效位置标记为True。在PyTorch等框架中,这可以通过torch.nn.CrossEntropyLoss(ignore_index=trg_pad_idx)来实现,它会自动忽略指定索引处的损失计算。

  3. 输入序列对齐:在编码器和解码器中,模型需要知道序列的实际长度,以避免对填充部分进行不必要的计算。虽然序列的实际长度可以单独记录,但直接在序列中用特定的索引(如pad_idx)填充到最大长度,简化了输入处理流程,并且有利于批处理操作的一致性。

因此,src_pad_idx = de_vocab.pad_idxtrg_pad_idx = en_vocab.pad_idx确保了模型能够识别并适当处理德语(源语言)和英语(目标语言)输入中的填充元素,这对于维持模型性能、提高训练效率以及正确计算损失函数都是必要的。

在Transformer模型或者更广泛地说,在许多序列模型架构中,d_ff代表了“前馈网络(Feed Forward Network)”或者“全连接层(Fully Connected Layer)”的隐藏层尺寸。在Transformer模型的上下文中,d_ff特指的是编码器(Encoder)和解码器(Decoder)中每个多头自注意力(Multi-Head Attention)层之后的前馈神经网络的维度。

具体来说,Transformer架构中的每一层除了包含多头自注意力模块外,还包括了两个连续的线性层(全连接层),中间通常会插入一个ReLU或其他激活函数。这两个线性层的中间层,也就是隐藏层的维度被设定为d_ff。例如,你提到的d_ff = 2048意味着这个前馈网络的隐藏层有2048个神经元。

这个前馈网络的主要作用有以下几点:

  1. 增加模型容量:较大的d_ff可以为模型提供更多的参数,从而增强模型学习复杂特征的能力,有助于提高模型的表达能力。

  2. 非线性变换:多头自注意力层虽然强大,但它本质上是线性的。引入带有非线性激活函数(如ReLU)的前馈网络,可以引入非线性,使模型能够学习到数据中的非线性关系。

  3. 丰富表示:前馈网络能够对自注意力层输出的向量进行进一步的变换和加工,为模型提供额外的表示学习能力,有助于模型捕捉更多的语言结构和语义信息。

  4. 残差连接的平衡:Transformer模型中,每个子层(包括自注意力层和前馈网络层)之后都有残差连接(Residual Connection)和层归一化(Layer Normalization)。较大的d_ff可以帮助平衡残差连接中的信息流,确保模型能够有效地学习并传递信息。

总之,d_ff的设置是模型架构设计中的一个重要超参数,它直接影响模型的复杂度、学习能力和最终的性能。在实践中,选择合适的d_ff值往往需要通过实验来调整,寻找模型性能与计算资源消耗之间的最佳平衡点。

模型训练 & 模型评估

定义损失函数与优化器。

  • 损失函数:定义如何计算模型输出(logits)与目标(targets)之间的误差,这里可以使用交叉熵损失(CrossEntropyLoss)
  • 优化器:MindSpore将模型优化算法的实现称为优化器。优化器内部定义了模型的参数优化过程(即梯度如何更新至模型参数),所有优化逻辑都封装在优化器对象中。
loss_fn = nn.CrossEntropyLoss(ignore_index=trg_pad_idx)
optimizer = nn.Adam(model.trainable_params(), learning_rate=0.0001)

在神经网络训练中,特别是涉及到序列数据的任务(如文本翻译、文本分类等),nn.CrossEntropyLoss中的ignore_index参数和下三角掩码(在Transformer模型的自注意力机制中)起着不同的但互补的作用,共同促进模型的高效训练。下面分别解释这两个概念的作用及它们如何协同工作。

ignore_index=trg_pad_idx

在使用nn.CrossEntropyLoss作为损失函数时,ignore_index参数指定一个特定的目标类别索引,该索引对应的数据在计算损失时将被忽略。在机器翻译等序列生成任务中,目标序列经常会被填充(padding)到相同长度以便于批处理,而trg_pad_idx正是目标词汇表中表示padding的索引。通过设置ignore_index=trg_pad_idx,模型在计算损失时会自动排除所有对应于padding位置的预测,避免这些无关的预测结果影响模型的优化方向和学习效率。

下三角掩码(未来信息遮挡)

在Transformer模型的解码器部分,自注意力层会使用一个下三角的掩码矩阵,这个掩码确保在预测序列中的每一个位置时,模型只能看到并基于序列中之前的位置(包括输入序列和已生成的序列部分)的信息,而不能看到当前位置或之后位置的信息。这个操作保证了模型的预测遵循时间上的因果关系,即预测当前位置的输出时,不违反序列生成的逻辑顺序。

它们如何协同工作

  • ignore_index 主要是在损失计算层面起作用,它通过排除padding位置的影响,确保模型在优化时专注于真实内容的预测准确性,而不是浪费计算资源在无意义的padding上,这有助于提升模型学习的有效性和效率。

  • 下三角掩码 则是在模型的结构设计层面保障了序列生成的合理性,通过限制信息流的方向,确保解码过程中的自注意力计算遵循时间序列的逻辑,避免了信息泄露,这是Transformer模型能够进行有效序列生成的基础。

综合来看,ignore_index参数和下三角掩码机制在Transformer模型中分别从损失计算和信息流向控制两个角度,共同促进了模型训练的有效性和逻辑的正确性,是序列生成任务中不可或缺的设计。

在Transformer模型中,虽然它摒弃了传统循环神经网络(RNN)中的循环结构,但仍然能实现按顺序逐个词预测的机制,这是通过其独特的自注意力(Self-Attention)机制和掩码策略来实现的,尤其是在解码器部分。

如何实现逐词预测

  1. 编码器-解码器架构:Transformer模型采用编码器-解码器架构处理序列到序列的转换问题,如机器翻译。编码器处理输入序列,生成一个上下文丰富的表示;解码器则基于这个表示和已生成的部分输出序列进行预测。

  2. 自注意力中的掩码:在解码器的第一层自注意力中,会应用一个称为“ causal mask”(因果掩码)的下三角矩阵。这个掩码确保当模型预测序列中的第(t)个词时,它只能看到(t-1)时刻及之前的所有词的信息。换句话说,当前位置的计算不会考虑当前位置或之后位置的信息,从而模拟了序列生成的时序性,实现了按顺序逐词预测。

  3. 非循环的过程:与RNN不同,Transformer模型中的这种逐词预测不是通过循环状态传递实现的,而是通过并行计算的方式。在每个解码步骤中,所有位置的词同时参与计算,但是通过掩码确保了信息的流向符合时间顺序。

  4. 逐个词生成:在实际应用中,比如训练完成后进行推理,模型通常会以一种迭代或递归的方式生成序列。开始时,可能给定一个起始符号(如),模型基于此预测第一个词,然后将第一个词与输入序列一起送入模型预测第二个词,如此循环直至达到终止条件(如遇到符号或达到最大长度限制)。

因此,尽管Transformer没有显式的循环结构,它依然能够高效且准确地实现按时间顺序的逐词预测,这得益于其精心设计的自注意力机制和掩码策略。

在Transformer模型的上下文中,W_Q, W_K, W_V, 和 W_O 是多头注意力(Multi-Head Attention)机制中使用的密集(Dense)层,也称为全连接层。这些层主要用于对输入向量进行线性变换,以准备用于注意力计算或者从注意力结果中合成最终的输出。下面我将通过一个简化的例子,说明在t时刻和t+1时刻这些权重矩阵是如何工作的,尽管实际上它们不会随时间变化,但通过场景模拟可以帮助理解它们的功能。

基本概念

  • t时刻: 想象我们正在处理序列中的第t个位置。
  • t+1时刻: 接着处理序列中的下一个位置,即第t+1个位置。
  • 输入向量: 对于解码器的自注意力层,每个位置的输入向量通常代表该位置的隐藏状态,维度为512。
  • 权重矩阵: W_Q, W_K, W_V, 和 W_O 分别是查询(Query)、键(Key)、值(Value)和输出(Output)的变换矩阵,它们的形状均为512x512,意味着它们将512维的输入变换为另一个512维的向量。

示例说明

在t时刻:

  • 输入: 假设我们有一个512维的向量X_t代表序列中第t个位置的输入。

  • 变换过程:

    • 查询变换: W_Q * X_t 计算得到查询向量Q_t,用于衡量当前位置与其他位置的相关性。
    • 键变换: W_K * X_t 得到键向量K_t,用于比较。
    • 值变换: W_V * X_t 得到值向量V_t,存储了当前位置的信息。
    • 注意,实际上在多头注意力中,输入会先分成几部分,每部分分别做变换,但为了简化,这里合并描述。
  • 注意力计算: 不在此处详述,但基于Q_t, K_tV_t计算注意力权重,进而加权求和得到上下文向量。

  • 输出变换: 使用W_O对上下文向量进行变换,得到t时刻该位置的更新表示。

在t+1时刻:

过程与t时刻相同,只是输入变为序列中第t+1个位置的向量X_{t+1},通过同样的W_Q, W_K, W_V, 和 W_O矩阵变换得到Q_{t+1}, K_{t+1}, V_{t+1}以及更新后的表示。重要的是,虽然输入变了,但权重矩阵在整个序列处理过程中保持不变,这意味着这些矩阵学习到了如何将输入映射到有助于注意力机制操作的形式。

总结

W_Q, W_K, W_V, 和 W_O作为固定的线性变换矩阵,在每个时间步上对输入进行变换,从而驱动注意力机制的运行。这些变换矩阵在整个序列处理期间保持不变,通过学习,它们能有效提取和利用序列中的信息。

模型训练逻辑

MindSpore在模型训练部分使用了函数式编程(FP)。

构造函数 → 函数变换 → 函数调用 \text{构造函数}\rightarrow \text{函数变换} \rightarrow \text{函数调用} 构造函数函数变换函数调用

  1. Network+loss function直接构造正向函数
  2. 函数变换,获得梯度计算(反向传播)函数
  3. 构造训练过程函数
  4. 调用函数进行训练

定义前向网络计算逻辑。

在训练过程中,表示句子结尾的<eos>占位符应是被模型预测出来,而不是作为模型的输入,所以在处理Decoder的输入时,我们需要移除目标序列最末的<eos>占位符。

trg = [ <bos> , x 1 , x 2 , . . . , x n , <eos> ] \text{trg} = [\text{<bos>}, x_1, x_2, ..., x_n, \text{<eos>}] trg=[<bos>,x1,x2,...,xn,<eos>]
trg[:-1] = [ <bos> , x 1 , x 2 , . . . , x n ] \text{trg[:-1]} = [\text{<bos>}, x_1, x_2, ..., x_n] trg[:-1]=[<bos>,x1,x2,...,xn]

其中, x i x_i xi代表目标序列中第i个表示实际内容的词元。

我们期望最终的输出包含表示句末的<eos>,不包含表示句首的<bos>,所以在计算损失时,需要同样去除的目标序列的句首<bos>占位符,再进行比较。

output = [ y 1 , y 2 , . . . , y n , <eos> ] \text{output} = [y_1, y_2, ..., y_n, \text{<eos>}] output=[y1,y2,...,yn,<eos>]
trg[1:] = [ x 1 , x 2 , . . . , x n , <bos> ] \text{trg[1:]} = [x_1, x_2, ..., x_n, \text{<bos>}] trg[1:]=[x1,x2,...,xn,<bos>]

其中, y i y_i yi表示预测的第i个实际内容词元。

def forward(enc_inputs, dec_inputs):
    """前向网络
    enc_inputs: [batch_size, src_len]
    dec_inputs: [batch_size, trg_len]
    """
    # 训练过程中不应该包含目标序列中的最后一个词元<eos>
    # logits: [batch_size * (trg_len - 1), trg_vocab_size]
    logits, _, _, _ = model(enc_inputs, dec_inputs[:, :-1], src_pad_idx, trg_pad_idx)
    
    # 推理结果不应该包含目标序列中的第一个词元<bos>
    # targets: [batch_size * (trg_len -1), ]
    targets = dec_inputs[:, 1:].view(-1)
    loss = loss_fn(logits, targets)

    return loss

定义梯度计算函数。

为了优化模型参数,需要求参数对loss的导数。我们调用mindspore.ops.value_and_grad函数,来获得function的微分函数。

value-and-grad

常用到的参数有三种:

  • fn:待求导的函数;
  • grad_position:指定求导输入位置的索引;
  • weights:指定求导的参数;

由于使用Cell封装神经网络模型,模型参数为Cell的内部属性,此时我们不需要使用grad_position指定对函数输入求导,因此将其配置为None。对模型参数求导时,我们使用weights参数,使用model.trainable_params()方法从Cell中取出可以求导的参数。

# 反向传播计算梯度
grad_fn = ops.value_and_grad(forward, None, optimizer.parameters)

定义训练一个step的逻辑。

# 训练一个step的逻辑
def train_step(enc_inputs, dec_inputs):
    # 反向传播,获得梯度
    loss, grads = grad_fn(enc_inputs, dec_inputs)
    # 权重更新
    optimizer(grads)
    return loss

定义整体训练逻辑。

在训练中,模型会以最小化损失为目标更新模型权重,故模型状态需设置为训练model.set_train(True)

with tqdm(total=5) as t:
    print(t)
  0%|          | 0/5 [00:00<?, ?it/s]

  0%|          | 0/5 [00:00<?, ?it/s]
def train(iterator, epoch=0):
    model.set_train(True)
    num_batches = len(iterator)
    total_loss = 0  # 所有batch训练loss的累加
    total_steps = 0  # 训练步数

    with tqdm(total=num_batches) as t:
        t.set_description(f'EpochHHHH: {epoch}')
        for src, src_len, trg in iterator():
            # 计算当前batch数据的loss
            loss = train_step(src, trg)
            total_loss += loss.asnumpy()
            total_steps += 1
            # 当前的平均loss
            curr_loss = total_loss / total_steps
            t.set_postfix({'loss': f'{curr_loss:.2f}'})
            t.update(1)

    return total_loss / total_steps

定义模型评估逻辑。

在评估中,仅需正向计算loss,无需更新模型参数,故模型状态需设置为训练model.set_train(False)

def evaluate(iterator):
    model.set_train(False)
    num_batches = len(iterator)
    total_loss = 0  # 所有batch训练loss的累加
    total_steps = 0  # 训练步数

    with tqdm(total=num_batches) as t:
        for src, _, trg in iterator():
            # 计算当前batch数据的loss
            loss = forward(src, trg)
            total_loss += loss.asnumpy()
            total_steps += 1
            # 当前的平均loss
            curr_loss = total_loss / total_steps
            t.set_postfix({'VVVloss': f'{curr_loss:.2f}'})
            t.update(1)

    return total_loss / total_steps
模型训练

数据集遍历迭代,一次完整的数据集遍历成为一个epoch。我们逐个epoch打印训练的损失值和评估精度,并通过save_checkpoint保存评估精度最高的ckpt文件(transformer.ckpt)到home_path/.mindspore_examples/transformer.ckpt。

cache_dir="./"
from mindspore import save_checkpoint

num_epochs = 2  # 训练迭代数
best_valid_loss = float('inf')  # 当前最佳验证损失
ckpt_file_name = os.path.join(cache_dir, 'transformer.ckpt')  # 模型保存路径


for i in range(num_epochs):
    # 模型训练,网络权重更新
    train_loss = train(train_iterator, i)
    # 网络权重更新后对模型进行验证
    valid_loss = evaluate(valid_iterator)
    
    # 保存当前效果最好的模型
    if valid_loss < best_valid_loss:
        best_valid_loss = valid_loss
        save_checkpoint(model, ckpt_file_name)

模型推理

首先,通过load_checkpointload_param_into_net将训练好的模型参数加载入新实例化的模型中。

from mindspore import load_checkpoint, load_param_into_net

# 实例化新模型
encoder = Encoder(src_vocab_size, d_model, n_heads, d_ff, n_layers, dropout_p=0.1)
decoder = Decoder(trg_vocab_size, d_model, n_heads, d_ff, n_layers, dropout_p=0.1)
new_model = Transformer(encoder, decoder)

# 加载之前训练好的模型
param_dict = load_checkpoint(ckpt_file_name)
load_param_into_net(new_model, param_dict)

推理过程中无需对模型参数进行更新,所以这里model.set_train(False)

我们输入一个德文语句,期望可以返回翻译好的英文语句。

首先通过Encoder提取德文序列中的特征信息,并将其传输至Decoder。

Decoder最开始的输入为起始占位符<bos>,每次会根据输入预测下一个出现的单词,并对输入进行更新,直到预测出终止占位符<eos>。

def inference(sentence, max_len=32):
    """模型推理:输入一个德语句子,输出翻译后的英文句子
    enc_inputs: [batch_size(1), src_len]
    """
    new_model.set_train(False)

    # 对输入句子进行分词
    if isinstance(sentence, str):
        tokens = [tok.lower() for tok in re.findall(r'\w+|[^\w\s]', sentence.rstrip())]
    else:
        tokens = [token.lower() for token in sentence]
    
    # 补充起始、终止占位符,统一序列长度
    if len(tokens) > max_len - 2:
        src_len = max_len
        tokens = ['<bos>'] + tokens[:max_len - 2] + ['<eos>']
    else:
        src_len = len(tokens) + 2
        tokens = ['<bos>'] + tokens + ['<eos>'] + ['<pad>'] * (max_len - src_len)

    # 将德语单词转换为数字索引,并进一步转换为tensor
    # enc_inputs: [1, src_len]
    indexes = de_vocab.encode(tokens)
    enc_inputs = Tensor(indexes, mstype.float32).expand_dims(0)
    
    # 将输入送入encoder,获取信息
    enc_outputs, _ = new_model.encoder(enc_inputs, src_pad_idx)

    # 初始化decoder输入,此时仅有句首占位符<pad>
    # dec_inputs: [1, 1]
    dec_inputs = Tensor([[en_vocab.bos_idx]], mstype.float32)

    max_len = enc_inputs.shape[1]
    for _ in range(max_len):
        # dec_outputs: [batch_size(1) * len(dec_inputs), trg_vocab_size]
        dec_outputs, _, _ = new_model.decoder(dec_inputs, enc_inputs, enc_outputs, src_pad_idx, trg_pad_idx)
        dec_logits = dec_outputs.view((-1, dec_outputs.shape[-1]))

        # 找到下一个词的概率分布,并输出预测
        # dec_logits: [1, trg_vocab_size]
        # pred: [1, 1]
        dec_logits = dec_logits[-1, :]
        pred = dec_logits.argmax(axis=0).expand_dims(0).expand_dims(0)
        pred = pred.astype(mstype.float32)

        # 更新dec_inputs
        dec_inputs = ops.concat((dec_inputs, pred), axis=1)

        # 如果出现<eos>,则终止循环
        if int(pred.asnumpy()[0]) == en_vocab.eos_idx:
            break

    # 将数字索引转换为英文单词
    trg_indexes = [int(i) for i in dec_inputs.view(-1).asnumpy()]
    eos_idx = trg_indexes.index(en_vocab.eos_idx) if en_vocab.eos_idx in trg_indexes else -1
    trg_tokens = en_vocab.decode(trg_indexes[1:eos_idx])

    return trg_tokens

以测试数据集中的第一组语句为例,进行测试。

example_idx = 0

src = test_dataset[example_idx][0]
trg = test_dataset[example_idx][1]
pred_trg = inference(src)

print(f'src = {src}')
print(f'trg = {trg}')
print(f"predicted trg = {pred_trg}")

BLEU得分

双语替换评测得分(bilingual evaluation understudy,BLEU)为衡量文本翻译模型生成出来的语句好坏的一种算法,它的核心在于评估机器翻译的译文 pred \text{pred} pred 与人工翻译的参考译文 label \text{label} label 的相似度。通过对机器译文的片段与参考译文进行比较,计算出各个片段的的分数,并配以权重进行加和,基本规则为:

  1. 惩罚过短的预测,即如果机器翻译出来的译文相对于人工翻译的参考译文过于短小,则命中率越高,需要施加更多的惩罚;
  2. 对长段落匹配更高的权重,即如果出现长段落的完全命中,说明机器翻译的译文更贴近人工翻译的参考译文;

BLEU的公式如下:

e x p ( m i n ( 0 , 1 − l e n ( label ) l e n ( pred ) ) Π n = 1 k p n 1 / 2 n ) exp(min(0, 1-\frac{len(\text{label})}{len(\text{pred})})\Pi^k_{n=1}p_n^{1/2^n}) exp(min(0,1len(pred)len(label))Πn=1kpn1/2n)

  • len(label):人工翻译的译文长度
  • len(pred):机器翻译的译文长度
  • p_n:n-gram的精度

我们可以调用nltk中的corpus_bleu函数来计算BLEU,在此之前,需要手动下载nltk

pip install nltk

from nltk.translate.bleu_score import corpus_bleu

def calculate_bleu(dataset, max_len=50):
    trgs = []
    pred_trgs = []
    
    for data in dataset[:10]:
        
        src = data[0] # 源语句:德语
        trg = data[1] # 目标语句:英语
        
        # 获取模型预测结果
        pred_trg = inference(src, max_len)
        pred_trgs.append(pred_trg)
        trgs.append([trg])
        
    return corpus_bleu(trgs, pred_trgs)

# 计算BLEU Score
bleu_score = calculate_bleu(test_dataset)

print(f'BLEU score = {bleu_score*100:.2f}')
print("yangge  mindspore 打卡第九天  trainsformer之训练逻辑文本翻译 2024-06-30")




  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值