数据集:首先看一下我自己的表格类型的数据
看到大家都私信要代码,太多了发不过来,我把代码放到github上了:
github链接: https://github.com/JiaBinBin233/CNN1D
我的数据集是一个二分类的数据集,是一个12维的数据(第一列为标签列,其他的11列是属性列)
神经网络架构
#两层卷积层,后面接一个全连接层class Learn(nn.Module):def __init__(self):super(Tudui, self).__init__()self.model1 = nn.Sequential(#输入通道一定为1,输出通道为卷积核的个数,2为卷积核的大小(实际为一个[1,2]大小的卷积核)nn.Conv1d(1, 16, 2),nn.Sigmoid(),nn.MaxPool1d(2),# 输出大小:torch.Size([128, 16, 5])nn.Conv1d(16, 32, 2),nn.Sigmoid(),nn.MaxPool1d(4),# 输出大小:torch.Size([128, 32, 1])nn.Flatten(),# 输出大小:torch.Size([128, 32]))self.model2 = nn.Sequential(nn.Linear(in_features=32, out_features=2, bias=True),nn.Sigmoid(),)def forward(self, input):x = self.model1(input)x = self.model2(x)return x
我个人认为输入的数据是什么格式的是一个难点
首先看一下没有经过处理过的数据
for data in train_loader:X_data, Y_data = data[0], data[1]print(X_data)print(X_data.shape)
输出结果如下
原始数据是一个128行11列的数据,每一行数据代表一个样本,一共有128个样本(batch_size=128)
对数据进行处理,处理成可以输入到卷积网络的数据形式
X_data = X_data.reshape(-1,1,11) # -1表示让系统自己计算有多少个样本,这个操作的目的就是把数据转换为3维的print(X_data)print(X_data.shape)
输出结果如下
运行
output = Learn(X_data)loss = loss_function(output, Y_data)optim.zero_grad()loss.backward()optim.step()
原理
一维卷积的流程是卷积核对每一条样本进行横向卷积(卷积核的个数为输出通道的大小),对每条样本卷积的次数为卷积核的个数。每条样本被卷积具体的卷积流程我在别人的博客截了个图方便大家理解
这个图就是卷积核对一个样本进行卷积的具体操作