0
点赞
收藏
分享

微信扫一扫

12/13每日总结

拓扑排序

简介

拓扑排序就是找到做事的先后顺序

每个AOV网可能有一个或者多个拓扑排序

实现

①从AOV网中选择一个没有前驱(入度为0)的顶点并输出。 ②从网中删除该顶点和所有以它为起点的有向边。 ③重复①和②直到当前的AOV网为空或当前网中不存在无前驱的顶点为止。

使用三个数组进行实现

分别是 记录当前顶点入度的数组indegree 记录拓扑序列的数组print 保存度为零的顶点栈s

逆拓扑排序

将拓扑排序中的入度更换成出度即可,使用邻接表不适合实现逆拓扑排序,应该使用逆邻接表或者邻接矩阵

看完李沐的视频后,希望将所有练习竞赛进行一遍

波士顿房价预测

首先进行数据预处理

数据预处理先将训练集测试集合并,主要进行正规化,处理缺失值,将str转化为独热编码,然后将训练集的target进行单独保存

确定loss

nn库,例如nn.MSEloss()

搭建net

使用nn.Sequential作为容器开始搭建,同样使用nn

构建train函数

传入参数 输入 标签 测试输入
传入超参learning_rate,epochs, batch_size,weight_decay
使用迭代器
传入后构建优化器,optimizer
torch.clamp的作用是将值限制在一定范围内

import torch
 from torch import nn
 # x_train = x_train.drop('Id',axis=1)
 input_size  = x_train.shape[1]
 hidden_size = 10
 output_size = 1
 batch_size = 128
 neu = nn.Sequential(
     nn.Linear(input_size,hidden_size),
     nn.ReLU(),
     nn.Linear(hidden_size,hidden_size),
     nn.ReLU(),
     nn.Linear(hidden_size,output_size)
 )
 loss = nn.MSELoss()
 optimizer = torch.optim.Adam(neu.parameters(),lr=0.001)
 losses = []
 loss_a = []
 y_train = train_data['Sold Price']
 for i in range(0,len(x_train),batch_size):
     x = torch.tensor(x_train[i:i+batch_size].values,dtype=torch.float32)
     y = torch.tensor(y_train[i:i+batch_size].values,dtype=torch.float32).view(-1,1)
     y_pred = neu(x)
     l = loss(y_pred,y)
     losses.append(l.item())
     optimizer.zero_grad()
     l.backward()
     optimizer.step()
     if i % 1000 == 0:
         print(i)
         loss_a.append(sum(losses)/len(losses))
         losses = []
 import matplotlib.pyplot as plt
 plt.plot(loss_a)
 plt.show()
 

再简单不过的一次练习就完成了

举报

相关推荐

0 条评论