Size mismatch error. RuntimeError: Error(s) in loading state_dict for DAGMM:

Ajay_Chawda: <p>I am trying to load the model for evaluation and get size mismatch error. All the parameters are same as I used in training.</p>
<p>The error -</p>
<pre><code class="lang-auto">Traceback (most recent call last):
  File "/p/fm/AjayChawda/ajay_chawda/eval.py", line 168, in &lt;module&gt;
    net.load_state_dict(torch.load(save_path), strict=False)
  File "/p/fm/AjayChawda/envs/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1497, in load_state_dict
    raise RuntimeError('Error(s) in loading state_dict for {}:\n\t{}'.format(
RuntimeError: Error(s) in loading state_dict for DAGMM:
        size mismatch for gmm.mixtures.0.Phi: copying a param with shape torch.Size([]) from checkpoint, the shape in current model is torch.Size([1]).
        size mismatch for gmm.mixtures.1.Phi: copying a param with shape torch.Size([]) from checkpoint, the shape in current model is torch.Size([1]).
</code></pre>
<p><em>Training Block</em></p>
<pre><code class="lang-auto"> compression = CompressionNetwork(embedding, numerical, input_dim, output_dim, emb, args.latent_dim)
    estimation = EstimationNetwork(args.dim_embed, args.num_mixtures)
    gmm = GMM(args.num_mixtures,args.dim_embed)
    mix = Mixture(args.dim_embed)
    net = DAGMM(compression, estimation, gmm)
    optimizer =  optim.Adam(net.parameters(), lr=1e-1)
    for epoch in range(epochs):
        print('EPOCH {}:'.format(epoch + 1))
        running_loss = 0
        for i, data in enumerate(dataloader):
            rec_data = torch.cat([data[0], data[1]], -1)
            if numerical:
                rec_data = data[1]
            out = net(data[0], data[1], rec_data)
            optimizer.zero_grad()
            L_loss = compression.reconstruction_loss(data[0], data[1], rec_data)
            G_loss = mix.gmm_loss(out=out, L1=0.1, L2=0.005)
            loss = (L_loss + G_loss)/ len(data[1])
            loss.backward()
            optimizer.step()
            running_loss += loss.item()
        writer.add_scalar("Loss/train", running_loss, epoch)
        print(running_loss)
    torch.save(net.state_dict(), save_path)
</code></pre>
<p>Training command  - `python train.py --dataset vehicle_insurance --model dagmm --latent_dim 4 --num_mixtures 2 --dim_embed 6 <br>
–encoding gel_encode --epoch 50 --batch_size 512 --file_name vehicle_insurance_dagmm_GEL_4_2</p>
<p><strong>Evaluation Block</strong></p>
<pre><code class="lang-auto">compression = CompressionNetwork(embedding, numerical, input_dim, output_dim, emb, args.latent_dim)
    estimation = EstimationNetwork(args.dim_embed, args.num_mixtures)
    gmm = GMM(args.num_mixtures,args.dim_embed)
    mix = Mixture(args.dim_embed)
    net = DAGMM(compression, estimation, gmm)
    net.load_state_dict(torch.load(save_path), strict=False)
    net.eval()
    
    for i, data in enumerate(dataloader):
        rec_data = torch.cat([data[0], data[1]], -1)
        if numerical:
            rec_data = data[1]
        out = net(data[0], data[1], rec_data)
        out = out.detach().numpy().reshape(-1)
        L =  data[2].detach().numpy().reshape(-1)
        score = np.hstack((score, out))   
        label = np.hstack((label, L))
    threshold = np.percentile(score, args.threshold, axis=0)  
    y_pred = (score &gt; threshold).astype(int)
    y_test = label
</code></pre>
<p>Evaluation command - <code>python eval.py --dataset vehicle_insurance --model dagmm --latent_dim 4 --num_mixtures 2 --dim_embed 6 --encoding GEL --save_path model/vehicle_insurance_dagmm_GEL_4_2 --threshold 95</code></p>
<p>Please help me with this issue. I have searched a lot and found it would be mismatch with the dimensions but that does seem to be the case here.</p>
<p>Thank you.</p>