pytorch回归模型_pytorch回归预测_Andy_shenzl的博客-程序员宅基地

技术标签: 深度学习  

数据简介

数据是常见的气温预测数据
先导入数据

features = pd.read_csv('temps.csv')
features.head()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q7qmViGm-1592901532871)(evernotecid://DD492144-9AFF-43C1-9BC0-5A625709FC62/appyinxiangcom/28357599/ENResource/p90)]

  • year,moth,day,week分别表示的具体的时间
  • temp_2:前天的最高温度值
  • temp_1:昨天的最高温度值
  • average:在历史中,每年这一天的平均最高温度值
  • actual:这就是我们的标签值了,当天的真实最高温度
  • friend:这一列可能是凑热闹的,你的朋友猜测的可能值,咱们不管它就好了

我们需要把时间数据先进性简单的处理

# 处理时间数据
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[: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)]

对星期进行独热编码

# 独热编码
features = pd.get_dummies(features)
features.head(5)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IVHzT1lq-1592901532875)(evernotecid://DD492144-9AFF-43C1-9BC0-5A625709FC62/appyinxiangcom/28357599/ENResource/p91)]

构建预测数据集,并标准化

# 标签
labels = np.array(features['actual'])

# 在特征中去掉标签
features= features.drop('actual', axis = 1)

# 名字单独保存一下,以备后患
feature_list = list(features.columns)

# 转换成合适的格式
features = np.array(features)

from sklearn import preprocessing
input_features = preprocessing.StandardScaler().fit_transform(features)

构建预测网络-基础版

#先把数据转化成tensor格式

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(4505.6704, dtype=torch.float64, grad_fn=)
loss: tensor(151.8154, dtype=torch.float64, grad_fn=)
loss: tensor(146.2549, dtype=torch.float64, grad_fn=)
loss: tensor(144.3417, dtype=torch.float64, grad_fn=)
loss: tensor(143.3004, dtype=torch.float64, grad_fn=)
loss: tensor(142.5979, dtype=torch.float64, grad_fn=)
loss: tensor(142.0784, dtype=torch.float64, grad_fn=)
loss: tensor(141.6847, dtype=torch.float64, grad_fn=)
loss: tensor(141.3721, dtype=torch.float64, grad_fn=)
loss: tensor(141.1166, dtype=torch.float64, grad_fn=)

简单版

利用pytorch下nn模块


#参数设置
input_size = input_features.shape[1]
hidden_size = 128
output_size = 1
batch_size = 16
#整体模型架构
my_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()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jOVXnfey-1592901532884)(evernotecid://DD492144-9AFF-43C1-9BC0-5A625709FC62/appyinxiangcom/28357599/ENResource/p92)]

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Andy_shenzl/article/details/106926810

智能推荐

mysql_query失败_php中mysqli_query失败_weixin_39818631的博客-程序员宅基地

PHP mysqli_query() 函数定义和用法(推荐学习:PHP视频教程)mysqli_query() 函数执行某个针对数据库的查询。语法mysqli_query(connection,query,resultmode);参数说明:connection:必填。规定要使用的 MySQL 连接。query:必填,规定查询字符串。resultmode:可选。一个常量。可以是下列值中的任意一个:MY...

python aes加密每次密码不一样_使用AES加密和连续解密后数据不同_weixin_39830205的博客-程序员宅基地

我想用AES加密和解密整数,但无法实现。为了测试基本的加密过程,我写了一个简单的方法,它接受输入数据,用相同的参数加密和解密它并返回结果。这是我失败的JUnit测试用例,它检查输入和输出数据是否相等。@Testpublicvoidtest4()throwsUnsupportedEncodingException{Randomrandom=newRandom();SecretKey...

Fabric.js 使用图片遮盖画布(前景图)_德育处主任Pro的博客-程序员宅基地

本文简介点赞 + 关注 + 收藏 = 学会了在 《Fabric.js 使用纯色遮挡画布》 中讲到使用纯色的方式遮盖画布。如果你的常见需要使用图片来遮盖的话,fabric.js 也提供了相应的属性来配置。相比起使用纯色遮盖画布,使用图片会更复杂。因为图片本身是有尺寸大小的,所以可能会遇到缩放画布、平移画布等操作。而纯色的话就不需要管色块的尺寸,移动到哪,怎么缩放都是全屏(整个画布)纯色。使用图片覆盖画布如果需要用图片遮盖画布,可以设置 canvas 的 overlayImage 属性

vue获取接口id_05vue2.0-vue中_接口的调用_weixin_39675215的博客-程序员宅基地

promise主要解决异步深层嵌套的问题promise 提供了简洁的API 使得异步操作更加容易/*1. Promise基本使用我们使用new来构建一个Promise Promise的构造函数接收一个参数,是函数,并且传入两个参数: resolve,reject, 分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数*/var p = new Promise(...

python脚本下载_日记python脚本_weixin_39762464的博客-程序员宅基地

日记python脚本是一款日记辅助脚本,主要是为用户快速读取日期,并创建当日对应的年文件夹、月文件夹,节省了用户自己手动去创建的麻烦。该脚本工具在使用前需要进行一些调整,诸如创建文件夹的位置等都需要用户重新设定,具体方法可查看下面的使用方法,有需要的用户快乐下载试试吧!使用方法这是一个 python 脚本,将 Diary.pyw 下载下来,下载安装 python 后,双击脚本就可以运行。下载 Di...

Abp项目(.net) 部署到服务端IIS 无法正常打开页面运行问题_iis部署web项目页面出不来_小丫头呀的博客-程序员宅基地

IIS -> 应用程序池 -> 具体应用 -> 右键选择高级设置 -> 找到进程模型 -> 标识 -> 选择自定义账户 -> 输入administrator 账号密码 ,重启应用程序解决。注意:部署到iis,是要安装.net 运行时的。服务端IIS对调用exe程序有权限限制,没有正常启动插件,需要给调用插件的应用程序池赋予足够权限。5.1 在iis中找到建立的网站,打开应用程序池 ,把CLR 改成无托管代码,防止被回收。5.6 重启应用程序,选上最上一级,点击重启。

随便推点

ebay java_Console Add Item –Java使用eBay API SDK刊登商品 详解_weixin_39747341的博客-程序员宅基地

准备工作:1. 运行Eclipse (或其他Java IDE)2.创建一个ConsoleAddItem工程(项目)选JDK 1.5、1.6、1.8等版本,已测试1.6、1.8版本。3、下载JAVA版本的eBay Trading SDK地址:https://go.developer.ebay.com/javasdk4、创建一个eBay用户令牌(eBay user token) 备用。5、将下列库添加...

用MyEclipse新建web project时点击无反应问题_yingruiyuelin_新浪博客_yingruiyuelin86的博客-程序员宅基地

我用的是MyEclipse10.7.1破解版,我分别在公司电脑和家里安装了此软件,但是在公司安装后就出现了用MyEclipse新建webproject时点击无反应问题,而家里安装的点击就出现了。 经分析: 1.如果是软件问题,那么家里所安装的也不可能打开,所以软件没有问题,问题出在别处,哪里呢?但是不论是家里的还是公司的都能新建javapr...

c语言 中文版下载32位,C-Free5.0免费版_weixin_39629631的博客-程序员宅基地

C-Free是一款专业的C语言编译器,软件成了C/C++代码解析器,拥有实时解析代码的功能,有从事C语言开发的用户不要错过,小编为大家带来的是中文专业版本,更适合开发用户使用。C-Free提供了对目前业界主流C/C++编译器的支持,你可以在C-Free中轻松切换编译器。可定制的快捷键、外部工具以及外部帮助文档,使你在编写代码时得心应手。完善的工程/工程组管理使你能够方便的管理自己的代码。C-Fre...

python模拟真人访问_Python打造真人实时直播弹幕,房管你能奈我如何_weixin_39629989的博客-程序员宅基地

全文简介本篇文章的目的还是需要解释一下,就是当我在用Python刷别人直播间的弹幕的时候,会遇到这样的问题,那就是我自己准备的弹幕库不能跟上主播的节奏。就是我自己一个人发弹幕,这样很容易被房管发现,为了降低被房管发现的几率,降低被封的风险,所以就想着通过复制真人发的弹幕信息,然后我自己再发一次。看起来有点多余啊......不过大家可以把要发的弹幕改成自己想要发送的弹幕信息。发送弹幕既然已经获得了直...

oracle 添加归档日志文件_oracle 归档日志文件路径设置_weixin_39630140的博客-程序员宅基地

检查归档情况SQL&gt;archive log list;Database log mode Archive ModeAutomatic archival EnabledArchive destination ###########Oldest online log sequence 1Next log sequenc...

奇异矩阵的判定_奇异矩阵判断_Σίσυφος1900的博客-程序员宅基地

一个非0 的方阵A,存在一个矩阵B,使得AB=BA=I,那么我们可以称A为非奇异矩阵