网络举例---------Pytorch

本文深入解析了深度学习中两种核心网络结构:卷积神经网络(CNN)与循环神经网络(RNN),包括LSTM和GRU。详细介绍了网络的构建过程,从卷积层、池化层到全连接层,以及RNN的隐藏状态更新机制。同时,文章还提供了基于PyTorch的实现代码,涵盖了模型定义、训练流程、损失函数与优化器的选择,以及模型的保存与加载。
摘要由CSDN通过智能技术生成
import torch
import torch.nn as nn
import torch.nn.functional as F

1、卷积网络
    class Net(nn.Module):
        def __init__(self,'这里放参数'):
            super(Net,self).__init__()
            @CNN
            # 输入通道数,输出通道数/卷积核个数,卷积核尺寸
            self.conv1 = nn.Cnv2d(in_channels=3,out_channels=16,kernel_size=5)
            @pool
            # 池化核尺寸
            self.pool1 = nn.MaxPool2d(kernel_size=2)
            self.conv2 = nn.Cnv2d(in_channels=16,out_channels=36,kernel_size=3)
            # 池化核尺寸
            self.pool2 = nn.MaxPool2d(kernel_size=2)
            self.fc1 = nn.Linear(1296,128)
            self.fc2 = nn.Linear(128,10)
        def forward(self,x):
            # 输入数据形状:32*32*3(size*in_channels)
            x = self.pool1(F.relu(self.conv1(x)))
            x = self.pool2(F.relu(self.conv2(x)))
            x = x.view(-1,1296)
            x = F.relu(self.fc2(F.relu(self.fc1(x))))
            return x
2、rnn网络、LSTM网络
    class Net(nn.Module):
        def __init__(self,input_size,hidden_size):
            super(Net,self).__init__()
            self.hidden_size = 20
            @RNN
            # 输入特征数10,隐藏层状态维度20,两层RNN
            self.rnn = nn.RNN(input_size=10,hidden_size=self.hidden_size,num_layers=2)
            @LSTM
            self.lstm1 = nn.LSTM(input_size=10,hidden_size=self.hidden_size,num_layers=2)
            @GRU
            self.gru = torch.nn.GRU(input_size=10,hidden_size=self.hidden_size,num_layers=2)
            self.fc1 = nn.Linear(self.hidden_size, self.hidden_size)
            self.out = nn.Linear(self.hidden_size, out_num)

        def forward(self,X):
            # 输入数据形状:seq,batch,feature
            @RNN
            output,h_n = self.rnn(X)
            @LSTM
            r_out,(h_n,h_c) = self.lstm1(X)
            @GRU
            output,h_n = self.gru(X)
            r_out = F.leaky_relu(self.fc1(r_out.squeeze()))
            out = self.out(r_out)
            return out

# 模型
model = Net(state_num,hidden_size)
# model = model.to('cuda')
# 损失
LOSS = nn.MSELoss()
# 优化器
optimizer = torch.optim.Adam(model.parameters(), lr=0.001, momentum=0.9)

# 训练
model.train()
for i in range(1000):
    # 前向传播
    y_pred = model(trainDATA)
    # 计算损失
    loss = LOSS(y_pred,labelDATA)
    # 梯度清零,或optimizer.zero_grad()
    model.zero_grad()  
    # 反向传播,计算w和b的梯度
    loss.backward()
    # 更新参数
    optimizer.step()
# 保存模型
torch.save(model, 'lstm_T.pkl')

# 测试
model.eval()
# 加载模型
model = torch.load('model_T.pth')
y_pred = model(DATA)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值