def __init__(self, in_planes, planes, dropout_rate, stride=1, sample_ratio=1.0, minimal_k=1): super(wide_basic, self).__init__() self.bn1 = nn.BatchNorm2d(in_planes) self.conv1 = approx_Conv2d_dist(in_planes, planes, kernel_size=3, padding=1, bias=True, sample_ratio=sample_ratio, minimal_k=minimal_k) #self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=3, padding=1, bias=True) self.dropout = nn.Dropout(p=dropout_rate) self.bn2 = nn.BatchNorm2d(planes) self.conv2 = approx_Conv2d_dist(planes, planes, kernel_size=3, stride=stride, padding=1, bias=True, sample_ratio=sample_ratio, minimal_k=minimal_k) #self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, padding=1, bias=True) self.shortcut = nn.Sequential() if stride != 1 or in_planes != planes: self.shortcut = nn.Sequential( approx_Conv2d_dist(in_planes, planes, kernel_size=1, stride=stride, bias=True, sample_ratio=sample_ratio, minimal_k=minimal_k), #nn.Conv2d(in_planes, planes, kernel_size=1, stride=stride, bias=True), )
def conv1x1(in_planes, out_planes, stride=1): """1x1 convolution""" return approx_Conv2d_dist(in_planes, out_planes, kernel_size=1, stride=stride, bias=False, sample_ratio=sample_ratio, minimal_k=minimal_k)
def conv3x3(in_planes, out_planes, stride=1, groups=1, dilation=1): """3x3 convolution with padding""" return approx_Conv2d_dist(in_planes, out_planes, kernel_size=3, stride=stride, padding=dilation, groups=groups, bias=False, dilation=dilation, sample_ratio=sample_ratio, minimal_k=minimal_k)
def conv3x3(in_planes, out_planes, stride=1, sample_ratio=1.0, minimal_k=1): return approx_Conv2d_dist(in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=True, sample_ratio=sample_ratio, minimal_k=minimal_k)