当前位置: 首页 > news >正文

头歌之动手学人工智能-Pytorch 之线性回归

目录

第1关:初始化参数

任务描述

编程要求

测试说明

在创造家的事业中,每一步都要三思而后行,而不是盲目地瞎碰。——米丘林开始你的任务吧,祝你成功!

第2关:建立模型,定义损失和优化函数

任务描述

编程要求

测试说明

真正的科学家应当是个幻想家;谁不是幻想家,谁就只能把自己称为实践家。 —— 巴尔扎克开始你的任务吧,祝你成功!

第3关:训练模型

任务描述

编程要求

测试说明

真正的科学家应当是个幻想家;谁不是幻想家,谁就只能把自己称为实践家。 —— 巴尔扎克开始你的任务吧,祝你成功!

第4关:validation

任务描述

编程要求

测试说明

聪明的资质、内在的干劲、勤奋的工作态度和坚韧不拔的精神,这些都是科学研究成功所需要的条件。——贝弗里奇开始你的任务吧,祝你成功!


第1关:初始化参数

经过之前几节实训的学习,想必同学们对 Pytorch 的基础定义和应用有了一个基本的了解。接下来,利用线性回归分析综合应用之前的知识。

  • 任务描述

本关要求同学们学习数据转换、数据加载的方法,为之后算法的学习提供适宜的样本数据。

本关任务:本关要求下载MNIST 书写数据集,并创建DataLoader变量data_loader,输出 data _loader 中数据大小。

  • 编程要求

本关涉及的代码文件为data.py,本次编程任务是补全右侧编辑器中Begin至End中间的代码,具体要求如下:

下载MNIST 数据集,保存到当前目录的./data中;
创建batch_size=100, shuffle=True的DataLoader;
输出 data_loader中数据类型;
具体请参见后续测试样例。

  • 测试说明

测试过程:

本关涉及的测试文件为dataTest.py,运行用户填写后的程序判断正误;
测试程序将检测两个方面:是否包含特定的代码行以及程序的输出是否正确,若两个方面均正确则输出下面的预期输出,否则报错;
请注意输出格式及规范;
注意,在声明变量时,请按照提示命名,否则将会报错。
以下是测试样例:

测试输入:

预期输出:

Files already downloaded
<class 'torchvision.datasets.mnist.MNIST'>

Congratulation!

在创造家的事业中,每一步都要三思而后行,而不是盲目地瞎碰。——米丘林
开始你的任务吧,祝你成功!

import torch
import torchvision.datasets as dsets
import torchvision.transforms as transforms#/********** Begin *********/
# 下载MNIST数据集Mnist_dataset = dsets.MNIST(root='./data',train=True,transform=transforms.ToTensor(),download=True)# 创建batch_size=100, shuffle=True的DataLoader类型的变量data_loaderdata_loader = torch.utils.data.DataLoader(dataset=Mnist_dataset,
batch_size=100,shuffle=True)# 输出 data_loader中数据类型print("<class '"+ str(type(data_loader.dataset))+"'>")#/********** End *********/ 

第2关:建立模型,定义损失和优化函数

准备好数据之后,我们就要开始建立线性回归模型了!

  • 任务描述

本实训主要针对线性回归模型进行学习,继承Modules类,并实现其__init__()、forward()方法。

本关任务:本关提供了一个继承自nn.Module 的类LinearRegression,拥有创建线性模型的基本框架,按照要求补充其__init__()、forward()方法。 并通过实例化一个新建的模型,输出该模型的.parameters属性。

  • 编程要求

本关涉及的代码文件为createModule.py,本次编程任务是补全右侧编辑器中Begin至End中间的代码,具体要求如下:

完成__init__()、forward()方法;

实例化一个新建的模型model;

输出该模型 model 的.parameters属性;

具体请参见后续测试样例。

  • 测试说明

测试过程:

本关涉及的测试文件为moduleTest.py,运行用户填写后的程序判断正误;
测试程序将检测两个方面:是否包含特定的代码行以及程序的输出是否正确,若两个方面均正确则输出下面的预期输出,否则报错;
请注意输出格式及规范;
注意,在声明变量时,请按照提示命名,否则将会报错。
以下是测试样例:

测试输入:

预期输出:

<bound method Module.parameters of LinearRegression(
  (linear): Linear(in_features=1, out_features=1)
)>

