位置: IT常识 - 正文

PyTorch 之 强大的 hub 模块和搭建神经网络进行气温预测(pytorch with no grad)

编辑:rootadmin
PyTorch 之 强大的 hub 模块和搭建神经网络进行气温预测 文章目录一、强大的 hub 模块1. hub 模块的使用2. hub 模块的代码演示二、搭建神经网络进行气温预测1. 数据信息处理2. 数据图画绘制3. 构建网络模型4. 更简单的构建网络模型

推荐整理分享PyTorch 之 强大的 hub 模块和搭建神经网络进行气温预测(pytorch with no grad),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:pytorch topk,pytorch wide and deep,pytorch recipes - a problem-solution approach,pytorch topk,pytorch wide and deep,pytorch recipes - a problem-solution approach,pytorch.,python强大之处,内容如对您有帮助,希望把文章链接给更多的朋友!

本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052

一、强大的 hub 模块hub 模块是调用别人训练好的网络架构以及训练好的权重参数,使得自己的一行代码就可以解决问题,方便大家进行调用。hub 模块的 GITHUB 地址是 https://github.com/pytorch/hub。hub 模块的模型 网址是 https://pytorch.org/hub/research-models。1. hub 模块的使用首先,我们进入网址。会出现如下的界面(这其中就是别人训练好的模型,我们通过一行代码就可以实现调用)。PyTorch 之 强大的 hub 模块和搭建神经网络进行气温预测(pytorch with no grad)

然后,我们随便点开一个模型,会出现如下界面。

其中,第一个按钮是对应的 GITHUB 代码,第二个是使用谷歌配置好的实验环境,第三个进行模型演示。2. hub 模块的代码演示首先,我们进行基本的导入。import torchmodel = torch.hub.load('pytorch/vision:v0.4.2', 'deeplabv3_resnet101', pretrained=True)model.eval()我们可以使用 hub.list() 查看对应 pytorch 版本的模型信息。torch.hub.list('pytorch/vision:v0.4.2')#Using cache found in C:\Users\Administrator/.cache\torch\hub\pytorch_vision_v0.4.2#['alexnet',# 'deeplabv3_resnet101',# 'densenet121',# 'densenet161',# 'densenet169',# 'densenet201',# 'fcn_resnet101',# 'googlenet',# 'inception_v3',# 'mobilenet_v2',# 'resnet101',# 'resnet152',# 'resnet18',# 'resnet34',# 'resnet50',# 'resnext101_32x8d',# 'resnext50_32x4d',# 'shufflenet_v2_x0_5',# 'shufflenet_v2_x1_0',# 'squeezenet1_0',# 'squeezenet1_1',# 'vgg11',# 'vgg11_bn',# 'vgg13',# 'vgg13_bn',# 'vgg16',# 'vgg16_bn',# 'vgg19',# 'vgg19_bn',# 'wide_resnet101_2',# 'wide_resnet50_2']我们可以从 pytorch 的网站上下载一个实例。# Download an example image from the pytorch websiteimport urlliburl, filename = ("https://github.com/pytorch/hub/raw/master/dog.jpg", "dog.jpg")try: urllib.URLopener().retrieve(url, filename)except: urllib.request.urlretrieve(url, filename)我们执行样本,这里需要注意的是 torchvision。# sample execution (requires torchvision)from PIL import Imagefrom torchvision import transformsinput_image = Image.open(filename)preprocess = transforms.Compose([ transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),])​input_tensor = preprocess(input_image)input_batch = input_tensor.unsqueeze(0) # create a mini-batch as expected by the model​我们需要将输入和模型移动到GPU以获得速度(如果可用)。# move the input and model to GPU for speed if availableif torch.cuda.is_available(): input_batch = input_batch.to('cuda') model.to('cuda')​with torch.no_grad(): output = model(input_batch)['out'][0]output_predictions = output.argmax(0)我们可以创建一个调色板,为每个类选择一种颜色。# create a color pallette, selecting a color for each classpalette = torch.tensor([2 ** 25 - 1, 2 ** 15 - 1, 2 ** 21 - 1])colors = torch.as_tensor([i for i in range(21)])[:, None] * palettecolors = (colors % 255).numpy().astype("uint8")我们可以使用 hub 模块中的模型绘制每种颜色 21 个类别的语义分割预测。​# plot the semantic segmentation predictions of 21 classes in each colorr = Image.fromarray(output_predictions.byte().cpu().numpy()).resize(input_image.size)r.putpalette(colors)​import matplotlib.pyplot as pltplt.imshow(r)plt.show()

