我有一个(244, 108)numpy数组。它包含了一天中每分钟交易的收盘值的百分比变化,即108个值,就像244天一样。基本上它是一个1D向量。那么为了做1D CNN,我应该如何塑造我的数据?
我已经做了什么。
x.shape = (244, 108)
x = np.expand_dims(x, axis=2)
x.shape = (243, 108, 1)
y.shape = (243,)
模型:
class Net(torch.nn.Module):
def __init__(self):
super(Net, self).__init__()
self.layer1 = torch.nn.Conv1d(in_channels=108, out_channels=1, kernel_size=1, stride=1)
self.act1 = torch.nn.ReLU()
self.act2 = torch.nn.MaxPool1d(kernel_size=1, stride=1)
self.layer2 = torch.nn.Conv1d(in_channels=1, out_channels=1, kernel_size=1, stride=1)
self.act3 = torch.nn.ReLU()
self.act4 = torch.nn.MaxPool1d(kernel_size=1, stride=1)
self.linear_layers = nn.Linear(1, 1)
# Defining the forward pass
def forward(self, x):
x = self.layer1(x)
x = self.act1(x)
x = self.act2(x)
x = self.layer2(x)
x = self.act3(x)
x = self.act4(x)
x = self.linear_layers(x)
return x
如果每一天都应该是单独的实例进行卷积,你的数据应该有这样的形状。(248, 1, 108)
. 这似乎更合理。
如果你想让你所有的日子和分钟是一个连续的网络学习,它应该是形状的 (1, 1, 248*108)
.
基本上第一个维度是 batch
(有多少个训练样本),其次是样本的通道数或特征数(在你的情况下只有一个),最后是时间步长数。
您的集合层应该是 torch.nn.AdaptiveMaxPool1d(1)
. 你还应该 reshape
从这一层输出的是这样的。pooled.reshape(x.shape[0], -1)
在把它推过去之前 torch.nn.Linear
层。