·利用pytorch构建合适的神经网络,实现鸢尾花的分类(PS:应当包含以下内容,数据载入、数据处理、构建模型、训练模型、测试模型)
时间: 2023-12-21 10:03:13 浏览: 170
人工智能-项目实践-鸢尾花分类-Python 基于BP神经网络实现鸢尾花的分类
5星 · 资源好评率100%
好的,以下是利用 PyTorch 构建神经网络,实现鸢尾花分类的代码和步骤。
## 数据载入
首先,我们需要载入鸢尾花数据集。PyTorch 提供了一个内置的 `torchvision.datasets` 模块,可以轻松地下载和使用许多常见的数据集。
```python
import torch
import torchvision.datasets as datasets
# 下载并载入鸢尾花数据集
iris_data = datasets.Iris(root='data/', train=True, transform=None, target_transform=None, download=True)
```
## 数据处理
接下来,我们需要对数据进行处理。我们需要将数据集分成训练集和测试集,并将每个样本的特征标准化,以便神经网络更好地进行学习。
```python
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 将数据集分成训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.2, random_state=42)
# 对特征进行标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 将数据转换为 PyTorch 张量
X_train = torch.tensor(X_train, dtype=torch.float32)
X_test = torch.tensor(X_test, dtype=torch.float32)
y_train = torch.tensor(y_train, dtype=torch.long)
y_test = torch.tensor(y_test, dtype=torch.long)
```
## 构建模型
接下来,我们需要构建神经网络模型。我们将使用一个简单的三层全连接神经网络,其中包含两个隐藏层。
```python
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(4, 16)
self.fc2 = nn.Linear(16, 16)
self.fc3 = nn.Linear(16, 3)
def forward(self, x):
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
model = Net()
```
## 训练模型
现在我们已经准备好训练我们的模型了。我们将使用交叉熵损失函数和随机梯度下降优化器进行训练。
```python
import torch.optim as optim
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)
for epoch in range(100):
running_loss = 0.0
for i in range(len(X_train)):
optimizer.zero_grad()
outputs = model(X_train[i])
loss = criterion(outputs.unsqueeze(0), y_train[i].unsqueeze(0))
loss.backward()
optimizer.step()
running_loss += loss.item()
print('[%d] loss: %.3f' % (epoch + 1, running_loss / len(X_train)))
```
## 测试模型
最后,我们使用测试集上的数据来评估我们的模型的性能。
```python
correct = 0
total = 0
with torch.no_grad():
for i in range(len(X_test)):
outputs = model(X_test[i])
_, predicted = torch.max(outputs.data, 0)
total += 1
correct += (predicted == y_test[i]).sum().item()
print('Accuracy: %d %%' % (100 * correct / total))
```
完成!我们现在已经成功地使用 PyTorch 构建了一个神经网络模型,并使用它对鸢尾花数据集进行了分类。
阅读全文