拓扑排序
简介
拓扑排序就是找到做事的先后顺序
每个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()
再简单不过的一次练习就完成了
标签:总结,13,12,nn,拓扑,torch,train,hidden,size From: https://blog.51cto.com/u_16196891/8804805