首页 > 其他分享 >ziyi-lstm-train代码

ziyi-lstm-train代码

时间:2023-04-18 09:45:07浏览次数:32  
标签:loss ziyi 模型 step train loadData lstm 输入

lstm的train代码


def train_lstm(net,lr,train_loader,total_epoch):
    global_step = 1
    optimizer = torch.optim.Adam(net.parameters(), lr=lr)
    scheduler = lr_scheduler.MultiStepLR(optimizer, milestones=[i for i in range(0, 500, 150)][1:], gamma=0.05)
    loss_func = torch.nn.MSELoss()
    loss_metrics = AverageValueMeter()
    # with torch.no_grad():
    ########## training set##########
    for epoch in range(total_epoch):
        epoch_loss = 0
        for step, (x, y) in tqdm(enumerate(train_loader)):
            print(x.shape)
            output = net(x)
            print(output.shape)
            ##########加mask训练
            loadData = np.load('A.npy')
            loadData = torch.tensor(loadData.reshape(loadData.shape[0] * loadData.shape[1]),
                                    dtype=torch.float32).cuda()
            output = output * loadData
            y = y * loadData
            ##########
            train_loss = loss_func(output, y)
            optimizer.zero_grad()
            train_loss.backward()
            optimizer.step()
            global_step = global_step + 1
            epoch_loss += train_loss.item()
            loss_metrics.add(train_loss.item())
        print("[epcho {}]:loss {}".format(epoch, loss_metrics.value()[0]))
        loss_metrics.reset()
        scheduler.step()
    return net

for step, (x, y) in tqdm(enumerate(train_loader)):

enumerate函数来迭代遍历train_loader中的每个批次(batch)的数据,x表示输入数据,y表示标签数据

train_loader是一个数据加载器对象,通常用于从训练数据中加载批次的输入(x)和标签(y),以供模型进行训练。

tqdm是一个Python库,用于在循环中显示进度条

在每次迭代中,x和y将被传递给net模型进行前向传播和计算损失,然后通过优化器进行反向传播和参数更新,从而实现对LSTM模型的训练

optimizer = torch.optim.Adam(net.parameters(), lr=lr) 是用于创建一个Adam优化器对象,用于在模型训练过程中更新模型的参数。

scheduler = lr_scheduler.MultiStepLR(optimizer, milestones=[i for i in range(0, 500, 150)][1:], gamma=0.05)

是用于创建一个多步长学习率调整器(scheduler)对象,用于在模型训练过程中动态调整学习率

这里通过[i for i in range(0, 500, 150)][1:]用于生成一个从 0 到 500(不包括 500)的列表,并按照步长 150 进行间隔。

loss_metrics = AverageValueMeter()

loss_metrics = AverageValueMeter() 是用于创建一个用于计算平均值的指标(metric)对象。AverageValueMeter 是 PyTorch 提供的一个用于计算平均值的指标对象,它可以在每次迭代中接收一个新的数值,并计算累积的平均值

通过 loss_metrics.add(train_loss.item()) 将每次迭代的损失函数值添加到 loss_metrics 中,然后通过 loss_metrics.value() 可以获取当前的平均值,用于监控训练过程中损失函数的变化情况。

scheduler.step()

scheduler.step() 是调用 PyTorch 中的学习率调整器(LR scheduler)的方法,用于更新优化器中的学习率。

在示例中,使用了 MultiStepLR 学习率调整器,它在每个指定的里程碑(milestones)处更新学习率,通过调用 scheduler.step() 来更新学习率的值。

global_step = 1

global_step = 1 是设置一个全局步数(global step)的初始值。在训练神经网络模型时,每一次参数更新的过程通常被称为一个步(step)。global_step 变量用于记录全局步数,通常在每次参数更新时会递增,以便在训练过程中进行计数

MSE Loss

是一种常用的回归问题损失函数,用于度量模型输出与真实标签之间的平均平方误差。、、在每次训练迭代中,通过计算模型的输出与真实标签之间的均方误差来计算损失,并用该损失来进行反向传播和优化器更新参数。

