神经网络维度变化说明/batch的意义

神经网络维度变化说明/batch的意义

假设我们现在又100个样本,每一个样本的特征的向量是1×9999([1,2,…,9999])

首先我们先创建一个2层神经网络模型,只包含的输入层与一个隐藏层。输入层的dim是100,隐藏层是50。接下计算一次前向传播获得的embedding的维度

构建神经网络参数

输入层:

由于输入特征的dim是9999,而input_layer的dim是100。所以这里需要构建用于参数矩阵用于降维,该参数矩阵的维度的(9999,100)。

隐藏层:

input_layer的dim是100,而hid_dim的维度是50,所以这里的参数矩阵的维度是(100,50)

反向传播:

简略记作更新一次权重参数

100个样本一次全部输入神经网络模型:

注:为避免转置带来的混淆,这里默认已经完成转置。

每一个样本,通过一次神经网络之后,都会生成一个embedding,且完成一次反向传播。需要100次才能完成训练

维度变化:
样 本 a l l = [ [ x 1 ] , [ x 2 ] , . . . , [ x 999 ] 100 × 9999 输入层 = [ W i n p u t _ l a y e r ] 9999 × 100 隐藏层 = [ W h i d _ l a y e r ] 100 × 50 样 本 i ⋅ 输入层 ⋅ 隐藏层 = [ E m b e d d i n g ] 100 × 50 样本_all = [[x_1],[x2],...,[x_{999}]_{100×9999}\\ 输入层 = [W_{input\_layer}]_{9999×100}\\ 隐藏层 = [W_{hid\_layer}]_{100×50}\\ 样本_i · 输入层 · 隐藏层 = [Embedding]_{100×50} all=[[x1],[x2],...,[x999]100×9999输入层=[Winput_layer]9999×100隐藏层=[Whid_layer]100×50i输入层隐藏层=[Embedding]100×50
这里的参数更新了100次

以batch_size=20输入神经网络:

需要训练5个batch才能完成,每一次batch完成之后更新一次参数

维度变化:
样 本 a l l = [ [ x 1 ] , [ x 2 ] , . . . , [ x 999 ] 20 × 9999 输入层 = [ W i n p u t _ l a y e r ] 9999 × 100 隐藏层 = [ W h i d _ l a y e r ] 100 × 50 样 本 i ⋅ 输入层 ⋅ 隐藏层 = [ E m b e d d i n g ] 20 × 50 样本_all = [[x_1],[x2],...,[x_{999}]_{20×9999}\\ 输入层 = [W_{input\_layer}]_{9999×100}\\ 隐藏层 = [W_{hid\_layer}]_{100×50}\\ 样本_i · 输入层 · 隐藏层 = [Embedding]_{20×50} all=[[x1],[x2],...,[x999]20×9999输入层=[Winput_layer]9999×100隐藏层=[Whid_layer]100×50i输入层隐藏层=[Embedding]20×50
重复5次以上操作,这里的参数更新了5次

意义:

  1. 提高计算效率:通过将数据划分为批次,可以并行处理每个批次中的样本,从而提高计算效率。相比于一次性处理所有样本,批处理可以更好地利用计算资源,加速训练过程。
  2. 减小内存占用:对于大规模数据集,一次性加载整个数据集可能会占用较大的内存。通过使用批处理,我们可以逐批次加载和处理数据,减少内存占用。
  3. 降低梯度估计的方差:在优化算法中,参数更新通常基于梯度的估计值。批处理可以提供对梯度的更稳定估计,因为它是基于一个批次中多个样本的平均梯度计算的。这可以减少梯度估计的方差,提高优化算法的稳定性。
  4. 增加模型泛化能力:通过随机抽取样本构成不同的批次,批处理可以引入更多的样本多样性,有助于提高模型的泛化能力。这是因为每个批次都是从整个数据集中随机选择的,可以更好地代表整体数据分布。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 PyTorch 中,可以通过在模型的输入层设置 `batch_size` 参数来指定每个 mini-batch 中的样本数目。具体来说,如果你要处理的数据集包含 `n` 个样本,可以将数据集分成若干个大小为 `batch_size` 的 mini-batch。然后,在对模型进行训练或测试时,可以依次将每个 mini-batch 作为输入,对模型进行训练或测试。 在 PyTorch 中,可以通过以下两种方式设置模型的 `batch_size` 参数: 1. 在定义数据加载器时,通过 `batch_size` 参数指定: ```python from torch.utils.data import DataLoader # 假设 dataset 是一个数据集,batch_size 是每个 mini-batch 的样本数目 dataloader = DataLoader(dataset, batch_size=batch_size) ``` 在这种方式中,可以使用 PyTorch 提供的 `DataLoader` 类来定义数据加载器,并通过 `batch_size` 参数来指定每个 mini-batch 的样本数目。在训练或测试模型时,可以依次遍历每个 mini-batch,并将其作为模型的输入。 2. 在定义模型时,通过输入层的 `batch_size` 参数指定: ```python import torch.nn as nn # 假设 input_size 是输入层的大小,batch_size 是每个 mini-batch 的样本数目 model = nn.Sequential( nn.Linear(input_size, hidden_size), nn.ReLU(), nn.Linear(hidden_size, output_size), ).to(device) model.batch_size = batch_size ``` 在这种方式中,可以在定义模型时,通过输入层的 `batch_size` 参数来指定每个 mini-batch 的样本数目。具体来说,可以在模型初始化之后,将 `batch_size` 参数设置为模型的属性,并在训练或测试模型时,将输入数据的第一个维度设置为 `batch_size`,即: ```python # 假设 x 是一个大小为 (batch_size, input_size) 的输入数据 x = torch.randn(batch_size, input_size).to(device) output = model(x) ``` 在这个示例中,我们首先定义了一个包含两个线性层和一个 ReLU 激活函数的神经网络模型,然后将其 `batch_size` 参数设置为 `batch_size`。在训练或测试模型时,我们将输入数据的第一个维度设置为 `batch_size`,并将其作为模型的输入。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值