I’m not sure what you’re trying to do.
You want to apply a convolution with a kernel size of 7 to a 1d vector of size 13, is that correct ?
In that case your input should be a tensor with 1 channel containing a 1D vector of size 13.
So your input size should be [7, 1, 13]
(batch_size, channels, dim).
And in your model, the first conv must have an one input channel instead of 13.
Given your error, you’re giving to your model an input of size [3082092, 13]
so it seems you didn’t followed my first comment. Starting from what I wrote, we have:
features, labels = batch[:, :-1], batch[:, -1] # features size is [7, 13]
In order to obtain the needed dimension you simply need to create the channel dim:
features = features.unsqueeze(dim=1) # feature size is now [7, 1, 13]
Then you can apply your model (with the first conv corrected to have 1 input channel).
Then after this first convolution your tensor will be of shape [7, 1024, 7]
(batch_size, output_dim of the fist conv, output_size in function of padding, dilation, and stride)
As you seem to apply two convolutions with a kernel size of 1, the output dim won’t change. So at the end of your model, the size is [7, 50, 7]
.
If you wanna feed that to a linear classifier, you can flatten the last two dims and feed the result to your classifier, and correct your classifier input size which should be 50 * 7.
Here is a complete example:
model = torch.nn.Sequential(
torch.nn.Conv1d(1, 1024, kernel_size=7, stride=1, padding=0, dilation=1, groups=1, bias=True),
torch.nn.BatchNorm1d(1024),
torch.nn.ReLU(inplace=True),
torch.nn.Conv1d(1024, 1024, kernel_size=1, stride=1, padding=0, dilation=1, groups=1, bias=True),
torch.nn.BatchNorm1d(1024),
torch.nn.ReLU(inplace=True),
torch.nn.Conv1d(1024, 50, kernel_size=1, stride=1, padding=0, dilation=1, groups=1, bias=True)
)
classifier = torch.nn.Linear(50 * 7, 50)
dummy_features = torch.randn(3000, 13)
dummy_labels = torch.randint(2, (3000, 1)) # integers in [0, 1]
train_data = torch.hstack((dummy_features, dummy_labels))
train_loader = torch.utils.data.DataLoader(train_data, batch_size= 7, shuffle=True)
batch = next(iter(train_loader))
features, labels = batch[:, :-1], batch[:, -1]
features = features.unsqueeze(dim=1)
outputs = model(features)
outputs = outputs.view(outputs.size(0), -1)
scores = classifier(outputs) # size (7, 50)