Congratulation!

真正的科学家应当是个幻想家;谁不是幻想家,谁就只能把自己称为实践家。 —— 巴尔扎克
开始你的任务吧,祝你成功!

import torch.nn as nn#/********** Begin *********/# 线性回归模型
class LinearRegression(nn.Module):def __init__(self):# 调用Module的初始化super(LinearRegression, self).__init__()# 输入和输出分别为一维self.linear = nn.Linear(1, 1)# module调用forward,将按forward进行前向传播,并构建网络def forward(self, x):out = self.linear(x)return out # 实例化一个新建的模型变量model
model = LinearRegression()# 输出该模型 model 的'.parameters'属性print(model.parameters)#/********** End *********/

第3关:训练模型

本关卡将介绍如何利用之前加载的数据、定义的损失函数、优化函数,来训练模型。从而帮助同学们掌握模型的训练方法及训练结果的显示。

  • 任务描述

本关任务:本关利用上一节构造的模型进行训练,并创建类型为MSELoss的损失函数,创建类型为SGD的优化算子,补充前向计算、反馈求导、优化等语句,根据num_epochs的设定共训练60次,分10次输出一回loss的数值信息。

  • 编程要求

本关涉及的代码文件为train.py,本次编程任务是补全右侧编辑器中Begin至End中间的代码,具体要求如下:

创建损失函数MSELoss ;
创建SGD的 Optimizer,学习率为0.001;
训练模型,补充前向计算、反馈求导、优化等语句;
根据num_epochs的设定,共训练60次,分10次输出一回loss的数值信息;
具体请参见后续测试样例。

  • 测试说明

测试过程:

本关涉及的测试文件为trainTest.py,运行用户填写后的程序判断正误;
测试程序将检测两个方面:是否包含特定的代码行以及程序的输出是否正确,若两个方面均正确则输出下面的预期输出,否则报错;
请注意输出格式及规范;
注意,在声明变量时请按照提示命名,否则将会报错。
以下是测试样例:

测试输入:

预期输出:

There are 6 lines of information about loss.
Congratulation!

真正的科学家应当是个幻想家;谁不是幻想家,谁就只能把自己称为实践家。 —— 巴尔扎克
开始你的任务吧,祝你成功!


import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
from torch.autograd import Variableimport os
import sys
path = os.path.split(os.path.abspath(os.path.realpath(sys.argv[0])))[0] + os.path.sepprint(path)# 超参数
input_size = 1
output_size = 1
num_epochs = 60
learning_rate = 0.001# 数据集
x_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168],[9.779], [6.182], [7.59], [2.167], [7.042],[10.791], [5.313], [7.997], [3.1]], dtype=np.float32)y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573],[3.366], [2.596], [2.53], [1.221], [2.827],[3.465], [1.65], [2.904], [1.3]], dtype=np.float32)# 线性回归模型
class LinearRegression(nn.Module):def __init__(self, input_size, output_size):super(LinearRegression, self).__init__()self.linear = nn.Linear(input_size, output_size)def forward(self, x):out = self.linear(x)return outmodel = LinearRegression(input_size, output_size)#创建输出文件 output.txt
f = open(path + 'output.txt', 'w')
f.seek(0)
f.truncate()   #清空文件#/********** Begin *********/
# 创建损失函数MSELoss
criterion = nn.MSELoss()
# 创建SGD的Optimizer,学习率l'r为0.001
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)# 训练模型
for epoch in range(num_epochs):# 将x_train,y_train数据转换为Variable类型inputs = Variable(torch.from_numpy(x_train))targets = Variable(torch.from_numpy(y_train))# Forwardoptimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, targets)# Backwardloss.backward()#Optimizeoptimizer.step()#共训练60次,分别10次输出一回loss信息,并将输出信息存到文件中if (epoch+1) % 10 == 0:f.writelines('Epoch [%d/%d], Loss: %.4f \n'%(epoch+1, num_epochs, loss.item()))print ('Epoch [%d/%d], Loss: %.4f'%(epoch+1, num_epochs, loss.item()))
f.close()#/********** End *********/#保存模型
torch.save(model,path + 'model.pkl')

第4关:validation

本关卡将介绍如何利用之前加载的数据、定义的损失函数、优化函数,来训练模型。从而帮助同学们掌握模型的训练方法及训练结果的显示。

  • 任务描述

