Speedup to search.
1 modle set to channel output 4 from 8 2 network weights is type of int from -4 to 4
This commit is contained in:
		
							parent
							
								
									18126824ee
								
							
						
					
					
						commit
						346159068c
					
				|  | @ -74,8 +74,9 @@ traindata, testdata = Loader.MNIST(batchsize, shuffle=True, resize=7) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| bestweight = EvaluatorUnsuper.UnsuperLearnSearchBestWeight(model,layer,traindata,8,20,250000) | bestweight,bestentropy = EvaluatorUnsuper.UnsuperLearnSearchBestWeight(model,layer,traindata,8,50,1000000) | ||||||
| np.save(CurrentPath+"bestweightEntropySearch.npy", bestweight) | np.save(CurrentPath+"bestweightEntropySearch.npy", bestweight) | ||||||
|  | np.save(CurrentPath+"bestweightEntropySearch_entropy="+str(bestentropy), bestweight) | ||||||
| utils.NumpyToImage(bestweight, CurrentPath+"image",title="EntropySearchWerightBest") | utils.NumpyToImage(bestweight, CurrentPath+"image",title="EntropySearchWerightBest") | ||||||
| EvaluatorUnsuper.SetModelConvWeight(model,layer,bestweight) | EvaluatorUnsuper.SetModelConvWeight(model,layer,bestweight) | ||||||
| utils.SaveModel(model,CurrentPath+"/checkpointEntropySearch.pkl") | utils.SaveModel(model,CurrentPath+"/checkpointEntropySearch.pkl") | ||||||
|  |  | ||||||
|  | @ -190,6 +190,9 @@ def UnsuperLearnSearchBestWeight(netmodel, layer, dataloader, databatchs=128, st | ||||||
|     newlayer = nn.Conv2d(tl.in_channels, stepsize, tl.kernel_size, |     newlayer = nn.Conv2d(tl.in_channels, stepsize, tl.kernel_size, | ||||||
|                          tl.stride, tl.padding, tl.dilation, tl.groups, tl.bias, tl.padding_mode) |                          tl.stride, tl.padding, tl.dilation, tl.groups, tl.bias, tl.padding_mode) | ||||||
|     newlayer = utils.SetDevice(newlayer) |     newlayer = utils.SetDevice(newlayer) | ||||||
|  |     newweightshape = list(newlayer.weight.data.shape) | ||||||
|  |     newweightshape[0] = stepsize | ||||||
|  |     newweightshaperandom = [newweightshape[-1]*newweightshape[-2],newweightshape[0]*newweightshape[1]] | ||||||
| 
 | 
 | ||||||
|     # pre load train data for speed up. |     # pre load train data for speed up. | ||||||
|     datas = [] |     datas = [] | ||||||
|  | @ -209,7 +212,8 @@ def UnsuperLearnSearchBestWeight(netmodel, layer, dataloader, databatchs=128, st | ||||||
|     shift = utils.SetDevice(torch.from_numpy(np.array(shift).astype("uint8"))) |     shift = utils.SetDevice(torch.from_numpy(np.array(shift).astype("uint8"))) | ||||||
|     # shift = torch.from_numpy(np.array(shift).astype("uint8")) |     # shift = torch.from_numpy(np.array(shift).astype("uint8")) | ||||||
| 
 | 
 | ||||||
|     bestweight = [] |      | ||||||
|  |     bestweight = [np.zeros((8))] | ||||||
|     bestentropy = [100.0] |     bestentropy = [100.0] | ||||||
|     bittedset = [] |     bittedset = [] | ||||||
|     bittedLock = threading.Lock() |     bittedLock = threading.Lock() | ||||||
|  | @ -237,18 +241,21 @@ def UnsuperLearnSearchBestWeight(netmodel, layer, dataloader, databatchs=128, st | ||||||
| 
 | 
 | ||||||
|                 bestLock.acquire() |                 bestLock.acquire() | ||||||
|                 if entropys[argmin] < bestentropy[0]: |                 if entropys[argmin] < bestentropy[0]: | ||||||
|                     bestweight = newweight[indexs[argmin]] |                     bestweight[0] = newweight[indexs[argmin]] | ||||||
|                     bestentropy[0] = entropys[argmin] |                     bestentropy[0] = entropys[argmin] | ||||||
|                     print("finded better entropy") |                     print("finded better entropy") | ||||||
|                 bestLock.release() |                 bestLock.release() | ||||||
| 
 | 
 | ||||||
|     for j in range(interation): |     for j in range(interation): | ||||||
|         newweightshape = list(newlayer.weight.data.shape) |          | ||||||
|         newweightshape[0] = stepsize |         # newweight = np.random.uniform(-1.0,1.0,newweightshape).astype("float32") | ||||||
|         newweight = np.random.uniform(-1.0,1.0,newweightshape).astype("float32") |         # newweight = newweight.reshape((-1,newweightshape[-1]*newweightshape[-2])) | ||||||
|         newweight = newweight.reshape((-1,newweightshape[-1]*newweightshape[-2])) |         # newweight = np.swapaxes(newweight,0,1)-np.mean(newweight,-1) | ||||||
|         newweight = np.swapaxes(newweight,0,1)-np.mean(newweight,-1) |         # newweight = np.swapaxes(newweight,0,1).reshape(newweightshape) | ||||||
|         newweight = np.swapaxes(newweight,0,1).reshape(newweightshape) |          | ||||||
|  |         newweight = np.random.randint(-4.0,5.0,newweightshaperandom).astype("int32") | ||||||
|  |         newweight = (newweight-np.mean(newweight,0)).astype("int32") | ||||||
|  |         newweight = np.swapaxes(newweight,0,1).reshape(newweightshape).astype("float32") | ||||||
| 
 | 
 | ||||||
|         newlayer.weight.data=utils.SetDevice(torch.from_numpy(newweight)) |         newlayer.weight.data=utils.SetDevice(torch.from_numpy(newweight)) | ||||||
|         outputs = newlayer(datasnetout).transpose(0,1) |         outputs = newlayer(datasnetout).transpose(0,1) | ||||||
|  | @ -289,7 +296,7 @@ def UnsuperLearnSearchBestWeight(netmodel, layer, dataloader, databatchs=128, st | ||||||
|         time.sleep(100) |         time.sleep(100) | ||||||
|      |      | ||||||
|     interationbar.close() |     interationbar.close() | ||||||
|     return bestweight |     return bestweight[0],bestentropy[0] | ||||||
| 
 | 
 | ||||||
| def SetModelConvWeight(model, layer, weight): | def SetModelConvWeight(model, layer, weight): | ||||||
|     w = utils.SetDevice(torch.from_numpy(weight)) |     w = utils.SetDevice(torch.from_numpy(weight)) | ||||||
|  |  | ||||||
|  | @ -64,8 +64,8 @@ class Net333(UniModule.ModuleBase): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         super(Net333, self).__init__() |         super(Net333, self).__init__() | ||||||
|         layers = [] |         layers = [] | ||||||
|         layers += [nn.Conv2d(1,  8, kernel_size=3,bias=False),nn.Sigmoid()] |         layers += [nn.Conv2d(1,  4, kernel_size=3,bias=False),nn.Sigmoid()] | ||||||
|         layers += [nn.Conv2d(8,  1, kernel_size=3,bias=False),nn.Sigmoid()] |         layers += [nn.Conv2d(4,  1, kernel_size=3,bias=False),nn.Sigmoid()] | ||||||
|         layers += [nn.Conv2d(1,  10, kernel_size=3,bias=False)] |         layers += [nn.Conv2d(1,  10, kernel_size=3,bias=False)] | ||||||
|         self.features = nn.Sequential(*layers) |         self.features = nn.Sequential(*layers) | ||||||
|     def forward(self, x): |     def forward(self, x): | ||||||
|  | @ -77,8 +77,8 @@ class Net3Grad33(UniModule.ModuleBase): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|         super(Net3Grad33, self).__init__() |         super(Net3Grad33, self).__init__() | ||||||
|         layers = [] |         layers = [] | ||||||
|         layers += [nn.Conv2d(1,  8, kernel_size=3,bias=False),nn.Sigmoid()] |         layers += [nn.Conv2d(1,  4, kernel_size=3,bias=False),nn.Sigmoid()] | ||||||
|         layers += [nn.Conv2d(8,  1, kernel_size=3,bias=False),nn.Sigmoid()] |         layers += [nn.Conv2d(4,  1, kernel_size=3,bias=False),nn.Sigmoid()] | ||||||
|         layers += [nn.Conv2d(1,  10, kernel_size=3,bias=False)] |         layers += [nn.Conv2d(1,  10, kernel_size=3,bias=False)] | ||||||
|         self.features = nn.Sequential(*layers) |         self.features = nn.Sequential(*layers) | ||||||
|         self.SetConvRequiresGrad(0,False) |         self.SetConvRequiresGrad(0,False) | ||||||
|  |  | ||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue