当前位置:   article > 正文

基于Tensorflow的神经网络模型搭建——气温预测_tensorflow搭建神经网络进行气温预测

tensorflow搭建神经网络进行气温预测

基于Tensorflow的神经网络模型搭建

环境:

Anaconda3

​ python 3.8.10

​ TensorFlow 2.3.0

​ numpy 1.22.4

​ Pycharm 2022.1

回归问题预测

  • Tensorflow2.x 版本中将使用大量的Keras的简介建模方法

导包

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import datetime
import pandas as pd
from sklearn import preprocessing
from tensorflow.keras import layers
import tensorflow.keras
import warnings
warnings.filterwarnings('ignore')
------------------------------------------------------
# 忽略
import os

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

至于为什么加入忽略,这里不多赘述,想要研究到底为什么的小伙伴可以自行步入下面的链接

从源码求证tensorflow中os.environ"TF_CPP_MIN_LOG_LEVEL"]的值的含义

读取文件

文件如下,需要请自行下载:
链接:https://pan.baidu.com/s/1o0IyPFJNrurLRCUbji6_EA?pwd=knsw 提取码:knsw

tips:csv颜色插件如图,需要请自行搜索并应用

在这里插入图片描述

 features = pd.read_csv('temps.csv')
 features.head()
 print('数据维度:', features.shape)
  • 1
  • 2
  • 3

在这里插入图片描述

"""
表中数据说明:
    year,month,day,week分别代表具体时间
    temp_2:前天的最高温度
    temp_1:昨天的最高温度
    average:历史中,每一年平均最高温度值
    actual:标签值,当天真实最高温度
    friend:你哥们预测的
"""
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

日期格式处理

为方便时间数据的处理和展示等操作,这里使用 datetime 对其进行格式更改

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]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

特征可视化展示

tips:

拿到自己的数据之后需要做的事:

​ 1、数据处理

​ 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')
ax2.set_title('Max Temp')
# 昨天
ax2.plot(dates, features['temp_1'])
ax2.set_xlabel('')
ax2.set_ylabel('Temperature')
ax2.set_title('Previous Max Temp')
# 前天
ax3.plot(dates, features['temp_2'])
ax3.set_xlabel('')
ax3.set_ylabel('Temperature')
ax3.set_title('Two Days Prior Max Temp')
# friend
ax4.plot(dates, features['friend'])
ax4.set_xlabel('')
ax4.set_ylabel('Temperature')
ax4.set_title('Friend Estimate')

plt.tight_layout(pad=2)
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

在这里插入图片描述

数据预处理

由于数据中 week 这一列的数据是字符串形式,需要对其进行预处理

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

# 标签
labels = np.array(features['actual'])
# 在特征中去掉标签
features = features.drop('actual', axis=1)
# 名字单独保存
features_list = list(features.columns)
# 转换成合适格式
features = np.array(features)

input_features = preprocessing.StandardScaler().fit_transform(features)
print(input_features[0])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

对于 input_features = preprocessing.StandardScaler().fit_transform(features) 这句话,需要包为 sklearn

在这里插入图片描述

基于Kras构建网络模型

构造网络模型

一些常用参数如下:
activation:激活函数选择,一般常用relu
kernel_initializer, bias_initializer:权重与偏置参数的初始化方法,有时候不收敛,换种初始化就好了
kernel_regularizer, bias_regularizer:要不要加入正则化
inputs:输入,自己指定 或 让网络模型自己选择
units:神经元个数

这里自己选择神经元个数,也可以根据输入特征来画图进行推导,hidden层自己选择适当添加

在这里插入图片描述

由于使用的是 Tensorflow2.x 所以只需要其中使用的每个Hidden有多少个神经元,输出有几个结果即可

# 按顺序构造神经元
model = tf.keras.Sequential()
model.add(layers.Dense(16))
model.add(layers.Dense(32))
model.add(layers.Dense(1))
  • 1
  • 2
  • 3
  • 4
  • 5

其中,layers里有很多层的实现,如卷积层等等…,这里用的是全连接层

直达

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/123645
推荐阅读
相关标签