《PyTorch深度学习实践》课上代码笔记 一

自学笔记

课程老师:刘二大人 河北工业大学教师 https://liuii.github.io
课程来源:https://www.bilibili.com/video/BV1Y7411d7Ys

一、Gradient Descent梯度下降(无反馈)

#梯度下降的线性拟合过程,梯度使用的是平均梯度
#导入数据
x_data = [1,2,3]
y_data = [2,4,6]

#初始化w的值
w = 1

#正向传递函数
def forward(x):
	return x*w

#计算损失函数
def cost(xs,ys):
	cost = 0
	for x,y in zip(xs,ys):
		y_pred = forward(x)
		cost += (y_pred - y)**2
	return cost/len(xs)

#计算梯度
def gradient(xs,ys):
	grad = 0
	for x,y in zip(xs,ys):
		grad = 2*x*(x*w - y)
	return grad/len(xs)

#训练
#确定训练次数
for epoch in range(100):
	#计算损失
	cost_val = cost(x_data,y_data)
	#计算梯度
	grad_val = gradient(x_data,y_data)
	#更新参数w
	w -= 0.01*grad_val
	#输出每次的结果
	print("循环次数:"+str(epoch)+"+++++   w的值:"+str(w))

#输出训练结果
print("pred:w=",w,forward(w))

二、Stochastic Gradient Descent随机梯度下降(无反馈)

#随机梯度下降SGD
#导入数据
x_data = [1.0,2.0,3.0]
y_data = [2.0,4.0,6.0]
#确定初始值
w = 1

#正向传递函数
def forward(x):
	return x*w

#计算损失
def loss(x,y):
	y_pred = forward(x)
	return (y_pred - y)**2

#计算梯度
def gradient(x,y):
	return 2*x*(x*w - y)

#训练
#确定训练次数
for epoch in range(100):
	#导入数据
	for x,y in zip(x_data,y_data):
		#计算梯度
		grad_val = gradient(x,y)
		#更新参数,每一个x,y即计算一次梯度,更新一次w参数值,并非使用平均梯度
		w -= 0.01*grad_val
		print("循环次数:"+str(epoch)+"+++++   w的值:"+str(w))
		#损失计算
		l = loss(x,y)

#结果输出
print("pred:w=",w,forward(w),l)

三、使用pytorch(有反馈)

#使用torch完成随机梯度下降
#导入torch包
import torch
#导入数据
x_data = [1.0,2.0,3.0]
y_data = [2.0,4.0,6.0]
#初始化参数,使用Tensor(torch中的张量)
w = torch.Tensor([1.0])
#设置w的需要求导属性
w.requires_grad = True

#正向传递函数
def forward(x):
	return w*x

#定义损失函数
def loss(x,y):
	y_pred = forward(x)
	return (y - y_pred)**2

#训练
#确定训练次数
for epoch in range(100):
	for x,y in zip(x_data,y_data):
		l = loss(x,y)
		l.backward()
		w.data -= 0.01*w.grad.data
		w.grad.data.zero_()
	print("progress:",epoch,l.item())

print("predict (after training)", 4, forward(4).item())

四、线性回归,使用torch.nn类

#使用torch的线性模型训练模型
#导入包
import torch
#创建Tensor数据
x_data = torch.Tensor([[1.0],[2.0],[3.0]])
y_data = torch.Tensor([[2.0],[4.0],[6.0]])

#编写自己的类,继承自torch.nn.Module
class LinearModel(torch.nn.Module):
	#初始化
	def __init__(self):
		#继承父类的属性
		super(LinearModel,self).__init__()
		#创建自己的线性模型参数
		self.linear = torch.nn.Linear(1,1)
	#正向传播函数
	def forward(self,x):
		y_pred = self.linear(x)
		return y_pred

#实例化
model = LinearModel()
#计算损失,同样继承自torch.nn
criterion = torch.nn.MSELoss(size_average=Flase)
#使用的优化方法
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)

#训练
#确定训练次数
for epoch in range(1000):
	#预测
	y_pred = model(x_data)
	#损失计算
	loss = criterion(y_pred,y_data)

	#梯度归零,每次优化时,都要手动将梯度归零
	optimizer.zero_grad()
	#损失的反馈传播
	loss.backward()
	#更新参数
	optimizer.step()

#输出
print('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())

#测试
x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print(y_test.data)
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
程介绍】      Pytorch项目实战 垃圾分类程从实战的角度出发,基于真实数据集与实际业务需求,结合当下最新话题-垃圾分类问题为实际业务出发点,介绍最前沿的深度学习解决方案。    从0到1讲解如何场景业务分析、进行数据处理,模型训练与调优,最后进行测试与结果展示分析。全程实战操作,以最接地气的方式详解每一步流程与解决方案。    程结合当下深度学习热门领域,尤其是基于facebook 开源分类神器ResNext101网络架构,对网络架构进行调整,以计算机视觉为核心讲解各大网络的应用于实战方法,适合快速入门与进阶提升。【程要求】 (1)开发环境:python版本:Python3.7+; torch版本:1.2.0+; torchvision版本:0.4.0+ (2)开发工具:Pycharm;(3)学员基础:需要一定的Python基础,及深度学习基础;(4)学员收货:掌握最新科技图像分类关键技术;(5)学员资料:内含完整程序源码和数据集;(6)程亮点:专题技术,完整案例,全程实战操作,徒手撸代码程特色】 阵容强大讲师一直从事与一线项目开发,高级算法专家,一直从事于图像、NLP、个性化推荐系统热门技术领域。仅跟前沿基于当前热门讨论话题:垃圾分类,程采用学术届和工业届最新前沿技术知识要点。实战为先根据实际深度学习工业场景-垃圾分类,从产品需求、产品设计和方案设计、产品技术功能实现、模型上线部署。精心设计工业实战项目保障效果项目实战方向包含了学术届和工业届最前沿技术要点项目包装简历优化程内垃圾分类图像实战项目完成后可以直接优化到简历中【程思维导图】 【程实战案例】

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值