如何在PyTorch基础示例中包含批量大小?

我是PyTorch的新手。以下是一个使用nn模块训练简单单层模型的基本示例,示例中使用了随机数据(来自这里

import torchN, D_in, H, D_out = 64, 1000, 100, 10x = torch.randn(N, D_in)y = torch.randn(N, D_out)model = torch.nn.Sequential(    torch.nn.Linear(D_in, H),    torch.nn.ReLU(),    torch.nn.Linear(H, D_out),)loss_fn = torch.nn.MSELoss(reduction='sum')optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)for t in range(500):    y_pred = model(x)    loss = loss_fn(y_pred, y)    print(t, loss.item())    optimizer.zero_grad()    loss.backward()    optimizer.step()

据我所知,示例中的批量大小等于1,换句话说,只使用64个点中的一个点来计算梯度和更新参数。我的问题是:如何修改这个示例,以便以大于1的批量大小来训练模型?


回答:

实际上,N就是批量大小。所以你只需要修改N,它当前设置为64。因此,每个训练批次中包含64个大小/维度为D_in的向量。

我查看了你发布的链接,你也可以看看其中的评论 – 那里也有一些解释 🙂

# -*- coding: utf-8 -*-import numpy as np# N是批量大小;D_in是输入维度;# H是隐藏维度;D_out是输出维度。N, D_in, H, D_out = 64, 1000, 100, 10# 创建随机输入和输出数据x = np.random.randn(N, D_in)y = np.random.randn(N, D_out)# 随机初始化权重w1 = np.random.randn(D_in, H)w2 = np.random.randn(H, D_out)learning_rate = 1e-6for t in range(500):    # 前向传递:计算预测的y    h = x.dot(w1)    h_relu = np.maximum(h, 0)    y_pred = h_relu.dot(w2)    # 计算并打印损失    loss = np.square(y_pred - y).sum()    print(t, loss)    # 反向传播以计算w1和w2相对于损失的梯度    grad_y_pred = 2.0 * (y_pred - y)    grad_w2 = h_relu.T.dot(grad_y_pred)    grad_h_relu = grad_y_pred.dot(w2.T)    grad_h = grad_h_relu.copy()    grad_h[h < 0] = 0    grad_w1 = x.T.dot(grad_h)    # 更新权重    w1 -= learning_rate * grad_w1    w2 -= learning_rate * grad_w2

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注