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

深度学习之pytorch第一课

学习使用pytorch,然后进行简单的线性模型的训练与保存
学习代码如下:

import numpy as np
import torch
import torch.nn as nn
x_value = [i for i in range(11)]
x_train = np.array(x_value,dtype=np.float32)
print(x_train.shape)
x_train = x_train.reshape(-1,1)  # 将数据转换成矩阵
print(x_train.shape)
y_value = [2*i+1 for i in x_value]
y_train = np.array(y_value,dtype=np.float32)
print(y_train.shape)
y_train = y_train.reshape(-1,1) # 将数据转换成矩阵
print(y_train.shape)class LinearRegressionModel(nn.Module):  # 我们只需要在此类中写道我们用到了哪些层def __init__(self,input_dim,output_dim):super(LinearRegressionModel, self).__init__()self.linear = nn.Linear(input_dim, output_dim) # 输入输出的维度 这是我们要更改的内容def forward(self, x): # 在深度学习中走的层out = self.linear(x) #这是我们要改的内容return out
input_dim = 1
output_dim = 1
model = LinearRegressionModel(input_dim,output_dim)
print(model)
# 指定好参数以及算是函数
epochs = 1000 # 一共执行了1000次
learning_rate = 0.01  # 学习率是0.01
optimizer = torch.optim.SGD(model.parameters(),lr=learning_rate)  # 指定相应的优化器,优化的是模型计算的参数
criterion = nn.MSELoss()  # 损失函数# 下面是训练模型
for epoch in range(epochs):epoch += 1# 注意训练模型要转换成tensor形式inputs = torch.from_numpy(x_train)labels = torch.from_numpy(y_train)# 梯度每次迭代用完都要进行清零,不然就会累加optimizer.zero_grad()# 前向传播outputs = model(inputs)# 计算损失loss = criterion(outputs,labels)#反向传播loss.backward()# 更新权重参数optimizer.step()if epoch % 50 == 0:print('epoch{}, loss{}'.format(epoch, loss.item()))# 测试模型预测结果
predicted = model(torch.from_numpy(x_train).requires_grad_()).data.numpy()
print(predicted)# 模型的保存与读取
torch.save(model.state_dict(),'model.pkl')# 将模型的参数保存在model.pkl里面,以字典的形式进行保存
a = model.load_state_dict(torch.load('model.pkl'))# 读取model.pkl的参数
print(a)

这是用cpu跑的,但是一般都是使用gpu跑的
只需要将数据和模型传入cuda内行了
改版
需要写入
device = torch.device(“cuda:0"if torch.cuda.is_available() else"cpu”)
model.to(device)

import numpy as np
import torch
import torch.nn as nn
x_value = [i for i in range(11)]
x_train = np.array(x_value,dtype=np.float32)
print(x_train.shape)
x_train = x_train.reshape(-1,1)  # 将数据转换成矩阵
print(x_train.shape)
y_value = [2*i+1 for i in x_value]
y_train = np.array(y_value,dtype=np.float32)
print(y_train.shape)
y_train = y_train.reshape(-1,1) # 将数据转换成矩阵
print(y_train.shape)
device = torch.device("cuda:0" if torch.cuda.is_available() else"cpu")class LinearRegressionModel(nn.Module):  # 我们只需要在此类中写道我们用到了哪些层def __init__(self,input_dim,output_dim):super(LinearRegressionModel, self).__init__()self.linear = nn.Linear(input_dim, output_dim) # 输入输出的维度 这是我们要更改的内容def forward(self, x): # 在深度学习中走的层out = self.linear(x) #这是我们要改的内容return out
input_dim = 1
output_dim = 1
model = LinearRegressionModel(input_dim,output_dim)# 将模型放入cuda内进行训练
model.to(device)
print(model)
# 指定好参数以及算是函数
epochs = 1000 # 一共执行了1000次
learning_rate = 0.01  # 学习率是0.01
optimizer = torch.optim.SGD(model.parameters(),lr=learning_rate)  # 指定相应的优化器,优化的是模型计算的参数
criterion = nn.MSELoss()  # 损失函数# 下面是训练模型
for epoch in range(epochs):epoch += 1# 注意训练模型要转换成tensor形式# 将数据放入cuda内inputs = torch.from_numpy(x_train).to(device)labels = torch.from_numpy(y_train).to(device)# 梯度每次迭代用完都要进行清零,不然就会累加optimizer.zero_grad()# 前向传播outputs = model(inputs)# 计算损失loss = criterion(outputs,labels)#反向传播loss.backward()# 更新权重参数optimizer.step()if epoch % 50 == 0:print('epoch{}, loss{}'.format(epoch, loss.item()))
http://www.lryc.cn/news/230677.html

相关文章:

  • 企业传统纸质设备维修方式的痛点以及解决方案
  • vue2 - SuperMap3D实现自定义标记点位和自定义弹窗功能
  • vue中通过.style.animationDuration属性,根据数据长度动态设定元素的纵向滚动时长的demo
  • (五)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • 深度学习之基于Pytorch框架的MNIST手写数字识别
  • zabbix的服务器端 server端安装部署
  • css3 初步了解
  • 【实战经验】MT4外汇交易指南:新手如何制定交易计划?
  • Pikachu漏洞练习平台之CSRF(跨站请求伪造)
  • Python 如何实现 Strategy 策略设计模式?什么是 Strategy 策略设计模式?
  • hadoop 大数据集群环境配置 配置hadoop配置文件 hadoop(七)
  • 解决 requests 库中 Post 请求路由无法正常工作的问题
  • Jenkins入门——安装docker版的Jenkins 配置mvn,jdk等 使用案例初步 遇到的问题及解决
  • 一文搞定以太网PHY、MAC及其通信接口
  • 【JavaEE】Servlet API 详解(HttpServletResponse类方法演示、实现自动刷新、实现自动重定向)
  • QML19、QML 和 C++ 之间的数据类型转换
  • 力扣学习笔记——128.最长连续序列
  • 【git】远程远程仓库命令操作详解
  • 算法:穷举,暴搜,深搜,回溯,剪枝
  • 蓝桥杯 选择排序
  • 20. 深度学习 - 多层神经网络
  • 短剧小程序:让故事更贴近生活
  • 前端下载文件重命名
  • 【23真题】厉害,这套竟有150分满分!
  • 44. Adb调试QT开发的Android程序实用小技巧汇总
  • nacos集群配置(超完整)
  • 无线WiFi安全渗透与攻防(三) 无线信号探测(目前仅kismet)
  • Flutter的Widget, Element, RenderObject的关系
  • 测试员练就什么本领可以让自己狂揽10个offer
  • vue中实现图片懒加载的几种方法