请生成一个使用pytorch,使用一维数组为输入,输入结果为一维数组的cnn模型
时间: 2024-02-20 19:59:40 浏览: 19
好的,下面是一个使用PyTorch实现的一维CNN模型,将一维数组作为输入,输出一个一维数组。
```python
import torch
import torch.nn as nn
# 定义CNN模型
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
self.conv1 = nn.Conv1d(in_channels=1, out_channels=32, kernel_size=3, stride=1, padding=1)
self.pool1 = nn.MaxPool1d(kernel_size=2)
self.conv2 = nn.Conv1d(in_channels=32, out_channels=64, kernel_size=3, stride=1, padding=1)
self.pool2 = nn.MaxPool1d(kernel_size=2)
self.fc1 = nn.Linear(64 * 2, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = self.conv1(x)
x = nn.functional.relu(x)
x = self.pool1(x)
x = self.conv2(x)
x = nn.functional.relu(x)
x = self.pool2(x)
x = x.view(-1, 64 * 2)
x = self.fc1(x)
x = nn.functional.relu(x)
x = self.fc2(x)
return x
# 定义输入和输出
input_data = torch.tensor([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype=torch.float32).unsqueeze(0).unsqueeze(0)
output_data = torch.tensor([1, 0, 1, 0, 1, 0, 1, 0, 1, 0], dtype=torch.float32).unsqueeze(0)
# 定义模型、损失函数和优化器
model = CNN()
criterion = nn.BCEWithLogitsLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
# 训练模型
for epoch in range(100):
optimizer.zero_grad()
output = model(input_data)
loss = criterion(output, output_data)
loss.backward()
optimizer.step()
print(f'Epoch {epoch+1} - Loss: {loss.item():.4f}')
# 测试模型
test_input = torch.tensor([1, 3, 5, 7, 9, 11, 13, 15, 17, 19], dtype=torch.float32).unsqueeze(0).unsqueeze(0)
with torch.no_grad():
test_output = model(test_input)
print(test_output.squeeze().numpy())
```
上面的代码中使用了PyTorch实现了一个包含一维卷积层、池化层和全连接层的CNN模型,用于从一维数组中提取特征。我们可以使用这个模型来对任何包含10个元素的一维数组进行分类或回归任务。