二、搭建神经网络进行气温预测1. 数据信息处理在最开始,我们需要导入必备的库。import numpy as npimport pandas as pd import matplotlib.pyplot as pltimport torchimport torch.optim as optimimport warningswarnings.filterwarnings("ignore")%matplotlib inline我们需要观察一下自己的数据都有哪些信息,在此之前,我们需要进行数据的读入,并打印数据的前五行进行观察。features = pd.read_csv('temps.csv')features.head()#yearmonthdayweektemp_2temp_1averageactualfriend#0201611Fri454545.64529#1201612Sat444545.74461#2201613Sun454445.84156#3201614Mon444145.94053#4201615Tues414046.04441在我们的数据表中,包含如下数据信息:(1) year 表示年数时间信息。(2) month 表示月数时间信息。(3) day 表示天数时间信息。(4) week 表示周数时间信息。(5) temp_2 表示前天的最高温度值。(6) temp_1 表示昨天的最高温度值。(7) average 表示在历史中,每年这一天的平均最高温度值。(8) actual 表示这就是我们的标签值了,当天的真实最高温度。(9) friend 表示这一列可能是凑热闹的,你的朋友猜测的可能值,咱们不管它就好了。在获悉每一个数据的信息之后,我们需要知道一共有多少个数据。print('数据维度:', features.shape)#数据维度: (348, 9)(348, 9) 表示一共有 348 天,每一天有 9 个数据特征。对于这么多的数据,直接进行行和列的操作可能会不太容易,因此,我们可以导入时间数据模块,将其转换为标准的时间信息。# 处理时间数据import datetime​# 分别得到年,月,日years = features['year']months = features['month']days = features['day']​# datetime格式dates = [str(int(year)) + '-' + str(int(month)) + '-' + str(int(day)) for year, month, day in zip(years, months, days)]dates = [datetime.datetime.strptime(date, '%Y-%m-%d') for date in dates]我们可以读取新列 dates 中的部分数据。dates[:5]#[datetime.datetime(2016, 1, 1, 0, 0),# datetime.datetime(2016, 1, 2, 0, 0),# datetime.datetime(2016, 1, 3, 0, 0),# datetime.datetime(2016, 1, 4, 0, 0),# datetime.datetime(2016, 1, 5, 0, 0)]2. 数据图画绘制在基本数据处理完成后,我们就开始图画的绘制,在最开始,需要指定为默认的风格。plt.style.use('fivethirtyeight')设置布局信息。# 设置布局fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, figsize = (10,10))fig.autofmt_xdate(rotation = 45)设置标签值信息。#标签值ax1.plot(dates, features['actual'])ax1.set_xlabel(''); ax1.set_ylabel('Temperature'); ax1.set_title('Max Temp')绘制昨天也就是 temp_1 的数据图画。​# 昨天ax2.plot(dates, features['temp_1'])ax2.set_xlabel(''); ax2.set_ylabel('Temperature'); ax2.set_title('Previous Max Temp')绘制前天也就是 temp_2 的数据图画。​# 前天ax3.plot(dates, features['temp_2'])ax3.set_xlabel('Date'); ax3.set_ylabel('Temperature'); ax3.set_title('Two Days Prior Max Temp')绘制朋友也就是 friend 的数据图画。# 我的逗逼朋友ax4.plot(dates, features['friend'])ax4.set_xlabel('Date'); ax4.set_ylabel('Temperature'); ax4.set_title('Friend Estimate')在上述信息设置完成后,开始图画的绘制。plt.tight_layout(pad=2)