LSTM(10140, 3380, batch_first=True)

  • 10140:输入特征的维度,即输入数据的特征向量的长度。

  • 3380:隐藏状态的维度,即 LSTM 模型内部的隐藏状态向量的长度。

  • batch_first=True:指定输入数据的维度顺序,将批次维度放在第一维度。如果设置为 False,则输入数据的维度顺序为 (sequence_length, batch_size, input_size),默认为 False

    这段代码定义了一个具有 10140 个输入特征、隐藏状态维度为 3380 的 LSTM 模型,并将输入数据的批次维度放在第一维度。batch_first=True 可以使得输入数据的维度顺序为 (batch_size, sequence_length, input_size),这在很多情况下更加直观和方便。

    return net

    return net 是函数 train_lstm 的返回值。

    返回训练后的模型是函数的一种常见做法,因为在训练过程中,模型的参数会被不断更新以逐渐优化模型的性能。一旦训练完成,将训练后的模型返回给调用者,可以使调用者在后续的应用中使用该模型进行预测、推理等任务

    这里的net 就是mylstm模型。也就是:

    myLSTM(
    (lstm): LSTM(10140, 3380, batch_first=True)
    (dense): Linear(in_features=3380, out_features=3380, bias=True)
    )

    global_step = 1

    全局步数。epoch_loss 用于计算每个 epoch 的损失,而 global_step 则用于记录训练过程中的全局步数。

loadData = torch.tensor(loadData.reshape(loadData.shape[0] * loadData.shape[1]),dtype=torch.float32).cuda()

  1. loadData.reshape(loadData.shape[0] * loadData.shape[1])loadData 的形状进行改变,将其转换为一个一维张量。这里使用了 NumPy 的 reshape() 方法,将 loadData 的形状从二维(或更高维)变为一维,长度为 loadData.shape[0] * loadData.shape[1]
  2. torch.tensor(..., dtype=torch.float32) 将上一步得到的一维 NumPy 数组转换为 PyTorch 的张量,并指定其数据类型为 torch.float32,即单精度浮点数。
  3. .cuda() 将张量移动到 GPU 上进行计算。这里使用了 PyTorch 的 .cuda() 方法,将张量从 CPU 内存移动到 GPU 内存,以便在 GPU 上进行计算。

掩码(mask)

在深度学习中,掩码(mask)通常是一个与输入数据形状相同的二进制张量,用于对输入数据进行逐元素的屏蔽或加权操作。掩码中的值为0或1,用于控制对应位置的输入数据是否参与计算。

output = output * loadData

这里的目的可能是对 output 进行按元素乘法,使用 loadData 作为掩码(mask),将 output 中对应位置的值与 loadData 中对应位置的值相乘,从而实现对 output 进行部分元素的屏蔽或加权。

convlstm-lr的模型和convlstm-conv的模型有啥区别

convlstm-lrconvlstm-conv 分别指代了两种不同的 ConvLSTM 模型,其区别主要体现在网络结构和输入特征的处理方式上。

  1. convlstm-lr: 这种模型在输入特征的处理上,直接将原始的输入特征作为 ConvLSTM 模型的输入。ConvLSTM 是一种结合了卷积神经网络(Convolutional Neural Network, CNN)和长短时记忆网络(Long Short-Term Memory, LSTM)的混合网络结构,可以对序列数据进行建模。convlstm-lr 模型直接在输入特征上应用卷积操作,并通过 LSTM 单元对卷积输出进行时序建模,从而融合了卷积和循环的特性。
  2. convlstm-conv: 这种模型在输入特征的处理上,先使用卷积神经网络对输入特征进行特征提取,然后再将提取的特征输入到 ConvLSTM 模型中。与 convlstm-lr 不同,convlstm-conv 模型在输入特征上应用了卷积操作,将输入特征转换为高层次的抽象特征表示,然后再通过 ConvLSTM 进行时序建模,从而在卷积和循环的结合上有所调整。

为啥是return net

这里的net就是mylstm。

返回训练后的模型是函数的一种常见做法,因为在训练过程中,模型的参数会被不断更新以逐渐优化模型的性能。一旦训练完成,将训练后的模型返回给调用者,可以使调用者在后续的应用中使用该模型进行预测、推理等任务。

在给定的代码中,train_lstm 函数通过训练输入的 LSTM 模型 net,并返回经过训练后的模型 net。调用该函数时,可以通过接收返回的模型,并对其进行进一步的操作,比如保存模型参数、使用模型进行预测等

threshold = torch.nn.Threshold(0., 0.0)是啥意思

threshold 是 PyTorch 中的一个激活函数,其作用是将输入张量的值进行阈值化处理。

具体而言,threshold 函数的输入是一个张量,其中包含了待处理的数值。函数会将输入张量中小于指定阈值的值设置为0,而大于等于阈值的值保持不变。

LSTM(10140, 3380, batch_first=True)

其中的参数含义如下:

  • 10140:输入特征的维度,即输入数据的特征向量的长度。
  • 3380:隐藏状态的维度,即 LSTM 模型内部的隐藏状态向量的长度。
  • batch_first=True:指定输入数据的维度顺序,将批次维度放在第一维度。如果设置为 False,则输入数据的维度顺序为 (sequence_length, batch_size, input_size),默认为 False

