我现在正在编程自定义优化器,第一维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.
所以,我想知道是否可以创建一个张量,其中某个维度的长度可以是可变的,例如可变长度列表。
答案 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不能像这样工作,并且不依赖于数据集的大小或批处理大小。