3,4节一起,课堂代码:
#展示的代码,实现反向传播
import torch
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 3.0, 4.0]
w = torch.Tensor([1.0])
w.requires_grad = True
#定义forward(x)的计算图谱
def forward(x):
return x * w
#定义loss方程的计算图谱
def loss(x,y):
y_pred = forward(x)
return (y_pred - y) ** 2
print("predict (before training)", 4, forward(4).item())#打印出未训练前,x=4时,预测y的值是多少
#开始训练100次,根据得到的grad改变w的值
train_recon_loss=[]
for epoch in range(100):
for x, y in zip(x_data, y_data):
l = loss(x,y)
l.backward()
print('\tgrad:', x, y, w.grad.item())
w.data = w.data - 0.01 * w.grad.data
w.grad.data.zero_()
print("progress:", epoch, l.item())
#打印训练之后对于x=4的预测值
print("predict(after training)", 4, forward(4).item())
'''
#不会画图,后面需要学习
plt.switch_backend('Agg')
#1.训练时先新建个列表,然后将loss值调用列表的append方法存入列表中
#2.例如列表train_recon_loss,Discriminator_loss...,然后将列表名替换train_recon_loss,Discriminator,利用plot即可画出曲线
#3.最后将画的图保存成图片,imgpath为自定义的图片保存路径。
# plt.figure(num = 2, figsize=(640,480))
plt.figure()
plt.plot(train_recon_loss,'b',label = 'Recon_loss')
plt.ylabel('train_recon_loss')
plt.xlabel('iter_num')
plt.legend()
plt.savefig(os.path.join(imgPath,"1_recon_loss.jpg"))
plt.figure()
plt.plot(train_loss_adv,'r',label = 'Discriminator_loss')
plt.ylabel('Discriminator_loss')
plt.xlabel('iter_num')
plt.legend()
plt.savefig(os.path.join(imgPath,"2_train_loss_adv.jpg"))
'''
课后作业代码:
#展示的代码,实现反向传播
import torch
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 3.0, 4.0]
w = torch.Tensor([1.0])
w.requires_grad = True
#定义forward(x)的计算图谱
def forward(x):
return x * w
#定义loss方程的计算图谱
def loss(x,y):
y_pred = forward(x)
return (y_pred - y) ** 2
print("predict (before training)", 4, forward(4).item())#打印出未训练前,x=4时,预测y的值是多少
#开始训练100次,根据得到的grad改变w的值
train_recon_loss=[]
for epoch in range(100):
for x, y in zip(x_data, y_data):
l = loss(x,y)
l.backward()
print('\tgrad:', x, y, w.grad.item())
w.data = w.data - 0.01 * w.grad.data
w.grad.data.zero_()
print("progress:", epoch, l.item())
#打印训练之后对于x=4的预测值
print("predict(after training)", 4, forward(4).item())
'''
#不会画图,后面需要学习
plt.switch_backend('Agg')
#1.训练时先新建个列表,然后将loss值调用列表的append方法存入列表中
#2.例如列表train_recon_loss,Discriminator_loss...,然后将列表名替换train_recon_loss,Discriminator,利用plot即可画出曲线
#3.最后将画的图保存成图片,imgpath为自定义的图片保存路径。
# plt.figure(num = 2, figsize=(640,480))
plt.figure()
plt.plot(train_recon_loss,'b',label = 'Recon_loss')
plt.ylabel('train_recon_loss')
plt.xlabel('iter_num')
plt.legend()
plt.savefig(os.path.join(imgPath,"1_recon_loss.jpg"))
plt.figure()
plt.plot(train_loss_adv,'r',label = 'Discriminator_loss')
plt.ylabel('Discriminator_loss')
plt.xlabel('iter_num')
plt.legend()
plt.savefig(os.path.join(imgPath,"2_train_loss_adv.jpg"))
'''
很怪,目前出现了三个问题:
已经下载了pytorch,但是只能在anacoda里面切换环境,为什么不能直接在jupyter book里面用?
(突然可以了,已解决,参考这位大佬的找不到 pytorch和matplotlib模块)
不明白为什么,画的图只能在root核心下才能画出来,不知道是不是我的设置有问题
pytorch下画图和python环境下画图有什么区别吗?怎么用呢?