pytorch中使用cnn的二值分类模型



我建立了一个钓鱼网站分类模型。

1。首先,关于我的数据

num_dataset: i have about 16000 dataset

num_feature: my dataset has 12 characteristics .

label:如果它是一个钓鱼网站,我设置它的标签-1。其他1

batch_size:设置batch_size 128,用于cnn模型

kernel_size: 3

2。我试着

from torch.utils.data import DataLoader, TensorDataset
train_dataset = TensorDataset(x_train, y_train)
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
#-------------------------------------------------------#
class CNN(nn.Module):
def __init__(self, kernel_size):
super().__init__()  
self.layer1 = nn.Sequential(
nn.Conv1d(12, 32, 3,
stride=1, padding=1)
...
def forward(self, x):
out = self.layer1(x)
...
#-------------------------------------------------------#
model = CNN()
for epoch in range(epochs):
avg_cost = 0
for x_train, y_train in train_loader:
Hypothesis = model(x_train)

x_train.shape

火炬。大小([16072,12])

y_train.shape

火炬。大小([1]16072年)

3。误差

atHypothesis = model(x_train)

RuntimeError:期望三维权值[32,12,3]的三维输入,但得到尺寸[128,12]的二维输入

4。用加速器

我想这是因为我混淆了conv1d和conv2d,但我不能弄清楚…

我想知道这个问题的原因

您正在使用的nn.Conv1d应该接收形状为(batch_size, n_channels, sequence_length)的三维输入。也就是说,您的输入有n_channels=12(因为您已经初始化了具有12个输入通道的1d conv)和sequence_length=1。为了满足需求,您需要在输入上增加一个额外的维度。将x_train.unsqueeze(-1)之类的东西传递到网络应该可以工作。

请看下面的例子:

>>> x = torch.rand(100, 12, 1)
>>> L = nn.Conv1d(12, 32, 3, stride=1, padding=1)
>>> L(x).shape
torch.Size([100, 32, 1])

最新更新