中
3.4 深度卷积神经网络与电镜图像处理(配套代码)




更新于 2025-04-19
推荐镜像 :Basic Image:bohrium-notebook:2023-04-07
推荐机型 :c2_m4_cpu
赞
目录
3.4.4 PyTorch中卷积神经网络的使用
代码
文本
[1]
# 代码 3.4.1
import torch
import torch.nn as nn
# 使用 nn.Sequential 搭建 LeNet 模型
net = nn.Sequential(
# C1层,注意padding = 2,即将原来28*28图片扩充成32*32的
nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(),
nn.AvgPool2d(kernel_size=2, stride=2), # S2层
nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(), # C3层
nn.AvgPool2d(kernel_size=2, stride=2), # S4层
# 注意这里使用全连接代替原来的C5层,所以首先用Flatten拉平
nn.Flatten(),
nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(), # 全连接代替C5层
nn.Linear(120, 84), nn.Sigmoid(), # F6层
nn.Linear(84, 10) # 输出层
)
# 打印模型结构
print(net)
Sequential( (0): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2)) (1): Sigmoid() (2): AvgPool2d(kernel_size=2, stride=2, padding=0) (3): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1)) (4): Sigmoid() (5): AvgPool2d(kernel_size=2, stride=2, padding=0) (6): Flatten(start_dim=1, end_dim=-1) (7): Linear(in_features=400, out_features=120, bias=True) (8): Sigmoid() (9): Linear(in_features=120, out_features=84, bias=True) (10): Sigmoid() (11): Linear(in_features=84, out_features=10, bias=True) )
代码
文本
[2]
# 代码 3.4.2
import torch.optim as optim
# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)
# 简单训练过程示例
def train(model, train_loader, criterion, optimizer, epochs=5):
model.train()
for epoch in range(epochs):
running_loss = 0.0
for images, labels in train_loader:
optimizer.zero_grad()
outputs = model(images)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
print(f"Epoch [{epoch+1}/{epochs}], Loss: {running_loss:.4f}")
代码
文本
[3]
# 代码 3.4.3
import torchvision
import torchvision.transforms as transforms
from torch.utils.data import DataLoader
# 数据预处理
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))
])
# 加载 MNIST 数据集
train_dataset = torchvision.datasets.MNIST(root='./', train=True, download=True, transform=transform)
test_dataset = torchvision.datasets.MNIST(root='./', train=False, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)
# 训练模型
train(net, train_loader, criterion, optimizer, epochs=30)
Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz Failed to download (trying next): HTTP Error 404: Not Found Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-images-idx3-ubyte.gz Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-images-idx3-ubyte.gz to ./data/MNIST/raw/train-images-idx3-ubyte.gz
Extracting ./data/MNIST/raw/train-images-idx3-ubyte.gz to ./data/MNIST/raw Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz Failed to download (trying next): HTTP Error 404: Not Found Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-labels-idx1-ubyte.gz Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-labels-idx1-ubyte.gz to ./data/MNIST/raw/train-labels-idx1-ubyte.gz
Extracting ./data/MNIST/raw/train-labels-idx1-ubyte.gz to ./data/MNIST/raw Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz Failed to download (trying next): HTTP Error 404: Not Found Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-images-idx3-ubyte.gz Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-images-idx3-ubyte.gz to ./data/MNIST/raw/t10k-images-idx3-ubyte.gz
Extracting ./data/MNIST/raw/t10k-images-idx3-ubyte.gz to ./data/MNIST/raw Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz Failed to download (trying next): HTTP Error 404: Not Found Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-labels-idx1-ubyte.gz Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-labels-idx1-ubyte.gz to ./data/MNIST/raw/t10k-labels-idx1-ubyte.gz
Extracting ./data/MNIST/raw/t10k-labels-idx1-ubyte.gz to ./data/MNIST/raw Epoch [1/30], Loss: 2164.9617 Epoch [2/30], Loss: 2164.1277 Epoch [3/30], Loss: 2162.3584 Epoch [4/30], Loss: 2161.2924 Epoch [5/30], Loss: 2160.6354 Epoch [6/30], Loss: 2158.9342 Epoch [7/30], Loss: 2151.9274 Epoch [8/30], Loss: 1777.8171 Epoch [9/30], Loss: 948.5035 Epoch [10/30], Loss: 574.4062 Epoch [11/30], Loss: 390.7438 Epoch [12/30], Loss: 291.7351
代码
文本
[ ]
# 代码 3.4.4
# 测试模型
def test(model, test_loader):
model.eval()
correct = 0
total = 0
with torch.no_grad():
for images, labels in test_loader:
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f'测试集准确率:{100 * correct / total:.2f}%')
# 执行测试
test(net, test_loader)
代码
文本
点个赞吧