dataset = Data.TensorDataset(features_train, label_train);是啥意思

这段代码的作用是创建一个 PyTorch 的 TensorDataset 数据集对象,用于将训练数据 features_train 和对应的标签 label_train 组合在一起,以便于后续的数据加载和处理。

标签:loss,ziyi,模型,step,train,loadData,lstm,输入
From: https://www.cnblogs.com/xinxuann/p/17328452.html

相关文章

  • matlab代码:基于CNN和LSTM的个体用户负荷预测方法
    matlab代码:基于CNN和LSTM的个体用户负荷预测方法摘要:在本文中,我们考虑的问题是在需求响应机制下学习居民电力用户的消费模式。提出了两种利用室外温度、电价和前期负荷预测小时负荷的新方法。提出的模型分别基于CNN和长短期记忆网络。数值结果显示了所提出的方法在预测精度方......
  • Stochastic Training of Graph Convolutional Networks with Variance Reduction
    目录概符号说明Motivation本文方法代码ChenJ.,ZhuJ.andSongL.Stochastictrainingofgraphconvolutionalnetworkswithvariancereduction.ICML,2018.概我们都知道,GCN虽然形式简单,但是对于结点个数非常多的情形是不易操作的:多层的卷积之后基本上每个结点......
  • HNU2019 Summer Training 3 E. Blurred Pictures
    E.BlurredPicturestimelimitpertest2secondsmemorylimitpertest256megabytesinputstandardinputoutputstandardoutputDamonlovestotakephotosoftheplaceshevisitsduringhistravels,toputthemintoframes.Allofhisphotosarei......
  • Python代码:考虑需求响应的基于LSTM算法的住宅居民短期负荷预测
    Python代码:考虑需求响应的基于LSTM算法的住宅居民短期负荷预测关键词:LSTM负荷预测需求响应用电模式居民负荷预测 编程语言:python+TensorFlow平台主题:基于ANN-lstm的住宅居民需求响应负荷预测内容简介:代码主要是做的是考虑住宅居民需求响应的短期负荷预测,提出了一种利......
  • 论文解读( FGSM)《Adversarial training methods for semi-supervised text classificat
    论文信息论文标题:Adversarialtrainingmethodsforsemi-supervisedtextclassification论文作者:TaekyungKim论文来源:ICLR2017论文地址:download 论文代码:download视屏讲解:click1 背景1.1 对抗性实例(Adversarialexamples)通过对输入进行小扰动创建的实例,可显著增加机器......
  • 论文《深度多尺度卷积LSTM网络的出行需求和出发地预测》
    学习参考:https://blog.csdn.net/zuiyishihefang/article/details/128030409论文题目:《DeepMulti-ScaleConvolutionalLSTMNetworkforTravelDemandandOrigin-DestinationPredictions》是2020年发表在IEEE的文章。出处:IEEETransactionsonIntelligentTransportationS......
  • 卷积lstm论文
    论文题目:ConvolutionalLSTMNetwork:AMachineLearningApproachforPrecipitationNowcasting参考的学习文章:https://blog.csdn.net/m0_64557752/article/details/125882525文章出处:https://arxiv.org/abs/1506.04214v1代码:https://github.com/xinxuann/ConvLSTM_pytorch......
  • 【题解】CF472G Design Tutorial: Increase the Constraints
    《正解分块+FFT跑1min,__builtin_popcount暴力跑10s》《没人写正解,CF也不卡》思路正解:分块+FFT乱搞:__builtin_popcount首先我们知道哈明距离可以用一种\(O(|字符集||S|)\)的算法求。具体考虑枚举字符集中的每一个字符,将两个串中是该字符的位置看作\(1\),不是该字......
  • odoo 开发入门教程系列-约束(Constraints)
    约束(Constraints)上一章介绍了向模型中添加一些业务逻辑的能力。我们现在可以将按钮链接到业务代码,但如何防止用户输入错误的数据?例如,在我们的房地产模块中,没有什么可以阻止用户设置负预期价格。odoo提供了两种设置自动验证恒定式的方法:Python约束andSQL约束。SQL参考:与此......
  • sen soil moisture lstm 总结
    LSTM模型后增加Dense(全连接)层的目的是什么?LSTM的输出是最后一个时刻的h,是个unit维的向量,必须接一个全连接层才能把LSTM的输出转换成你想要的输出,可以简单理解成维度变换。LSTM输出的向量的维度是指定的units,但是最后在计算损失的时候是用的标签,标签也是向量,但是标签的向量维数......