对原始数据中的信息进行编码,这里主要是指周数信息。# 独热编码features = pd.get_dummies(features)features.head(5)#yearmonthdaytemp_2temp_1averageactualfriendweek_Friweek_Monweek_Satweek_Sunweek_Thursweek_Tuesweek_Wed#0201611454545.645291000000#1201612444545.744610010000#2201613454445.841560001000#3201614444145.940530100000#4201615414046.044410000010在周数信息编码完成后,我们将准确值进行标签操作,在特征数据中去掉标签数据,并将此时数据特征中的标签信息保存一下,并将其转换成合适的格式。# 标签labels = np.array(features['actual'])​# 在特征中去掉标签features= features.drop('actual', axis = 1)​# 名字单独保存一下,以备后患feature_list = list(features.columns)​# 转换成合适的格式features = np.array(features)我们可以查看此时特征数据的具体数量。features.shape#(348, 14)(348, 14) 表示我们的特征数据当中一共有 348 个,每一个有 14 个特征。我们可以查看第一个的具体数据。from sklearn import preprocessinginput_features = preprocessing.StandardScaler().fit_transform(features)input_features[0]#array([ 0. , -1.5678393 , -1.65682171, -1.48452388, -1.49443549,# -1.3470703 , -1.98891668, 2.44131112, -0.40482045, -0.40961596,# -0.40482045, -0.40482045, -0.41913682, -0.40482045])3. 构建网络模型x = torch.tensor(input_features, dtype = float)​y = torch.tensor(labels, dtype = float)​# 权重参数初始化weights = torch.randn((14, 128), dtype = float, requires_grad = True) biases = torch.randn(128, dtype = float, requires_grad = True) weights2 = torch.randn((128, 1), dtype = float, requires_grad = True) biases2 = torch.randn(1, dtype = float, requires_grad = True) ​learning_rate = 0.001 losses = []​for i in range(1000): # 计算隐层 hidden = x.mm(weights) + biases # 加入激活函数 hidden = torch.relu(hidden) # 预测结果 predictions = hidden.mm(weights2) + biases2 # 通计算损失 loss = torch.mean((predictions - y) ** 2) losses.append(loss.data.numpy()) # 打印损失值 if i % 100 == 0: print('loss:', loss) #返向传播计算 loss.backward() #更新参数 weights.data.add_(- learning_rate * weights.grad.data) biases.data.add_(- learning_rate * biases.grad.data) weights2.data.add_(- learning_rate * weights2.grad.data) biases2.data.add_(- learning_rate * biases2.grad.data) # 每次迭代都得记得清空 weights.grad.data.zero_() biases.grad.data.zero_() weights2.grad.data.zero_() biases2.grad.data.zero_()​#loss: tensor(8347.9924, dtype=torch.float64, grad_fn=<MeanBackward0>)#loss: tensor(152.3170, dtype=torch.float64, grad_fn=<MeanBackward0>)#loss: tensor(145.9625, dtype=torch.float64, grad_fn=<MeanBackward0>)#loss: tensor(143.9453, dtype=torch.float64, grad_fn=<MeanBackward0>)#loss: tensor(142.8161, dtype=torch.float64, grad_fn=<MeanBackward0>)#loss: tensor(142.0664, dtype=torch.float64, grad_fn=<MeanBackward0>)#loss: tensor(141.5386, dtype=torch.float64, grad_fn=<MeanBackward0>)#loss: tensor(141.1528, dtype=torch.float64, grad_fn=<MeanBackward0>)#loss: tensor(140.8618, dtype=torch.float64, grad_fn=<MeanBackward0>)#loss: tensor(140.6318, dtype=torch.float64, grad_fn=<MeanBackward0>)我们查看预测数据的具体数量,应该是一共有 348 个,每个只有一个值,也就是 (348,1)。predictions.shape#torch.Size([348, 1])4. 更简单的构建网络模型input_size = input_features.shape[1]hidden_size = 128output_size = 1batch_size = 16my_nn = torch.nn.Sequential( torch.nn.Linear(input_size, hidden_size), torch.nn.Sigmoid(), torch.nn.Linear(hidden_size, output_size),)cost = torch.nn.MSELoss(reduction='mean')optimizer = torch.optim.Adam(my_nn.parameters(), lr = 0.001)# 训练网络losses = []for i in range(1000): batch_loss = [] # MINI-Batch方法来进行训练 for start in range(0, len(input_features), batch_size): end = start + batch_size if start + batch_size < len(input_features) else len(input_features) xx = torch.tensor(input_features[start:end], dtype = torch.float, requires_grad = True) yy = torch.tensor(labels[start:end], dtype = torch.float, requires_grad = True) prediction = my_nn(xx) loss = cost(prediction, yy) optimizer.zero_grad() loss.backward(retain_graph=True) optimizer.step() batch_loss.append(loss.data.numpy()) # 打印损失 if i % 100==0: losses.append(np.mean(batch_loss)) print(i, np.mean(batch_loss))#0 3950.7627#100 37.9201#200 35.654438#300 35.278366#400 35.116814#500 34.986076#600 34.868954#700 34.75414#800 34.637356#900 34.516705我们可以得到如下的预测训练结果,将其用图画的形式展现出来。x = torch.tensor(input_features, dtype = torch.float)predict = my_nn(x).data.numpy()# 转换日期格式dates = [str(int(year)) + '-' + str(int(month)) + '-' + str(int(day)) for year, month, day in zip(years, months, days)]dates = [datetime.datetime.strptime(date, '%Y-%m-%d') for date in dates]​# 创建一个表格来存日期和其对应的标签数值true_data = pd.DataFrame(data = {'date': dates, 'actual': labels})​# 同理,再创建一个来存日期和其对应的模型预测值months = features[:, feature_list.index('month')]days = features[:, feature_list.index('day')]years = features[:, feature_list.index('year')]​test_dates = [str(int(year)) + '-' + str(int(month)) + '-' + str(int(day)) for year, month, day in zip(years, months, days)]​test_dates = [datetime.datetime.strptime(date, '%Y-%m-%d') for date in test_dates]​predictions_data = pd.DataFrame(data = {'date': test_dates, 'prediction': predict.reshape(-1)}) # 真实值plt.plot(true_data['date'], true_data['actual'], 'b-', label = 'actual')​# 预测值plt.plot(predictions_data['date'], predictions_data['prediction'], 'ro', label = 'prediction')plt.xticks(rotation = '60'); plt.legend()​# 图名plt.xlabel('Date'); plt.ylabel('Maximum Temperature (F)'); plt.title('Actual and Predicted Values');

