一、使用pytorch复现课上例题。
二、 对比【作业3】和【作业2】的程序,观察两种方法结果是否相同?如果不同,哪个正确?
三、【作业2】程序更新
四、对比【作业2】与【作业3】的反向传播的实现方法。总结并陈述。
五、激活函数Sigmoid用PyTorch自带函数torch.sigmoid(),观察、总结并陈述。
六、激活函数Sigmoid改变为Relu,观察、总结并陈述。
七、损失函数MSE用PyTorch自带函数 t.nn.MSELoss()替代,观察、总结并陈述。
八、损失函数MSE改变为交叉熵,观察、总结并陈述。
九、改变步长,训练次数,观察、总结并陈述。
十、权值w1-w8初始值换为随机数,对比【作业2】指定权值结果,观察、总结并陈述。
总结
一、使用pytorch复现课上例题。
import torch
w1 = torch.randn(1, requires_grad=True)
w2 = torch.randn(1, requires_grad=True)
w3 = torch.randn(1, requires_grad=True)
w4 = torch.randn(1, requires_grad=True)
a = torch.tensor(1.)
print("a = ", a.data)
print("w = ", w1.data, w2.data, w3.data, w4.data)
b = w1 * a
c = w2 * a
d = w3 * b + w4 * c # compute graph
print("d = ", d.data)
L = (10 - d).sum() # Loss function
print("L = ", L.data)
L.backward() # Back propagate
print("grad : ",w1.grad, w2.grad, w3.grad, w4.grad)
learning_rate = 1
w1.data = w1.data - learning_rate * w1.grad.data
w2.data = w2.data - learning_rate * w2.grad.data
w3.data = w3.data - learning_rate * w3.grad.data
w4.data = w4.data - learning_rate * w4.grad.data
print("w new = ", w1.data, w2.data, w3.data, w4.data)
二、 对比【作业3】和【作业2】的程序,观察两种方法结果是否相同?如果不同,哪个正确?
两种方法的不同,Pytorch计算的正确