MNIST数据集实战用complexPyTorch构建高性能复数卷积神经网络【免费下载链接】complexPyTorchA high-level toolbox for using complex valued neural networks in PyTorch项目地址: https://gitcode.com/gh_mirrors/co/complexPyTorch在深度学习领域复数神经网络正逐渐成为提升模型性能的新方向。complexPyTorch作为一个基于PyTorch的高级复数神经网络工具库为开发者提供了便捷的复数层和复数激活函数实现。本文将带你通过MNIST手写数字识别任务快速掌握如何使用complexPyTorch构建高性能复数卷积神经网络即使你是深度学习新手也能轻松上手复数神经网络开启深度学习新维度 传统的实数神经网络在处理具有相位和振幅信息的数据时往往力不从心而复数神经网络通过同时利用实部和虚部信息能够捕捉更丰富的数据特征。complexPyTorch库正是为了解决这一问题而设计它提供了完整的复数神经网络组件包括复数卷积层complexPyTorch/complexLayers.py 中的ComplexConv2d复数批归一化支持1D和2D数据的ComplexBatchNorm1d和ComplexBatchNorm2d复数激活函数complexPyTorch/complexFunctions.py 中的complex_relu复数池化层专为复数数据设计的complex_max_pool2d这些组件的组合使用能够让你的神经网络在处理图像、音频等具有波特性的数据时表现更出色。环境准备快速安装complexPyTorch ⚡开始实战前我们需要先搭建开发环境。通过以下步骤你可以在5分钟内完成所有准备工作克隆项目仓库git clone https://gitcode.com/gh_mirrors/co/complexPyTorch cd complexPyTorch安装依赖complexPyTorch基于PyTorch构建确保你的环境中已安装PyTorch 1.7。然后通过setup.py安装pip install .验证安装打开Python终端输入以下命令验证安装是否成功from complexPyTorch.complexLayers import ComplexConv2d print(complexPyTorch安装成功)MNIST实战构建复数卷积神经网络 我们将使用MNIST数据集来演示复数神经网络的构建过程。MNIST包含60,000张训练图像和10,000张测试图像每张图像是28×28像素的手写数字灰度图。数据加载与预处理首先我们需要加载MNIST数据集并进行预处理。complexPyTorch要求输入数据为复数类型因此我们需要将标准的实数张量转换为复数张量import torch from torchvision import datasets, transforms from torch.utils.data import Subset # 数据转换转为张量并归一化 trans transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (1.0,))]) # 加载数据集并取子集加速演示 train_set datasets.MNIST(../data, trainTrue, transformtrans, downloadTrue) train_set Subset(train_set, torch.arange(1000)) # 取1000个训练样本 test_set datasets.MNIST(../data, trainFalse, transformtrans, downloadTrue) test_set Subset(test_set, torch.arange(100)) # 取100个测试样本 # 创建数据加载器 train_loader torch.utils.data.DataLoader(train_set, batch_size64, shuffleTrue) test_loader torch.utils.data.DataLoader(test_set, batch_size64, shuffleTrue)构建复数卷积神经网络模型接下来我们使用complexPyTorch构建一个包含复数卷积层、复数批归一化和复数激活函数的卷积神经网络import torch.nn as nn import torch.nn.functional as F from complexPyTorch.complexLayers import ( ComplexConv2d, ComplexBatchNorm2d, ComplexLinear, ComplexDropout2d, ComplexBatchNorm1d ) from complexPyTorch.complexFunctions import complex_relu, complex_max_pool2d class ComplexNet(nn.Module): def __init__(self): super(ComplexNet, self).__init__() # 复数卷积层1: 输入1通道输出10通道卷积核5x5 self.conv1 ComplexConv2d(1, 10, 5, 1) # 复数批归一化 self.bn2d ComplexBatchNorm2d(10, track_running_statsFalse) # 复数卷积层2: 输入10通道输出20通道卷积核5x5 self.conv2 ComplexConv2d(10, 20, 5, 1) # 复数全连接层1 self.fc1 ComplexLinear(4*4*20, 500) # 复数dropout层 self.dropout ComplexDropout2d(p0.3) # 复数批归一化 self.bn1d ComplexBatchNorm1d(500, track_running_statsFalse) # 复数全连接层2输出10类 self.fc2 ComplexLinear(500, 10) def forward(self, x): # 转为复数张量实部为原始图像虚部初始化为0 x x.type(torch.complex64) # 卷积块1 x self.conv1(x) # 复数卷积 x complex_relu(x) # 复数ReLU激活 x complex_max_pool2d(x, 2, 2) # 复数最大池化 x self.bn2d(x) # 复数批归一化 # 卷积块2 x self.conv2(x) # 复数卷积 x complex_relu(x) # 复数ReLU激活 x complex_max_pool2d(x, 2, 2) # 复数最大池化 # 全连接层 x x.view(-1, 4*4*20) # 展平 x self.fc1(x) # 复数全连接 x self.dropout(x) # 复数dropout x complex_relu(x) # 复数ReLU激活 x self.bn1d(x) # 复数批归一化 x self.fc2(x) # 复数全连接 # 取模后应用softmax x x.abs() x F.log_softmax(x, dim1) return x这个模型的核心在于全部使用复数运算组件从卷积到激活再到归一化形成了完整的复数计算流。模型训练与评估定义好模型后我们就可以开始训练了。训练过程与标准PyTorch模型类似但需要注意将输入数据转换为复数类型# 选择设备 device torch.device(cuda if torch.cuda.is_available() else cpu) model ComplexNet().to(device) optimizer torch.optim.SGD(model.parameters(), lr5e-3, momentum0.9) # 训练函数 def train(model, device, train_loader, optimizer, epoch): model.train() for batch_idx, (data, target) in enumerate(train_loader): data, target data.to(device).type(torch.complex64), target.to(device) optimizer.zero_grad() output model(data) loss F.nll_loss(output, target) loss.backward() optimizer.step() if batch_idx % 100 0: print(fTrain\t Epoch: {epoch:3} [{batch_idx * len(data):6}/{len(train_loader.dataset):6} ({100. * batch_idx / len(train_loader):3.0f}%)]\tLoss: {loss.item():.6f}) # 测试函数 def test(model, device, test_loader, epoch): model.eval() test_loss 0 correct 0 with torch.no_grad(): for data, target in test_loader: data, target data.to(device).type(torch.complex64), target.to(device) output model(data) test_loss F.nll_loss(output, target, reductionsum).item() pred output.argmax(dim1, keepdimTrue) correct pred.eq(target.view_as(pred)).sum().item() test_loss / len(test_loader.dataset) print(fTest\t Epoch: {epoch:3}\tAverage loss: {test_loss:.4f}, Accuracy: {correct}/{len(test_loader.dataset)} ({100. * correct / len(test_loader.dataset):.0f}%)) # 运行训练4个epoch for epoch in range(4): train(model, device, train_loader, optimizer, epoch) test(model, device, test_loader, epoch)实验结果与分析 在仅使用1000个训练样本和100个测试样本的情况下经过4个epoch的训练我们得到的典型结果如下Train Epoch: 0 [ 0/ 1000 ( 0%)] Loss: 2.575082 Test Epoch: 0 Average loss: 0.8683, Accuracy: 76/100 (76%) Train Epoch: 1 [ 0/ 1000 ( 0%)] Loss: 0.803982 Test Epoch: 1 Average loss: 0.1948, Accuracy: 94/100 (94%) Train Epoch: 2 [ 0/ 1000 ( 0%)] Loss: 0.366340 Test Epoch: 2 Average loss: 0.1600, Accuracy: 95/100 (95%) Train Epoch: 3 [ 0/ 1000 ( 0%)] Loss: 0.411020 Test Epoch: 3 Average loss: 0.0883, Accuracy: 97/100 (97%)从结果可以看出复数神经网络在少量数据上就能快速收敛最终达到97%的测试准确率。这表明复数神经网络能够更高效地利用数据中的信息特别适合在数据量有限的场景下使用。进阶技巧优化复数神经网络性能 要进一步提升复数神经网络的性能你可以尝试以下技巧调整复数批归一化参数在 complexLayers.py 中尝试启用track_running_statsTrue来跟踪训练过程中的统计信息。使用更复杂的复数激活函数除了complex_relu你还可以尝试实现复数版本的Leaky ReLU或ELU激活函数。增加网络深度在现有模型基础上添加更多的复数卷积层增强特征提取能力。优化学习率调度使用学习率衰减策略如StepLR代替固定学习率可能会获得更好的收敛效果。总结复数神经网络的优势与未来 通过本文的MNIST实战我们展示了如何使用complexPyTorch快速构建和训练复数卷积神经网络。相比传统的实数神经网络复数神经网络具有以下优势更强的特征表达能力同时利用实部和虚部信息捕捉数据中的相位和振幅特征更高的计算效率复数运算可以在相同的硬件资源下处理 twice 的信息量更好的泛化性能在小样本数据集上表现出更优的收敛速度和准确率complexPyTorch库为开发者提供了构建复数神经网络的完整工具链其核心代码实现位于 complexPyTorch/ 目录下。无论是学术研究还是工业应用复数神经网络都展现出巨大的潜力特别是在图像处理、信号处理和量子机器学习等领域。现在你已经掌握了使用complexPyTorch构建复数神经网络的基本方法快去尝试将这一强大工具应用到你的项目中吧如果需要更详细的API文档可以参考项目中的 Example.ipynb 示例文件里面包含了更多复杂网络结构的实现示例。【免费下载链接】complexPyTorchA high-level toolbox for using complex valued neural networks in PyTorch项目地址: https://gitcode.com/gh_mirrors/co/complexPyTorch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
MNIST数据集实战:用complexPyTorch构建高性能复数卷积神经网络
MNIST数据集实战用complexPyTorch构建高性能复数卷积神经网络【免费下载链接】complexPyTorchA high-level toolbox for using complex valued neural networks in PyTorch项目地址: https://gitcode.com/gh_mirrors/co/complexPyTorch在深度学习领域复数神经网络正逐渐成为提升模型性能的新方向。complexPyTorch作为一个基于PyTorch的高级复数神经网络工具库为开发者提供了便捷的复数层和复数激活函数实现。本文将带你通过MNIST手写数字识别任务快速掌握如何使用complexPyTorch构建高性能复数卷积神经网络即使你是深度学习新手也能轻松上手复数神经网络开启深度学习新维度 传统的实数神经网络在处理具有相位和振幅信息的数据时往往力不从心而复数神经网络通过同时利用实部和虚部信息能够捕捉更丰富的数据特征。complexPyTorch库正是为了解决这一问题而设计它提供了完整的复数神经网络组件包括复数卷积层complexPyTorch/complexLayers.py 中的ComplexConv2d复数批归一化支持1D和2D数据的ComplexBatchNorm1d和ComplexBatchNorm2d复数激活函数complexPyTorch/complexFunctions.py 中的complex_relu复数池化层专为复数数据设计的complex_max_pool2d这些组件的组合使用能够让你的神经网络在处理图像、音频等具有波特性的数据时表现更出色。环境准备快速安装complexPyTorch ⚡开始实战前我们需要先搭建开发环境。通过以下步骤你可以在5分钟内完成所有准备工作克隆项目仓库git clone https://gitcode.com/gh_mirrors/co/complexPyTorch cd complexPyTorch安装依赖complexPyTorch基于PyTorch构建确保你的环境中已安装PyTorch 1.7。然后通过setup.py安装pip install .验证安装打开Python终端输入以下命令验证安装是否成功from complexPyTorch.complexLayers import ComplexConv2d print(complexPyTorch安装成功)MNIST实战构建复数卷积神经网络 我们将使用MNIST数据集来演示复数神经网络的构建过程。MNIST包含60,000张训练图像和10,000张测试图像每张图像是28×28像素的手写数字灰度图。数据加载与预处理首先我们需要加载MNIST数据集并进行预处理。complexPyTorch要求输入数据为复数类型因此我们需要将标准的实数张量转换为复数张量import torch from torchvision import datasets, transforms from torch.utils.data import Subset # 数据转换转为张量并归一化 trans transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (1.0,))]) # 加载数据集并取子集加速演示 train_set datasets.MNIST(../data, trainTrue, transformtrans, downloadTrue) train_set Subset(train_set, torch.arange(1000)) # 取1000个训练样本 test_set datasets.MNIST(../data, trainFalse, transformtrans, downloadTrue) test_set Subset(test_set, torch.arange(100)) # 取100个测试样本 # 创建数据加载器 train_loader torch.utils.data.DataLoader(train_set, batch_size64, shuffleTrue) test_loader torch.utils.data.DataLoader(test_set, batch_size64, shuffleTrue)构建复数卷积神经网络模型接下来我们使用complexPyTorch构建一个包含复数卷积层、复数批归一化和复数激活函数的卷积神经网络import torch.nn as nn import torch.nn.functional as F from complexPyTorch.complexLayers import ( ComplexConv2d, ComplexBatchNorm2d, ComplexLinear, ComplexDropout2d, ComplexBatchNorm1d ) from complexPyTorch.complexFunctions import complex_relu, complex_max_pool2d class ComplexNet(nn.Module): def __init__(self): super(ComplexNet, self).__init__() # 复数卷积层1: 输入1通道输出10通道卷积核5x5 self.conv1 ComplexConv2d(1, 10, 5, 1) # 复数批归一化 self.bn2d ComplexBatchNorm2d(10, track_running_statsFalse) # 复数卷积层2: 输入10通道输出20通道卷积核5x5 self.conv2 ComplexConv2d(10, 20, 5, 1) # 复数全连接层1 self.fc1 ComplexLinear(4*4*20, 500) # 复数dropout层 self.dropout ComplexDropout2d(p0.3) # 复数批归一化 self.bn1d ComplexBatchNorm1d(500, track_running_statsFalse) # 复数全连接层2输出10类 self.fc2 ComplexLinear(500, 10) def forward(self, x): # 转为复数张量实部为原始图像虚部初始化为0 x x.type(torch.complex64) # 卷积块1 x self.conv1(x) # 复数卷积 x complex_relu(x) # 复数ReLU激活 x complex_max_pool2d(x, 2, 2) # 复数最大池化 x self.bn2d(x) # 复数批归一化 # 卷积块2 x self.conv2(x) # 复数卷积 x complex_relu(x) # 复数ReLU激活 x complex_max_pool2d(x, 2, 2) # 复数最大池化 # 全连接层 x x.view(-1, 4*4*20) # 展平 x self.fc1(x) # 复数全连接 x self.dropout(x) # 复数dropout x complex_relu(x) # 复数ReLU激活 x self.bn1d(x) # 复数批归一化 x self.fc2(x) # 复数全连接 # 取模后应用softmax x x.abs() x F.log_softmax(x, dim1) return x这个模型的核心在于全部使用复数运算组件从卷积到激活再到归一化形成了完整的复数计算流。模型训练与评估定义好模型后我们就可以开始训练了。训练过程与标准PyTorch模型类似但需要注意将输入数据转换为复数类型# 选择设备 device torch.device(cuda if torch.cuda.is_available() else cpu) model ComplexNet().to(device) optimizer torch.optim.SGD(model.parameters(), lr5e-3, momentum0.9) # 训练函数 def train(model, device, train_loader, optimizer, epoch): model.train() for batch_idx, (data, target) in enumerate(train_loader): data, target data.to(device).type(torch.complex64), target.to(device) optimizer.zero_grad() output model(data) loss F.nll_loss(output, target) loss.backward() optimizer.step() if batch_idx % 100 0: print(fTrain\t Epoch: {epoch:3} [{batch_idx * len(data):6}/{len(train_loader.dataset):6} ({100. * batch_idx / len(train_loader):3.0f}%)]\tLoss: {loss.item():.6f}) # 测试函数 def test(model, device, test_loader, epoch): model.eval() test_loss 0 correct 0 with torch.no_grad(): for data, target in test_loader: data, target data.to(device).type(torch.complex64), target.to(device) output model(data) test_loss F.nll_loss(output, target, reductionsum).item() pred output.argmax(dim1, keepdimTrue) correct pred.eq(target.view_as(pred)).sum().item() test_loss / len(test_loader.dataset) print(fTest\t Epoch: {epoch:3}\tAverage loss: {test_loss:.4f}, Accuracy: {correct}/{len(test_loader.dataset)} ({100. * correct / len(test_loader.dataset):.0f}%)) # 运行训练4个epoch for epoch in range(4): train(model, device, train_loader, optimizer, epoch) test(model, device, test_loader, epoch)实验结果与分析 在仅使用1000个训练样本和100个测试样本的情况下经过4个epoch的训练我们得到的典型结果如下Train Epoch: 0 [ 0/ 1000 ( 0%)] Loss: 2.575082 Test Epoch: 0 Average loss: 0.8683, Accuracy: 76/100 (76%) Train Epoch: 1 [ 0/ 1000 ( 0%)] Loss: 0.803982 Test Epoch: 1 Average loss: 0.1948, Accuracy: 94/100 (94%) Train Epoch: 2 [ 0/ 1000 ( 0%)] Loss: 0.366340 Test Epoch: 2 Average loss: 0.1600, Accuracy: 95/100 (95%) Train Epoch: 3 [ 0/ 1000 ( 0%)] Loss: 0.411020 Test Epoch: 3 Average loss: 0.0883, Accuracy: 97/100 (97%)从结果可以看出复数神经网络在少量数据上就能快速收敛最终达到97%的测试准确率。这表明复数神经网络能够更高效地利用数据中的信息特别适合在数据量有限的场景下使用。进阶技巧优化复数神经网络性能 要进一步提升复数神经网络的性能你可以尝试以下技巧调整复数批归一化参数在 complexLayers.py 中尝试启用track_running_statsTrue来跟踪训练过程中的统计信息。使用更复杂的复数激活函数除了complex_relu你还可以尝试实现复数版本的Leaky ReLU或ELU激活函数。增加网络深度在现有模型基础上添加更多的复数卷积层增强特征提取能力。优化学习率调度使用学习率衰减策略如StepLR代替固定学习率可能会获得更好的收敛效果。总结复数神经网络的优势与未来 通过本文的MNIST实战我们展示了如何使用complexPyTorch快速构建和训练复数卷积神经网络。相比传统的实数神经网络复数神经网络具有以下优势更强的特征表达能力同时利用实部和虚部信息捕捉数据中的相位和振幅特征更高的计算效率复数运算可以在相同的硬件资源下处理 twice 的信息量更好的泛化性能在小样本数据集上表现出更优的收敛速度和准确率complexPyTorch库为开发者提供了构建复数神经网络的完整工具链其核心代码实现位于 complexPyTorch/ 目录下。无论是学术研究还是工业应用复数神经网络都展现出巨大的潜力特别是在图像处理、信号处理和量子机器学习等领域。现在你已经掌握了使用complexPyTorch构建复数神经网络的基本方法快去尝试将这一强大工具应用到你的项目中吧如果需要更详细的API文档可以参考项目中的 Example.ipynb 示例文件里面包含了更多复杂网络结构的实现示例。【免费下载链接】complexPyTorchA high-level toolbox for using complex valued neural networks in PyTorch项目地址: https://gitcode.com/gh_mirrors/co/complexPyTorch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考