本文链接地址:https://www.jiuchutong.com/zhishi/298354.html 转载请保留说明!

上一篇:服务器部署Python3.7和Virtualenvwrapper虚拟环境(服务器部署环境)

下一篇:Vue的事件处理,点击事件(vue中事件)

  • 创业品牌,定位理论还“有用”吗?(创业品牌,定位是什么)

    创业品牌,定位理论还“有用”吗?(创业品牌,定位是什么)

  • airpodspro换了一只怎么配对(换了airpods pro要重置吗)

    airpodspro换了一只怎么配对(换了airpods pro要重置吗)

  • win10如何用cmd命令清理电脑垃圾(win10如何cmd命令)

    win10如何用cmd命令清理电脑垃圾(win10如何cmd命令)

  • 海康资源不足解决办法(海康nvr显示资源不足)

    海康资源不足解决办法(海康nvr显示资源不足)

  • 快手怎么转发别人的作品(快手怎么转发别人视频变成自己原创)

    快手怎么转发别人的作品(快手怎么转发别人视频变成自己原创)

  • 电话手表可以视频聊天吗(电话手表可以视频但不能接打电话怎么办)

    电话手表可以视频聊天吗(电话手表可以视频但不能接打电话怎么办)

  • qq号长时间不登录会被注销吗(qq号长时间不登陆会被注销吗)

    qq号长时间不登录会被注销吗(qq号长时间不登陆会被注销吗)

  • 路由器闪蓝光怎么回事(路由器闪蓝光怎么解决)

    路由器闪蓝光怎么回事(路由器闪蓝光怎么解决)

  • 苹果id可以同时登录两台手机吗(苹果id可以一起用吗)

    苹果id可以同时登录两台手机吗(苹果id可以一起用吗)

  • 美国第一台计算机诞生于什么时候(美国第一台计算机缩写)

    美国第一台计算机诞生于什么时候(美国第一台计算机缩写)

  • am4主板支持哪些cpu(am4主板型号的区别排名)

    am4主板支持哪些cpu(am4主板型号的区别排名)

  • 小米9pro没有耳机孔怎么办(小米9没有耳机)

    小米9pro没有耳机孔怎么办(小米9没有耳机)

  • 苹果7plus有红外线吗(苹果7plus有红外线功能吗)

    苹果7plus有红外线吗(苹果7plus有红外线功能吗)

  • 笔记本14和15.6寸区别(笔记本14寸跟15.6寸对比)

    笔记本14和15.6寸区别(笔记本14寸跟15.6寸对比)

  • iphone扩音器进水怎么清理(苹果扩音进水)

    iphone扩音器进水怎么清理(苹果扩音进水)

  • 手机怎样连接复印机(手机怎么联接复印机)

    手机怎样连接复印机(手机怎么联接复印机)

  • 手机通话被限制是怎么回事(手机通话被限制服务宽带会停吗?)

    手机通话被限制是怎么回事(手机通话被限制服务宽带会停吗?)

  • iPhone11pro怎么查看去过的地方(iphone11pro怎么查生产日期)

    iPhone11pro怎么查看去过的地方(iphone11pro怎么查生产日期)

  • 小天才电话手表怎么删除联系人(小天才电话手表app下载安装)

    小天才电话手表怎么删除联系人(小天才电话手表app下载安装)

  • systemclean是什么(system(clear))

    systemclean是什么(system(clear))

  • 删除退群后消息还在吗(删除退出群聊后消息会消失吗)

    删除退群后消息还在吗(删除退出群聊后消息会消失吗)

  • 计算机off键是什么键(计算机上off键的功能是什么)

    计算机off键是什么键(计算机上off键的功能是什么)

  • 抖音多少赞可以发长视频(抖音多少赞可以带货)

    抖音多少赞可以发长视频(抖音多少赞可以带货)

  • 怎么开启支付宝刷脸支付(怎么开启支付宝余额支付功能)

    怎么开启支付宝刷脸支付(怎么开启支付宝余额支付功能)

  • 序号怎么拉下来12345(计算机序号怎么拉下来)

    序号怎么拉下来12345(计算机序号怎么拉下来)

  • 6+128和8+128有什么区别(6+128 和8+128)

    6+128和8+128有什么区别(6+128 和8+128)

  • 坚果手机如何快速换机(坚果手机一键锁屏怎么设置)

    坚果手机如何快速换机(坚果手机一键锁屏怎么设置)

  • 医药行业发票税率
  • 购买金税盘维护费会计分录
  • 金税四期对纳税的影响
  • 长期待摊费用的账务处理
  • 会展服务费怎么开票
  • 核定征收季度核定销售额
  • 附加税退税申请书怎么写
  • 应付职工薪酬包括哪些内容
  • 售后回购融资租赁合同
  • 集团财务公司可以放款给外部单位吗
  • 贸易类公司所得税核定征收税率是多少?
  • 大病医疗保险为什么贵
  • 工程公司安装中央空调能按混合销售计算增值税么?
  • 纳税人状态怎么填写
  • 预缴税款的附加税可以抵扣吗
  • 航天信息300元是什么费用
  • 税收征收管理法
  • 企业所得税申报表在哪里打印
  • 生产性生物资产包括哪些
  • 设备升级改造如何开发票
  • 银行承兑贴现到哪里去了
  • 不得抵扣进项税额是交税还是不交
  • 用友t3怎样查询报表
  • 收到借出款利息会计分录
  • 平时发票未上传怎么回事
  • 企业所得税会计准则
  • mch是什么文件
  • 年度一次性计税
  • vue click触发两次
  • php通用分页类
  • 银行存款日记账对方科目写什么
  • phpjson
  • easyui分页
  • opencv拼接图片
  • 印花税应计入什么
  • 建筑行业预交增值税税率是多少
  • 研发入库的产品销售出库怎样做账
  • 入库税款异常怎么处理
  • 简易注销公示后怎么操作
  • js let与var区别
  • 贸易净利润
  • 房产税和城镇土地使用税需要计提吗
  • 企业出租的存货包括
  • 债务豁免会计核算
  • 结转本月应交增值税
  • 资本公积是什么意思,举个例子呗
  • 质量赔偿金
  • 私车公用产生的费用算不算在公务用车运行维护费中
  • 实收资本需要明细科目吗
  • 进销存怎么看
  • 结转完工入库产品成本的会计分录
  • 需要分摊的费用怎么做账
  • 小规模纳税人不超过10万免增值税
  • 市场营销策划开票品目
  • 小规模现金流量表年报不填可以吗
  • 体检费可以开个人吗?
  • Mysql5.7.11在windows10上的安装与配置(解压版)
  • mysql 5.7.32
  • windows8.1大小
  • win8什么时候停止更新
  • freebsd11.3安装教程
  • freebsd使用手册
  • app隐藏库
  • ubuntu15.04安装教程
  • win8.1如何关闭windows defender
  • QuiteRSS: Linux桌面的RSS阅读器 你值得拥有
  • win8怎么设置桌面
  • linux实用技巧
  • 给div设置滚动条
  • javascript 引入
  • jquery实战
  • jquery实现(textarea)placeholder自动换行
  • 浏览器css3兼容
  • PHP+jquery+ajax实现分页
  • ubuntu on android
  • three.js入门教程(合集)
  • js类的实现
  • jquery鼠标点击
  • 国家税务总局惠州仲恺高新技术产业开发区税务局
  • 土地的几种类型
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设