I’m trying to pass a state with 5 channels and 30 data points (time steps) through a 1d conv net with a dense network. I think my problem is in reshaping my data because I keep getting expected or less then expected number of inputs as errors. Anyone have any ideas what could be my problem? Here is a blog on the kind of data I am working with except I am using it in a reinforcement learning environment.
Here is dummy data with 5 channels
a = np.zeros(30) + 0
b = np.zeros(30) + 1
c = np.zeros(30) + 2
d = np.zeros(30) + 3
e = np.zeros(30) + 4
encoded_array = np.column_stack((a, b, c, d, e))
state = np.transpose(encoded_array)
state = state.reshape(1, 5, 30)
It has a shape of (1, 5, 30) and looks like this…
Here is my netowrk
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np
class QNetwork(nn.Module):
def __init__(self, state_size, action_size, seed, conv1=64, conv2=64, fc1_units=128, fc2_units=8):
super(QNetwork, self).__init__()
self.seed = torch.manual_seed(seed)
self.conv1 = nn.Conv1d(in_channels=5, out_channels=conv1, kernel_size=2)
self.conv2 = nn.Conv1d(in_channels=conv1, out_channels=conv2, kernel_size=2)
self.mp = nn.MaxPool1d(2)
self.fc1 = nn.Linear(1792, fc1_units)
self.fc2 = nn.Linear(fc1_units, fc2_units)
self.fc3 = nn.Linear(fc2_units, action_size)
def forward(self, x):
#x = torch.randn(1, 5, 30)
in_size = x.size(0)
x = F.relu(self.conv1(x))
x = F.relu(self.conv2(x))
x = x.view(in_size, -1)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
return self.fc3(x)
Errors I am getting