提供多个基于pytorch的函数神经网络结构代码
时间: 2023-12-14 19:03:27 浏览: 79
基于pytorch各种神经网络基础模型复现.zip
以下是几个使用PyTorch实现的不同类型的函数神经网络结构示例:
## 多层感知机(Multilayer Perceptron,MLP)
```python
import torch
import torch.nn as nn
import torch.optim as optim
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(784, 256) # 输入层到隐藏层1,784个输入,256个隐藏节点
self.fc2 = nn.Linear(256, 128) # 隐藏层1到隐藏层2,256个隐藏节点,128个隐藏节点
self.fc3 = nn.Linear(128, 10) # 隐藏层2到输出层,128个隐藏节点,10个输出
def forward(self, x):
x = torch.relu(self.fc1(x)) # 使用ReLU激活函数
x = torch.relu(self.fc2(x))
x = self.fc3(x)
return x
net = Net() # 创建神经网络实例
criterion = nn.CrossEntropyLoss() # 定义损失函数
optimizer = optim.SGD(net.parameters(), lr=0.01) # 定义优化器
```
在这个示例中,我们创建了一个具有两个隐藏层的多层感知机(MLP),使用ReLU激活函数。输入层有784个节点,隐藏层1有256个节点,隐藏层2有128个节点,输出层有10个节点。我们使用交叉熵损失函数和随机梯度下降优化器进行训练。
## 卷积神经网络(Convolutional Neural Network,CNN)
```python
import torch
import torch.nn as nn
import torch.optim as optim
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 16, 3) # 输入层到卷积层1,3个输入通道,16个卷积核
self.conv2 = nn.Conv2d(16, 32, 3) # 卷积层1到卷积层2,16个输入通道,32个卷积核
self.pool = nn.MaxPool2d(2, 2) # 池化层,2x2大小的窗口,步长为2
self.fc = nn.Linear(32 * 6 * 6, 10) # 全连接层,32个6x6特征图,10个输出
def forward(self, x):
x = self.pool(torch.relu(self.conv1(x))) # 使用ReLU激活函数和最大池化
x = self.pool(torch.relu(self.conv2(x)))
x = x.view(-1, 32 * 6 * 6) # 将特征图展平成向量
x = self.fc(x)
return x
net = Net() # 创建神经网络实例
criterion = nn.CrossEntropyLoss() # 定义损失函数
optimizer = optim.SGD(net.parameters(), lr=0.01) # 定义优化器
```
在这个示例中,我们创建了一个具有两个卷积层和一个全连接层的卷积神经网络(CNN),使用ReLU激活函数和最大池化。输入层有3个输入通道,第一个卷积层有16个卷积核,第二个卷积层有32个卷积核,池化层使用2x2大小的窗口和步长为2。最后的全连接层有10个输出节点。我们使用交叉熵损失函数和随机梯度下降优化器进行训练。
## 循环神经网络(Recurrent Neural Network,RNN)
```python
import torch
import torch.nn as nn
import torch.optim as optim
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.rnn = nn.RNN(10, 20, 2) # RNN层,10个输入,20个隐藏节点,2个循环层
self.fc = nn.Linear(20, 1) # 全连接层,20个隐藏节点,1个输出
def forward(self, x):
x, h = self.rnn(x) # x是所有时刻的输出,h是最后一个时刻的隐藏状态
x = self.fc(h[-1]) # 取最后一个时刻的隐藏状态并使用全连接层
return x
net = Net() # 创建神经网络实例
criterion = nn.MSELoss() # 定义损失函数
optimizer = optim.SGD(net.parameters(), lr=0.01) # 定义优化器
```
在这个示例中,我们创建了一个具有一个循环层和一个全连接层的循环神经网络(RNN)。输入层有10个节点,循环层有20个隐藏节点,2个循环层。我们在最后一个时刻的隐藏状态上使用一个全连接层来产生输出。我们使用均方误差损失函数和随机梯度下降优化器进行训练。
阅读全文