import torch
import torch.nn as nn
import torch.utils.data as Data
import numpy as np
import pymysql
import datetime
import csv
import time EPOCH = 100
BATCH_SIZE = 50 class MyNet(nn.Module):
def __init__(self):
super(MyNet, self).__init__()
self.con1 = nn.Sequential(
nn.Conv1d(in_channels=1, out_channels=64, kernel_size=3, stride=1, padding=1),
nn.MaxPool1d(kernel_size=1),
nn.ReLU(),
)
self.con2 = nn.Sequential(
nn.Conv1d(in_channels=64, out_channels=128, kernel_size=3, stride=1, padding=1),
nn.MaxPool1d(kernel_size=1),
nn.ReLU(),
)
self.fc = nn.Sequential(
# 线性分类器
nn.Linear(128*6*1, 128), # 修改大小后要重新计算
nn.ReLU(),
nn.Linear(128, 6),
# nn.Softmax(dim=1),
)
self.mls = nn.MSELoss()
self.opt = torch.optim.Adam(params=self.parameters(), lr=1e-3)
self.start = datetime.datetime.now() def forward(self, inputs):
out = self.con1(inputs)
out = self.con2(out)
out = out.view(out.size(0), -1) # 展开成一维
out = self.fc(out)
# out = F.log_softmax(out, dim=1)
return out def train(self, x, y):
out = self.forward(x)
loss = self.mls(out, y)
print('loss: ', loss)
self.opt.zero_grad()
loss.backward()
self.opt.step() def test(self, x):
out = self.forward(x)
return out def get_data(self):
with open('aaa.csv', 'r') as f:
results = csv.reader(f)
results = [row for row in results]
results = results[1:1500]
inputs = []
labels = []
for result in results:
# 手动独热编码
one_hot = [0 for i in range(6)]
index = int(result[6])-1
one_hot[index] = 1
# labels.append(label)
# one_hot = []
# label = result[6]
# for i in range(6):
# if str(i) == label:
# one_hot.append(1)
# else:
# one_hot.append(0)
labels.append(one_hot)
input = result[:6]
input = [float(x) for x in input]
# label = [float(y) for y in label]
inputs.append(input)
# print(labels) # [[0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 1],
time.sleep(10)
inputs = np.array(inputs)
labels = np.array(labels)
inputs = torch.from_numpy(inputs).float()
inputs = torch.unsqueeze(inputs, 1) labels = torch.from_numpy(labels).float()
return inputs, labels def get_test_data(self):
with open('aaa.csv', 'r') as f:
results = csv.reader(f)
results = [row for row in results]
results = results[1500: 1817]
inputs = []
labels = []
for result in results:
label = [result[6]]
input = result[:6]
input = [float(x) for x in input]
label = [float(y) for y in label]
inputs.append(input)
labels.append(label)
inputs = np.array(inputs)
# labels = np.array(labels)
inputs = torch.from_numpy(inputs).float()
inputs = torch.unsqueeze(inputs, 1)
labels = np.array(labels)
labels = torch.from_numpy(labels).float()
return inputs, labels if __name__ == '__main__':
# 训练数据
# net = MyNet()
# x_data, y_data = net.get_data()
# torch_dataset = Data.TensorDataset(x_data, y_data)
# loader = Data.DataLoader(
# dataset=torch_dataset,
# batch_size=BATCH_SIZE,
# shuffle=True,
# num_workers=2,
# )
# for epoch in range(EPOCH):
# for step, (batch_x, batch_y) in enumerate(loader):
# print(step)
# # print('batch_x={}; batch_y={}'.format(batch_x, batch_y))
# net.train(batch_x, batch_y)
# # 保存模型
# torch.save(net, 'net.pkl') # 测试数据
net = MyNet()
net.get_test_data()
# 加载模型
net = torch.load('net.pkl')
x_data, y_data = net.get_test_data()
torch_dataset = Data.TensorDataset(x_data, y_data)
loader = Data.DataLoader(
dataset=torch_dataset,
batch_size=100,
shuffle=False,
num_workers=1,
)
num_success = 0
num_sum = 317
for step, (batch_x, batch_y) in enumerate(loader):
# print(step)
output = net.test(batch_x)
# output = output.detach().numpy()
y = batch_y.detach().numpy()
for index, i in enumerate(output):
i = i.detach().numpy()
i = i.tolist()
j = i.index(max(i))
print('输出为{}标签为{}'.format(j+1, y[index][0]))
loss = j+1-y[index][0]
if loss == 0.0:
num_success += 1
print('正确率为{}'.format(num_success/num_sum))

