I’m trying to input a 5D tensor with shape ( 1, 8, 32, 32, 32 ) to a VAE I wrote:
self.encoder = nn.Sequential(
        nn.Conv3d( 8, 16, 4, 2, 1 ), # 32 -> 16
        nn.BatchNorm3d( 16 ), 
        nn.LeakyReLU( 0.2 ),
        
        nn.Conv3d( 16, 32, 4, 2, 1 ), # 16 -> 8
        nn.BatchNorm3d( 32 ),
        nn.LeakyReLU( 0.2 ),
        
        nn.Conv3d( 32, 48, 4, 2, 1 ), # 16 -> 4
        nn.BatchNorm3d( 48 ),
        nn.LeakyReLU( 0.2 ), 
    )
    
    self.fc_mu = nn.Linear( 3072, 100 ) # 48*4*4*4 = 3072
    self.fc_logvar = nn.Linear( 3072, 100 )
    
    self.decoder = nn.Sequential(
        nn.Linear( 100, 3072 ),
        nn.Unflatten( 1, ( 48, 4, 4 )),
        nn.ConvTranspose3d( 48, 32, 4, 2, 1 ), # 4 -> 8
        nn.BatchNorm3d( 32 ),
        nn.Tanh(),
        
        nn.ConvTranspose3d( 32, 16, 4, 2, 1 ), # 8 -> 16
        nn.BatchNorm3d( 16 ),
        nn.Tanh(),
        
        nn.ConvTranspose3d( 16, 8, 4, 2, 1 ), # 16 -> 32
        nn.BatchNorm3d( 8 ),
        nn.Tanh(), 
    )

def encode( self, x ) :
    x = self.encoder( x )
    x = x.view( -1, x.size( 1 ))
    
    mu = self.fc_mu( x )
    logvar = self.fc_logvar( x )
    
    return self.reparametrize( mu, logvar ), mu, logvar 
    
def decode( self, x ):
    return self.decoder( x )
    
def forward( self, data ):
    z, mu, logvar = self.encode( data )
    return self.decode( z ), mu, logvar 

The error I’m getting is: RuntimeError: mat1 and mat2 shapes cannot be multiplied (64x48 and 3072x100). I thought I had calculated the output dimensions from each layer correctly, but I must have made a mistake, but I’m not sure where. Thank you