首先自己手撸一个,按照b站上的视频来。
这是一个用神经网络解决二分类问题的简单例子,先用单层神经网络,然后用多层神经网络(深度学习了)。
神经网络的核心是将输入的每个神经节的值乘以其权重,再进行一定变换(比如用sigmoid函数,即激活函数),得到输出。这个过程叫前向传播(Forward propagation),得到的输出结果与训练值对比,计算误差,并用梯度下降法计算纠正值,纠正初始的权重(这叫反向传播,Back propagation)。如此循环多次,得到训练后的各个神经节的权重值,最后用这组权重值去预测。而多层神经网络在输入层和输出层之间有一层或多层隐藏层,每层有若干个神经节(隐藏层的层数和每层的神经节个数就是调参的对象),前一层的输出就是后一层的输入,每一层都进行上述的前向传播和后向传播过程。机器学习的目的,就是确定这些权重系数。
根据视频用numpy实现了上述单层和多层神经网络,大致清楚了基础过程。接下来就尝试用pytorch框架实现这个过程。
用这篇跟着撸吧。(好像要科学上网……)
网上大多数pytorch都用图像方面的应用来做例子,比如识别手写数字等。这篇是用线性回归作为例子来写的,我觉得比较好。
把代码撸了一遍,使用pytorch的主要步骤是:
①把数据转化为张量tensor,还可以组装为Dataset,目的是可以使用DataLoader加载数据,可以分批加载。张量与numpy的n维数组的区别是前者可以在GPU里使用。注意设置需要的参数的requires_grad为True。
②创建模型,继承自torch.nn.Module。主要实现初始化参数和前向传播forward过程。
③设置超参数,如学习率,迭代次数等。
④设置损失函数类型,如nn.MSELoss等,根据模型类型选择合适的损失函数。
⑤设置优化器,如optim.SGD等。
⑥建立迭代循环,每次循环中依次完成下述步骤:
a.设置训练模式:model.train()
b.获取预测值:y_pred = model(x)
c.计算损失: loss = loss_fn(y, y_pred)
d.计算loss的梯度,后向传播过程:loss.backward()
e.更新参数、梯度置零(用优化器完成):
optimizer.step()
optimizer.item()
f.返回损失值。
⑦迭代后获得结果的参数,即模型结果。
⑧应用建模结果的参数对新数据进行预测。
最主要的,计算损失、计算梯度、更新参数等都由pytorch操作。
代码
下面就尝试用pytorch构建深度学习模型来解题。
1 | import torch |
提交了,0分……再研究一下吧。
试一下optuna
参考这篇
用来找xgboost模型的参数,结果为learning_rate = 0.07, max_depth = 15。
用这个参数提交一次看看,结果是2892.153。看来还需要找更多的参数。先摆着吧,至少方法会了。
下次,打算从头学一下深度学习和pytorch,在kaggle上找到两篇文章。
我发文章的三个地方,欢迎大家在朋友圈等地方分享,欢迎点“在看”。
我的个人博客地址:https://zwdnet.github.io
我的知乎文章地址: https://www.zhihu.com/people/zhao-you-min/posts
我的微信个人订阅号:赵瑜敏的口腔医学学习园地