为1D CNN创建和塑造数据。

问题描述 投票:2回答:1

我有一个(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


tensorflow machine-learning pytorch torch cnn
1个回答
0
投票

如果每一天都应该是单独的实例进行卷积,你的数据应该有这样的形状。(248, 1, 108). 这似乎更合理。

如果你想让你所有的日子和分钟是一个连续的网络学习,它应该是形状的 (1, 1, 248*108).

基本上第一个维度是 batch (有多少个训练样本),其次是样本的通道数或特征数(在你的情况下只有一个),最后是时间步长数。

编辑

您的集合层应该是 torch.nn.AdaptiveMaxPool1d(1). 你还应该 reshape 从这一层输出的是这样的。pooled.reshape(x.shape[0], -1) 在把它推过去之前 torch.nn.Linear 层。

© www.soinside.com 2019 - 2024. All rights reserved.