fixed problem with inference with MyLeNetNoceil

This commit is contained in:
Marco Pedersoli 2020-06-30 11:56:51 -04:00
parent 019310e60c
commit 5504ca67ab
4 changed files with 157 additions and 138 deletions

View file

@ -101,52 +101,6 @@ class MyLeNetMatNormal(nn.Module):#epach 21s
#out = (self.fc1(out))
return out
class MyLeNetMatNormalNoceil(nn.Module):#epoch 136s 16GB
def __init__(self,k=3):
super(MyLeNetMatNormalNoceil, self).__init__()
self.conv1 = SConv2dAvg(3, 200*k, 3, stride=1,padding=1,ceil_mode=False)
self.conv2 = SConv2dAvg(200*k, 400*k, 3, stride=1,padding=1,ceil_mode=False)
self.conv3 = SConv2dAvg(400*k, 800*k, 3, stride=1,padding=1,ceil_mode=False)
self.conv4 = SConv2dAvg(800*k, 1600*k, 3, stride=1,padding=1,ceil_mode=False)
self.fc1 = nn.Linear(1600*k, 10)
def forward(self, x, stoch=True):
out = F.relu(self.conv1(x,stoch=stoch))
out = F.avg_pool2d(out,2,ceil_mode=True)
out = F.relu(self.conv2(out,stoch=stoch))
out = F.avg_pool2d(out,2,ceil_mode=True)
out = F.relu(self.conv3(out,stoch=stoch))
out = F.avg_pool2d(out,2,ceil_mode=True)
out = F.relu(self.conv4(out,stoch=stoch))
out = F.avg_pool2d(out,4,ceil_mode=True)
out = out.view(out.size(0), -1 )
out = self.fc1(out)
return out
class MyLeNetMatStochNoceil(nn.Module):#epoch 41s 16BG
def __init__(self,k=3):
super(MyLeNetMatStochNoceil, self).__init__()
self.conv1 = SConv2dAvg(3, 200*k, 3, stride=2,padding=1,ceil_mode=False)
self.conv2 = SConv2dAvg(200*k, 400*k, 3, stride=2,padding=1,ceil_mode=False)
self.conv3 = SConv2dAvg(400*k, 800*k, 3, stride=2,padding=1,ceil_mode=False)
self.conv4 = SConv2dAvg(800*k, 1600*k, 3, stride=4,padding=1,ceil_mode=False)
self.fc1 = nn.Linear(1600*k, 10)
def forward(self, x, stoch=True):
#print('in',x.shape)
out = F.relu(self.conv1(x,stoch=stoch))
#print('c1',out.shape)
out = F.relu(self.conv2(out,stoch=stoch))
#print('c2', out.shape)
out = F.relu(self.conv3(out,stoch=stoch))
#print('c3',out.shape)
out = F.relu(self.conv4(out,stoch=stoch))
#print('c4',out.shape)
out = out.view(out.size(0), -1 )
out = self.fc1(out)
return out
class MyLeNetMatStoch(nn.Module):#epoch 17s
def __init__(self):
super(MyLeNetMatStoch, self).__init__()
@ -169,6 +123,59 @@ class MyLeNetMatStoch(nn.Module):#epoch 17s
out = out.view(out.size(0), -1 )
#out = self.fc1(out)
return out
class MyLeNetMatNormalNoceil(nn.Module):#epoch 136s 16GB
def __init__(self,k=3):
super(MyLeNetMatNormalNoceil, self).__init__()
self.conv1 = SConv2dAvg(3, 200*k, 3, stride=1,padding=1,ceil_mode=False)
self.conv2 = SConv2dAvg(200*k, 400*k, 3, stride=1,padding=1,ceil_mode=False)
self.conv3 = SConv2dAvg(400*k, 800*k, 3, stride=1,padding=1,ceil_mode=False)
self.conv4 = SConv2dAvg(800*k, 1600*k, 3, stride=1,padding=1,ceil_mode=False)
self.fc1 = nn.Linear(1600*k, 10)
def forward(self, x, stoch=True):
out = F.relu(self.conv1(x,stoch=stoch))
out = F.avg_pool2d(out,2,ceil_mode=False)
out = F.relu(self.conv2(out,stoch=stoch))
out = F.avg_pool2d(out,2,ceil_mode=False)
out = F.relu(self.conv3(out,stoch=stoch))
out = F.avg_pool2d(out,2,ceil_mode=False)
out = F.relu(self.conv4(out,stoch=stoch))
out = F.avg_pool2d(out,4,ceil_mode=False)
out = out.view(out.size(0), -1 )
out = self.fc1(out)
return out
class MyLeNetMatStochNoceil(nn.Module):#epoch 41s 16BG
def __init__(self,k=3):
super(MyLeNetMatStochNoceil, self).__init__()
self.conv1 = SConv2dAvg(3, 200*k, 3, stride=2,padding=1,ceil_mode=False)
self.conv2 = SConv2dAvg(200*k, 400*k, 3, stride=2,padding=1,ceil_mode=False)
self.conv3 = SConv2dAvg(400*k, 800*k, 3, stride=2,padding=1,ceil_mode=False)
self.conv4 = SConv2dAvg(800*k, 1600*k, 3, stride=4,padding=1,ceil_mode=False)
self.fc1 = nn.Linear(1600*k, 10)
def forward(self, x, stoch=True):
if stoch:
out = F.relu(self.conv1(x,stoch=stoch))
out = F.relu(self.conv2(out,stoch=stoch))
out = F.relu(self.conv3(out,stoch=stoch))
out = F.relu(self.conv4(out,stoch=stoch))
out = out.view(out.size(0), -1 )
out = self.fc1(out)
else:
out = F.relu(self.conv1(x,stride=1))
out = F.avg_pool2d(out,2,ceil_mode=False)
out = F.relu(self.conv2(out,stride=1))
out = F.avg_pool2d(out,2,ceil_mode=False)
out = F.relu(self.conv3(out,stride=1))
out = F.avg_pool2d(out,2,ceil_mode=False)
out = F.relu(self.conv4(out,stride=1))
out = F.avg_pool2d(out,4,ceil_mode=False)
out = out.view(out.size(0), -1 )
out = self.fc1(out)
return out
class MyLeNetMatStochBUNoceil(nn.Module):#30.5s 14GB
def __init__(self,k=3):
@ -180,34 +187,46 @@ class MyLeNetMatStochBUNoceil(nn.Module):#30.5s 14GB
self.fc1 = nn.Linear(1600*k, 10)
def forward(self, x, stoch=True):
#get sizes
batch_size = x.shape[0]
device = x.device
h0,w0 = x.shape[2],x.shape[3]
_,_,h1,w1 = self.conv1.get_size(h0,w0)
_,_,h2,w2 = self.conv2.get_size(h1,w1)
_,_,h3,w3 = self.conv3.get_size(h2,w2)
_,_,h4,w4 = self.conv4.get_size(h3,w3)
# print(h0,w0)
# print(h1,w1)
# print(h2,w2)
# print(h3,w3)
if stoch:
#get sizes
batch_size = x.shape[0]
device = x.device
h0,w0 = x.shape[2],x.shape[3]
_,_,h1,w1 = self.conv1.get_size(h0,w0)
_,_,h2,w2 = self.conv2.get_size(h1,w1)
_,_,h3,w3 = self.conv3.get_size(h2,w2)
_,_,h4,w4 = self.conv4.get_size(h3,w3)
# print(h0,w0)
# print(h1,w1)
# print(h2,w2)
# print(h3,w3)
#sample BU
mask4 = torch.ones(h4,w4).to(x.device)
# print(mask3.shape)
index4,mask3 = self.conv4.sample(h3,w3,batch_size,device,mask4)
index3,mask2 = self.conv3.sample(h2,w2,batch_size,device,mask3)
index2,mask1 = self.conv2.sample(h1,w1,batch_size,device,mask2)
index1,mask0 = self.conv1.sample(h0,w0,batch_size,device,mask1)
##forward
out = F.relu(self.conv1(x,index1,mask1,stoch=stoch))
out = F.relu(self.conv2(out,index2,mask2,stoch=stoch))
out = F.relu(self.conv3(out,index3,mask3,stoch=stoch))
out = F.relu(self.conv4(out,index4,mask4,stoch=stoch))
out = out.view(out.size(0), -1 )
out = self.fc1(out)
#sample BU
mask4 = torch.ones(h4,w4).to(x.device)
# print(mask3.shape)
index4,mask3 = self.conv4.sample(h3,w3,batch_size,device,mask4)
index3,mask2 = self.conv3.sample(h2,w2,batch_size,device,mask3)
index2,mask1 = self.conv2.sample(h1,w1,batch_size,device,mask2)
index1,mask0 = self.conv1.sample(h0,w0,batch_size,device,mask1)
##forward
out = F.relu(self.conv1(x,index1,mask1,stoch=stoch))
out = F.relu(self.conv2(out,index2,mask2,stoch=stoch))
out = F.relu(self.conv3(out,index3,mask3,stoch=stoch))
out = F.relu(self.conv4(out,index4,mask4,stoch=stoch))
out = out.view(out.size(0), -1 )
out = self.fc1(out)
else:
out = F.relu(self.conv1(x,stride=1))
out = F.avg_pool2d(out,2,ceil_mode=False)
out = F.relu(self.conv2(out,stride=1))
out = F.avg_pool2d(out,2,ceil_mode=False)
out = F.relu(self.conv3(out,stride=1))
out = F.avg_pool2d(out,2,ceil_mode=False)
out = F.relu(self.conv4(out,stride=1))
out = F.avg_pool2d(out,4,ceil_mode=False)
out = out.view(out.size(0), -1 )
out = self.fc1(out)
return out
class MyLeNetMatStochBU(nn.Module):#epoch 11s