我正在看这个pytorch入门教程:
使用zero_grad()
函数将梯度归零,这意味着它正在使用迷你批处理运行,这是正确的假设吗?如果是,那么在哪里定义批处理大小?
我为nn.conv2d
找到了以下内容:
For example, nn.Conv2d will take in a 4D Tensor of nSamples x nChannels x Height x Width.
在这种情况下,nSamples
的批次大小是多少?
但是如何为nn.Linear
图层指定批处理大小?您在加载数据时决定什么是迷你批处理?
我在这里做出一些可能完全不正确的假设,如果我错了,请纠正我。 谢谢!
答案 0 :(得分:1)
您在数据加载器中预定义了batch_Size,对于线性图层,您无需指定批处理大小,但可以指定上一层的特征数以及希望在线性操作后获得的特征数。
这是Pytorch文档中的代码示例
m = nn.Linear(20, 30)
input = Variable(torch.randn(128, 20))
output = m(input)
print(output.size())
答案 1 :(得分:1)
正如Ryan所说,您不必在Lieanr图层中指定批处理大小。
在这里,我将为您添加一些内容,以阐明更多细节。
我们首先考虑线性层的方程:
其中X是张量为batch_size * in_feats_dim的张量,W为大小为out_feats_dim和in_feats_dim的权重矩阵,b为大小为out_feats_dim的偏差向量。
到目前为止,您可能已经发现参数W和b与批量大小无关。
您可以在Pytorch nn.module.functional.linear的第1000行到第1002行中检查实现。它实际上与我们上面讨论的内容匹配。