Pytorch 焊炬和批次
我很难理解批如何在Pytorch框架中发挥作用 在此模型中:Pytorch 焊炬和批次,pytorch,Pytorch,我很难理解批如何在Pytorch框架中发挥作用 在此模型中: class MyModel(nn.Module): def __init__(self): super(MyModel, self).__init__() # 28x28x1 => 26x26x32 self.conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3) self.d1 =
class MyModel(nn.Module):
def __init__(self):
super(MyModel, self).__init__()
# 28x28x1 => 26x26x32
self.conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3)
self.d1 = nn.Linear(26 * 26 * 32, 128)
self.d2 = nn.Linear(128, 10)
def forward(self, x):
# 32x1x28x28 => 32x32x26x26
x = self.conv1(x)
x = F.relu(x)
# flatten => 32 x (32*26*26)
x = x.flatten(start_dim = 1)
#x = x.view(32, -1)
# 32 x (32*26*26) => 32x128
x = self.d1(x)
x = F.relu(x)
# logits => 32x10
logits = self.d2(x)
out = F.softmax(logits, dim=1)
return out
在正向定义中,我们传入一些
x
,即从数据加载器为批处理传递聚合图像。此处,32x1x28x28
尺寸表示一批中有32个图像。我们是否忽略了这一事实,而Pytorch将Conv2d应用于每个样本?前向传播似乎只与单个图像相关。事实上,网络对批次是不可知的:该模型旨在对单个图像进行分类
那么为什么我们需要批量生产呢?每个模型都有权重(aka参数),需要使用训练图像优化权重,以便模型尽可能正确地对图像进行分类。
此优化过程通常使用以下方法执行:我们使用权重的当前值对一批图像进行分类。使用当前模型所做的预测以及我们知道的预期预测(“标签”),我们可以计算权重梯度并改进模型。事实上,网络对批次不可知:该模型设计用于对单个图像进行分类 那么为什么我们需要批量生产呢?
每个模型都有权重(aka参数),需要使用训练图像优化权重,以便模型尽可能正确地对图像进行分类。
此优化过程通常使用以下方法执行:我们使用权重的当前值对一批图像进行分类。使用当前模型所做的预测,以及我们知道的预期预测(“标签”),我们可以计算权重的梯度并改进模型。如果我正确理解了你,我不会起诉你,如果我没有,我会这么说。基本上,Pytorch使用矩阵乘法,一次计算全部输出,这包括批处理中的所有图像。如果我理解正确,我不是sue,如果我没有理解,那么我就这么说。基本上Pytork使用矩阵乘法,一次性计算输出,这包括批处理中的所有图像。