如何在某些维度上管理长度可变的手电筒?

时间:2019-05-29 14:07:08

标签: python pytorch

我现在正在编程自定义优化器,第一维bias的长度不确定,因为最后一批没有足够的数据来建立批处理。因此,具有固定batch_size的权重的初始化不能满足最后一批和固定长度权重之间的torch.add

bias = torch.randn(batch_size,units)
batch_data = generator(path)
# for example 
weights.shape # is (128,256)
# but the last batch has only 50 samples.
out = sigmoid(x*weights+bias) # where the length of first dimension is not mathed.

所以,我想知道是否可以创建一个张量,其中某个维度的长度可以是可变的,例如可变长度列表。

2 个答案:

答案 0 :(得分:0)

您为什么要bias依赖批次大小?在测试期间,您是否总是要使用完全相同大小的批次测试网络?如果是这样,那么小批量的意思是什么?

如果您仍然坚持使用较小的批次,则可以忽略bias的“未使用”条目:

out = sigmoid(x * weights[:x.size(0), ...] + bias[:x.size(0), ...])

答案 1 :(得分:0)

此链接可能对您有所帮助:How to initialize weights in PyTorch?

如果在pytorch中使用Pytorch的内置数据加载程序类。它将生成一个迭代器,用于自动处理批处理。批处理大小应通过将'batch_size'关键字传递给数据加载器来明确设置。

如果不能用批量大小将数据集整除,则最后一个批次将较小,除非将数据加载程序的drop last显式设置为true。

Bias不能像这样工作,并且不依赖于数据集的大小或批处理大小。