Hi Masilive!



 Masilive_Sifanele:

RuntimeError: size mismatch, m1: [5 x 10], m2: [5 x 32] at /pytorch/aten/src/TH/generic/THTensorMath.cpp


The short answer is that you have the dimensions of your input
swapped.  You would want something like, for example, “m1: [10 x 5]”.


state = [[307, 1588204935.0, 1.0869, 1.08708, 1.08659, 1.08662, 1.08708, 1.08724, 1.08674, 1.08677],
          [370, 1588204920.0, 1.08668, 1.08709, 1.08661, 1.08693, 1.08682, 1.08724, 1.08677, 1.08708],
          [243, 1588204905.0, 1.08637, 1.08671, 1.08624, 1.08669, 1.08651, 1.08686, 1.08639, 1.08683],
          [232, 1588204890.0, 1.08614, 1.08656, 1.08609, 1.08636, 1.08628, 1.0867, 1.08626, 1.0865],
          [349, 1588204875.0, 1.086, 1.08623, 1.08585, 1.08614, 1.08614, 1.08638, 1.08597, 1.0863]]



Pytorch will interpret state as a batch of 5 samples, each of which
is a vector of 10 values.


def predict(state, state_dim=5, action_dim=3, hidden_dim=32, lr=0.05):
    """ Compute Q values for all actions using the DQL. """
    criterion = torch.nn.MSELoss()
    model = torch.nn.Sequential(torch.nn.Linear(state_dim, hidden_dim),
                                     torch.nn.LeakyReLU(),
                                     torch.nn.Linear(hidden_dim, hidden_dim*2),
                                     torch.nn.LeakyReLU(),
                                     torch.nn.Linear(hidden_dim*2, action_dim))



But the first layer of your Sequential is a Linear that is expecting an
input vector that consists of only 5 values.
Remember, pytorch models always work on batches of samples (even
if the batch size is 1).  So the first dimension of state is, in fact, your
batch size.
How to fix this depends on what you want your state tensor to mean.
Is it supposed to be a batch of 5 length-10 vectors (as it is being treated
now), or is it supposed to be a batch of 10 length-5 vectors?  Or
something else?
Good luck.
K. Frank