如何解决Pytorch batchnorm1D,批处理大小为1
我正在尝试实施二进制网络。并且正在使用带有自定义二值化层的简单感知器,如下所示
self.w = torch.nn.Parameter((torch.normal(0,1,size=(param['input_size'],param['hidden_size']))),requires_grad=False)
self.fc1 = BinarizeLinear(param['hidden_size'],param['n_classes'])
self.bn = nn.BatchNorm1d(param['n_classes'])
self.softmax = nn.LogSoftmax()
但是,我希望它以1的批量大小进行训练。我尝试了InstanceNorm
,但是实例范数计算了Height和width轴上的均值和偏差。关于使用一批1进行训练时如何执行归一化的任何建议或想法,是否有任何变通办法,还是我必须制作一个自定义的归一化层?
作为一种解决方法,我尝试在fc1
之后重塑前向输入中的输入,以重新调整输入的大小,以使它们通过pytorch的_check_dim方法。
x = self.fc1(x)
x = x.reshape(param['batch_size'],x.shape[0],x.shape[1])
x = self.bn(x)
但是我得到了错误
RuntimeError: running_mean should contain 1 elements not 2
这是有道理的。我正在尝试解决问题,如果有人可以直接指导我实现的正确方法,我将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。