Refine minist dump.
| 
						 | 
				
			
			@ -8,7 +8,7 @@ import numpy as np
 | 
			
		|||
import os
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def DumpTensorToImage(tensor, name, forceSquare=True, scale=1.0, Contrast=None, GridValue=None):
 | 
			
		||||
def DumpTensorToImage(tensor, name, forceSquare=False, scale=1.0, Contrast=None, GridValue=None):
 | 
			
		||||
    if len(tensor.shape) != 2 and len(tensor.shape) != 1 and len(tensor.shape) != 3:
 | 
			
		||||
        raise ("Error input dims")
 | 
			
		||||
    if ("." not in name) or (name.split(".")[-1] not in {"jpg", "png", "bmp"}):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		 Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 6.4 KiB  | 
| 
		 Before Width: | Height: | Size: 760 B After Width: | Height: | Size: 678 B  | 
| 
		 Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 700 B  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 205 B  | 
| 
		 Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 662 B  | 
| 
		 Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 702 B  | 
| 
		 Before Width: | Height: | Size: 109 B After Width: | Height: | Size: 109 B  | 
| 
		 Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 688 B  | 
| 
		 Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 520 B  | 
| 
						 | 
				
			
			@ -34,15 +34,15 @@ class ConvNet(nn.Module):
 | 
			
		|||
        super(ConvNet, self).__init__()
 | 
			
		||||
        self.conv1 = nn.Conv2d(1, 8, 5, 1, 0)
 | 
			
		||||
        self.pool = nn.MaxPool2d(2, 2)
 | 
			
		||||
        self.conv2 = nn.Conv2d(8, 8, 5, 1, 0)
 | 
			
		||||
        self.fc1 = nn.Linear(8 * 4 * 4, 10)
 | 
			
		||||
        self.conv2 = nn.Conv2d(8, 1, 5, 1, 0)
 | 
			
		||||
        self.fc1 = nn.Linear(1 * 4 * 4, 10)
 | 
			
		||||
        # self.fc2 = nn.Linear(120, 84)
 | 
			
		||||
        # self.fc3 = nn.Linear(84, 10)
 | 
			
		||||
 | 
			
		||||
    def forward(self, x):
 | 
			
		||||
        x = self.pool(F.relu(self.conv1(x)))
 | 
			
		||||
        x = self.pool(F.relu(self.conv2(x)))
 | 
			
		||||
        x = x.view(-1, 8 * 4 * 4)
 | 
			
		||||
        x = x.view(x.shape[0], -1)
 | 
			
		||||
        # x = F.relu(self.fc1(x))
 | 
			
		||||
        # x = F.relu(self.fc2(x))
 | 
			
		||||
        # x = self.fc3(x)
 | 
			
		||||
| 
						 | 
				
			
			@ -64,15 +64,17 @@ class ConvNet(nn.Module):
 | 
			
		|||
        x = self.pool(F.relu(x))
 | 
			
		||||
        x = self.conv2(x)
 | 
			
		||||
        w = self.conv2.weight
 | 
			
		||||
        show.DumpTensorToImage(w.view(-1, w.shape[2], w.shape[3]).cpu(), "conv2_weight.png")
 | 
			
		||||
        show.DumpTensorToImage(w.view(-1, w.shape[2], w.shape[3]).cpu(), "conv2_weight.png", Contrast=[-1.0, 1.0])
 | 
			
		||||
 | 
			
		||||
        show.DumpTensorToImage(x.view(-1, x.shape[2], x.shape[3]).cpu(), "conv2_output.png")
 | 
			
		||||
        show.DumpTensorToImage(x.view(-1, x.shape[2], x.shape[3]).cpu(), "conv2_output.png", Contrast=[-1.0, 1.0])
 | 
			
		||||
        x = self.pool(F.relu(x))
 | 
			
		||||
        x = x.view(-1, 8 * 4 * 4)
 | 
			
		||||
        show.DumpTensorToImage(x.view(-1, x.shape[2], x.shape[3]).cpu(), "pool_output.png", Contrast=[-1.0, 1.0])
 | 
			
		||||
        pool_shape = x.shape
 | 
			
		||||
        x = x.view(x.shape[0], -1)
 | 
			
		||||
        x = self.fc1(x)
 | 
			
		||||
 | 
			
		||||
        show.DumpTensorToImage(self.fc1.weight.view(-1, 16, 8).permute(2, 0, 1), "fc_weight.png")
 | 
			
		||||
 | 
			
		||||
        show.DumpTensorToImage(
 | 
			
		||||
            self.fc1.weight.view(-1, pool_shape[2], pool_shape[3]), "fc_weight.png", Contrast=[-1.0, 1.0]
 | 
			
		||||
        )
 | 
			
		||||
        show.DumpTensorToImage(x.view(-1).cpu(), "fc_output.png")
 | 
			
		||||
 | 
			
		||||
        criterion = nn.CrossEntropyLoss()
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +86,7 @@ class ConvNet(nn.Module):
 | 
			
		|||
        show.DumpTensorToImage(w.view(-1, w.shape[2], w.shape[3]).cpu(), "conv1_weight_grad.png")
 | 
			
		||||
        w = self.conv2.weight.grad
 | 
			
		||||
        show.DumpTensorToImage(w.view(-1, w.shape[2], w.shape[3]), "conv2_weight_grad.png")
 | 
			
		||||
        show.DumpTensorToImage(self.fc1.weight.grad.view(-1, 16, 8).permute(2, 0, 1), "fc_weight_grad.png")
 | 
			
		||||
        show.DumpTensorToImage(self.fc1.weight.grad.view(-1, pool_shape[2], pool_shape[3]), "fc_weight_grad.png")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
model = ConvNet().to(device)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		 After Width: | Height: | Size: 114 B  |