Pytorch 深度学习框架快速学习(1)---- 神经网络惯性因子 Neural Network Momentum

2 篇文章 0 订阅
1 篇文章 0 订阅

谷明科技,用AI赋能未来

神经网络是当前机器学习中炙手可热的一个模型门类,其中的调参技巧也是层出不穷,从刚开始的BP,到SGD等。

在使用 Pytorch 的过程中,我们会发现在配置 SGD optimizer 的时候需要配置一个参数 momentum,那么这个参数是做什么的呢?

optimizer = optim.SGD(model.fc.parameters(), lr=1e-2, momentum=0.9)

这个必须要从SGD 的原理开始说起:

图的最上方为每个iteration(每个batch为一个iteration)中,权重的变化量的表达式,即学习因子 * 误差对当前参数  的偏微分。

但是SGD 的一大诟病点就是其对于异常点的波动太大,即如果出现了一个噪音点或者错误的数据,那么其对参数的调整可能十分剧烈,造成了参数的波动变化,不利于模型的稳定学习。

所以在上图的下方,增加了 一个对上一个 iteration 的权重偏差的引入,可以理解为汽车在驾驶过程中无论是打方向盘还是减速时候的惯性。

这样的话,当模型遇到一个比较大的误差的时候,不会完全按照当前误差进行调整参数,还要考虑之前的误差因素!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个基于Pytorch深度学习框架的BP神经网络预测股票的代码示例: ```python import torch import torch.nn as nn import torch.optim as optim import pandas as pd import numpy as np import matplotlib.pyplot as plt # define the neural network model class Net(nn.Module): def __init__(self, input_size, hidden_size): super(Net, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.relu = nn.ReLU() self.fc2 = nn.Linear(hidden_size, 1) def forward(self, x): out = self.fc1(x) out = self.relu(out) out = self.fc2(out) return out # load the stock data df = pd.read_csv('stock_data.csv') df = df.dropna() # remove any missing data # prepare the input and target data data = df['Close'].values.reshape(-1, 1).astype(np.float32) x_train = data[:-1] y_train = data[1:] # normalize the input and target data x_mean = x_train.mean() x_std = x_train.std() y_mean = y_train.mean() y_std = y_train.std() x_train = (x_train - x_mean) / x_std y_train = (y_train - y_mean) / y_std # convert the data to PyTorch tensors x_train = torch.from_numpy(x_train) y_train = torch.from_numpy(y_train) # define the model and optimizer net = Net(1, 10) criterion = nn.MSELoss() optimizer = optim.Adam(net.parameters(), lr=0.01) # train the model for epoch in range(1000): optimizer.zero_grad() outputs = net(x_train) loss = criterion(outputs, y_train) loss.backward() optimizer.step() if epoch % 100 == 0: print('Epoch {}, Loss: {:.4f}'.format(epoch, loss.item())) # make predictions on the test data x_test = np.array([800, 810, 820, 830, 840, 850]).astype(np.float32) x_test = (x_test - x_mean) / x_std x_test = torch.from_numpy(x_test) y_test = net(x_test).detach().numpy() y_test = y_test * y_std + y_mean # plot the predicted and actual values plt.plot(df['Close'].values, label='Actual') plt.plot(np.arange(7, 13), y_test, label='Predicted') plt.legend() plt.show() ``` 在这个示例中,我们首先定义了一个`Net`类来表示BP神经网络模型,然后加载股票数据,并将其拆分为输入和目标数据。我们还对数据进行了标准化,并将其转换为PyTorch张量。接下来,我们通过定义模型、损失函数和优化器来训练模型。最后,我们使用训练好的模型进行预测,并将结果可视化。 需要注意的是,在实际应用中,我们需要使用更多的股票数据和更复杂的模型来提高预测的准确性。此外,我们还需要进行交叉验证和调参等操作,以确保模型的鲁棒性和泛化能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值