本关要求掌握模型测试和训练之间的转换,及如何评估一个模型的好坏。

本关任务:本关提供了数据集x_train,y_train,并加载之前所训练的模型 module,要求同学们将模型转化为测试模式,利用 model 计算预测值,并将结果可视化的显示出来。

  • 编程要求

本关涉及的代码文件为validation.py,本次编程任务是补全右侧编辑器中Begin至End中间的代码,具体要求如下:

将模型转化为测试模式;
利用 model 计算预测值;
画图;
具体请参见后续测试样例。

  • 测试说明

测试过程:

本关涉及的测试文件为validationTest.py,该程序将用户生成的图片与系统内的测评图片,利用直方图进行图片相似度的对比;
测试程序将检测两个方面:是否包含特定的代码行以及程序的输出是否正确,若两个方面均正确则输出下面的预期输出,否则报错;
请注意输出格式及规范;
注意,在声明变量时请按照提示命名,否则将会报错。
以下是测试样例:

测试输入:
预期输出:
Congratulation !

聪明的资质、内在的干劲、勤奋的工作态度和坚韧不拔的精神,这些都是科学研究成功所需要的条件。——贝弗里奇
开始你的任务吧,祝你成功!
import torch
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as pltfrom torch.autograd import Variable
import torch.nn as nnimport warnings
warnings.filterwarnings('ignore')import os,sys
path = os.path.split(os.path.abspath(os.path.realpath(sys.argv[0])))[0] + os.path.sep
path = path[:-6]
print("validation path:" ,path)# Linear Regression Model
class LinearRegression(nn.Module):def __init__(self, input_size, output_size):super(LinearRegression, self).__init__()self.linear = nn.Linear(input_size, output_size)def forward(self, x):out = self.linear(x)return outmodel = LinearRegression(1, 1)x_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168],[9.779], [6.182], [7.59], [2.167], [7.042],[10.791], [5.313], [7.997], [3.1]], dtype=np.float32)y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573],[3.366], [2.596], [2.53], [1.221], [2.827],[3.465], [1.65], [2.904], [1.3]], dtype=np.float32)#加载整个模型
model = torch.load( path + 'step3/model.pkl')#/********** Begin *********/
#将模型转化为测试模式
model.eval()
#利用 model 计算预测值,并赋值给predicted
predicted = model(Variable(torch.from_numpy(x_train))).data.numpy()print(predicted)
#画图
plt.plot(x_train, y_train, 'ro', label='Original data')
plt.plot(x_train, predicted, label='Fitted line')
plt.legend()
plt.savefig(path + "step4/outputimages/mylossTest.png")#/********** End *********/ 

相关文章:

  • python打卡训练营打卡记录day40
  • 电网即插即用介绍
  • mysql数据库基础命令总结常用10个
  • 2025年全国青少年信息素养大赛 scratch图形化编程挑战赛 小高组初赛 内部模拟试卷解析
  • 【技术支持】安卓11开机启动设置
  • 深入了解MCP基础与架构
  • 从图像处理到深度学习:直播美颜SDK的人脸美型算法详解
  • 用于工业设备的高精度仪表放大器“NL9620”开始上市~日本首家!高EMC性能的仪表放大器
  • 贪心算法实战3
  • torch.zeros()用法简介
  • DAY 40 训练和测试的规范写法
  • EMQX社区版5.8.5集群搭建踩坑记
  • 30V/150A MOSFET 150N03在无人机驱动动力系统中的性能边界与热设计挑战
  • 【JavaWeb】Maven、Servlet、cookie/session
  • 人工智能在智能金融中的创新应用与未来趋势
  • c++ 模板
  • 如何使用Python从MySQL数据库导出表结构到Word文档
  • OleDbParameter.Value 与 DataTable.Rows.Item.Value 的性能对比
  • Vue中 toRaw 和 markRaw 的使用
  • Java面试:企业协同SaaS中的技术挑战与解决方案
  • 网站怎样才有流量/网上营销怎么做
  • 成都网站建设设计/百度移动开放平台
  • 卫生局网站建设实施方案/东莞seo技术培训
  • ecs搭建wordpress/做网络优化的公司排名
  • 网站数据库文件名/东莞做网页建站公司
  • 做特价的网站/免费seo视频教程