课后作业-我才不是水文字

LawⅠ:A ROBOT MAY NOT INJURE A HUMAN BEING OR, THROUGH INACTION, ALLOW A HUMAN BEING TO COME TO HARM.

LawⅡ:A ROBOT MUST OBEY ORDERS GIVEN IT BY HUMAN BEINGS EXCEPT WHERE SUCH ORDERS WOULD CONFLICT WITH THE FIRST LAW.

LawⅢ:A ROBOT MUST PROTECT ITS OWN EXISTENCE AS LONG AS SUCH PROTECTION DOES NOT CONFLICT WITH THE FIRST OR SECOND LAW.


第一定律:机器人不得伤害人类个体,或者目睹人类个体将遭受危险而袖手不管

第二定律:机器人必须服从人给予它的命令,当该命令与第一定律冲突时例外

第三定律:机器人在不违反第一、第二定律的情况下要尽可能保护自己的生存

代码学习

关键代码


1.pytorch基础练习

from matplotlib import pyplot as plt
plt.hist(torch.randn(1000).numpy(), 100);

plt.hist(torch.randn(10**6).numpy(), 100);

2.线性回归模型

learning_rate = 1e-3
lambda_l2 = 1e-5

model = nn.Sequential(
nn.Linear(D, H),
nn.Linear(H, C)
)
model.to(device) # 把模型放到GPU上

nn 包含多种不同的损失函数,这里使用的是交叉熵(cross entropy loss)损失函数

criterion = torch.nn.CrossEntropyLoss()

这里使用 optim 包进行随机梯度下降(stochastic gradient descent)优化

optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate, weight_decay=lambda_l2)

开始训练

for t in range(1000):
# 把数据输入模型,得到预测结果
y_pred = model(X)
# 计算损失和准确率
loss = criterion(y_pred, Y)
score, predicted = torch.max(y_pred, 1)
acc = (Y == predicted).sum().float() / len(Y)
print('[EPOCH]: %i, [LOSS]: %.6f, [ACCURACY]: %.3f' % (t, loss.item(), acc))
display.clear_output(wait=True)

反向传播前把梯度置 0

optimizer.zero_grad()
# 反向传播优化
loss.backward()
# 更新全部参数
optimizer.step()

learning_rate = 1e-3
lambda_l2 = 1e-5

nn 包用来创建线性模型

每一个线性模型都包含 weight 和 bias

model = nn.Sequential(
nn.Linear(D, H),
nn.Linear(H, C)
)
model.to(device) # 把模型放到GPU上

nn 包含多种不同的损失函数,这里使用的是交叉熵(cross entropy loss)损失函数

criterion = torch.nn.CrossEntropyLoss()

这里使用 optim 包进行随机梯度下降(stochastic gradient descent)优化

optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate, weight_decay=lambda_l2)

开始训练

for t in range(1000):
# 把数据输入模型,得到预测结果
y_pred = model(X)
# 计算损失和准确率
loss = criterion(y_pred, Y)
score, predicted = torch.max(y_pred, 1)
acc = (Y == predicted).sum().float() / len(Y)
print('[EPOCH]: %i, [LOSS]: %.6f, [ACCURACY]: %.3f' % (t, loss.item(), acc))
display.clear_output(wait=True)

反向传播前把梯度置 0

optimizer.zero_grad()
# 反向传播优化
loss.backward()
# 更新全部参数
optimizer.step()

2.构建两层线性回归模型

learning_rate = 1e-3
lambda_l2 = 1e-5

这里可以看到,和上面模型不同的是,在两层之间加入了一个 ReLU 激活函数

model = nn.Sequential(
nn.Linear(D, H),
nn.ReLU(),
nn.Linear(H, C)
)
model.to(device)

下面的代码和之前是完全一样的,这里不过多叙述

criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate, weight_decay=lambda_l2) # built-in L2

训练模型,和之前的代码是完全一样的

for t in range(1000):
y_pred = model(X)
loss = criterion(y_pred, Y)
score, predicted = torch.max(y_pred, 1)
acc = ((Y == predicted).sum().float() / len(Y))
print("[EPOCH]: %i, [LOSS]: %.6f, [ACCURACY]: %.3f" % (t, loss.item(), acc))
display.clear_output(wait=True)

zero the gradients before running the backward pass.

optimizer.zero_grad()
# Backward pass to compute the gradient
loss.backward()
# Update params
optimizer.step()

Plot trained model

print(model)
plot_model(X, Y, model)

学习心得

针对线性数据,具有明显的数据增量的数据集,用线性回归进行分类效果较好

对于所有数据来说,神经回归模型效果一般较好,对于数据训练集较多的情况下,其进行回归模型建立的情况会更加明显

posted @ 2021-10-08 19:20  seems_happy  阅读(95)  评论(0)    收藏  举报