当前位置: 首页 > 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()))

相关文章:

  • 烟草5G智慧工厂数字孪生可视化平台,赋能烟草工业数字化智慧转型
  • 30基于Feign远程调用
  • golang工程组件——redigo使用(redis协议,基本命令,管道,事务,发布订阅,stream)
  • Spring-AOP不生效之内部方法调用
  • 【Android】画面卡顿优化列表流畅度一
  • uboot - 驱动开发 - dw watchdog
  • 无梯度强化学习:使用遗传算法进化代理
  • 【服务配置文件详解】补充rsyslog服务的配置文件翻译解读
  • 【hcie-cloud】【5】华为云Stack规划设计之华为云Stack标准化配置、缩略语【下】
  • 前端Vue 结合xlxs库实现解析excel文件,并动态组装表头!
  • CMakeFiles文件夹有什么用
  • Xmake v2.8.5 发布,支持链接排序和单元测试
  • 5G毫米波通信中的关键技术
  • 3D物理模拟和视觉特效软件SideFX Houdini mac中文介绍
  • 什么是记忆能力与泛化能力
  • 77. Combinations
  • Docker入门(二) - Dockerfile
  • Less 日常用法
  • PHP CLI应用的调试原理
  • Rancher-k8s加速安装文档
  • vuex 学习笔记 01
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 实战|智能家居行业移动应用性能分析
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 延迟脚本的方式
  • 自动记录MySQL慢查询快照脚本
  • 你对linux中grep命令知道多少?
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ​configparser --- 配置文件解析器​
  • #android不同版本废弃api,新api。
  • #QT(TCP网络编程-服务端)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (HAL库版)freeRTOS移植STMF103
  • (Java数据结构)ArrayList
  • (Matlab)使用竞争神经网络实现数据聚类
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (接口自动化)Python3操作MySQL数据库
  • (学习日记)2024.01.19
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET导入Excel数据
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .NET中GET与SET的用法
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /etc/shadow字段详解
  • @Autowired标签与 @Resource标签 的区别
  • [ Algorithm ] N次方算法 N Square 动态规划解决