天气预测(CNN)的更多相关文章

  1. 【SVM】kaggle之澳大利亚天气预测

    项目目标 由于大气运动极为复杂,影响天气的因素较多,而人们认识大气本身运动的能力极为有限,因此天气预报水平较低,预报员在预报实践中,每次预报的过程都极为复杂,需要综合分析,并预报各气象要素,比如温度. ...

  2. 模式识别之bayes---bayes 简单天气预测实现实例

    Bayes Classifier 分类 在模式识别的实际应用中,贝叶斯方法绝非就是post正比于prior*likelihood这个公式这么简单,一般而言我们都会用正态分布拟合likelihood来实 ...

  3. 卷积神经网络CNN全面解析

    卷积神经网络(CNN)概述 从多层感知器(MLP)说起 感知器 多层感知器 输入层-隐层 隐层-输出层 Back Propagation 存在的问题 从MLP到CNN CNN的前世今生 CNN的预测过 ...

  4. Domoticz 中添加彩云天气

    前言 用过一段时间的彩云天气 APP,最吸引我的地方是精确到局部区域的天气预测,虽然准确度并不算高,但是对于预测下雨还是不错的选择.在 Domoticz 中添加彩云天气的数据,利用的是彩云天气提供的 ...

  5. python 基础例子 双色球 查询天气 查询电话

    # 随机生成双色球import random# 随机数 1-16之间# r = random.randint(1,16)# print(r)phone_numbers_str = "匪警[1 ...

  6. 【转载】Deep Learning(深度学习)学习笔记整理

    http://blog.csdn.net/zouxy09/article/details/8775360 一.概述 Artificial Intelligence,也就是人工智能,就像长生不老和星际漫 ...

  7. Deep Learning速成教程

          引言         深度学习,即Deep Learning,是一种学习算法(Learning algorithm),亦是人工智能领域的一个重要分支.从快速发展到实际应用,短短几年时间里, ...

  8. Deep Learning(深度学习)学习系列

    目录: 一.概述 二.背景 三.人脑视觉机理 四.关于特征        4.1.特征表示的粒度        4.2.初级(浅层)特征表示        4.3.结构性特征表示        4.4 ...

  9. 深度学习概述教程--Deep Learning Overview

          引言         深度学习,即Deep Learning,是一种学习算法(Learning algorithm),亦是人工智能领域的一个重要分支.从快速发展到实际应用,短短几年时间里, ...

随机推荐

  1. Activity的启动流程

    前言:新启动一个activity分为两种情况,第一种是在Launcher的桌面点击icon图标启动一个新的应用,第二种是在应用启动的情况下从OneActivity->TwoActivity 其实 ...

  2. 小米6X手机解锁(bl锁)

    1. http://www.miui.com/unlock/index.html,申请解锁2. 手机:“设置 -> 更多设置 -> 开发者选项 -> 设备解锁状态”中绑定账号和设备. ...

  3. asp.net core webapi/website+Azure DevOps+GitHub+Docker

    asp.net core webapi/website+Azure DevOps+GitHub+Docker 新春开篇作,主要写一下关于asp.net core web/api 2.2 项目借助dev ...

  4. Angualr学习笔记

    0.安装即环境初始化 下载node至windows,点击安装,所有环境变量直接OK: linux下载tar后,解压,在/etc/profile的path路径下增加node执行路径: export PA ...

  5. centos下Django+uwsgi+nginx

    本篇章主要讲解uwsgi和nginx的作用,并利用两者对django项目进行部署 一.概述 在开发过程中,我们一般是在该项目的虚拟环境中启用django自带的web服务:python manage.p ...

  6. iOS 常用三方(持续更新)

    iOS 常用三方 1.ZWMSegmentController 分页控制器 https://github.com/weiming4219/ZWMSegmentController

  7. 安卓(Android)开发基础知识

    .aar文件 .aar是一种压缩文件,和.jar类似,不过它可以包含资源文件,例如图片.drawable.xml资源 .jar文件 在软件领域,JAR文件(Java归档,英语:Java ARchive ...

  8. Json对象遍历

    var json = {"id":"123","name":"tom","sex":"ma ...

  9. spring boot 扫描不到自定义Controller

    使用springboot启动类配置扫描的两种注解配置方式: 1.@Controller   @EnableAutoConfiguration   @ComponentScan 2.@SpringBoo ...

  10. 认识多线程中start和run方法的区别?

    一.认识多线程中的 start() 和 run() 1.start(): 先来看看Java API中对于该方法的介绍: 使该线程开始执行:Java 虚拟机调用该线程的 run 方法. 结果是两个线程并 ...