深度学习与图神经网络核心技术实践应用高级研修班-Day1数据理解和处理
Posted ZSYL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习与图神经网络核心技术实践应用高级研修班-Day1数据理解和处理相关的知识,希望对你有一定的参考价值。
数据理解和处理
0. 数据理解和处理
- 结构化数据
- 图像数据
- 时序信号
1. 结构化数据
结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。
使用python读取结构化数据,以mysql为例:
# 连接mysql数据库
import pymysql
mydb=pymysql.connect(host="localhost",user="root", passwd=<your password>,database=<yourdatabase>)
sqlcmd=<sql statement> # sql语句
使用pandas读取数据库中的数据:
import pandas as pd
a=pd.read_sql(sqlcmd,mydb) # 对相应数据库使用查询语句,并使用pandas读取
# 输出前5行数据
print(a.head())
2. 图像数据
常见的数据集可以使用框架的datasets包进行读取
from tensorflow.keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data('./mnist.npz')
之后就可以对读取的数据进行操作
# 设置数据输入形状
train_images = train_images.reshape(-1, *INPUT_SHAPE)
test_images = test_images.reshape(-1, *INPUT_SHAPE)
# 标签转为one hot编码
train_labels = keras.utils.to_categorical(train_labels, NUM_CLASSES)
test_labels = keras.utils.to_categorical(test_labels, NUM_CLASSES)
图像数据是指用数值表示的各像素的灰度值的集合。把图像信息分解为很多小区域,这些小区域称为像素,可以用一个数值来表示它的灰度,对于彩色图像常用红、绿、蓝三个分量表示。
顺序存储每一个像素的信息,就可以用一个离散的阵列来代表一幅图像。
实际情况中,将数据做归一化等处理后,很多算法能够发挥最佳效果。
缩放:将值缩小到[0,1]或[-1,1]的区间中。
均值消减:每个样本减去数据的统计平均值。此操作可以移除共同的部分,凸显个体差异。
特征标准化:
- Min-max 标准化:新数据 =(原数据-极小值)/(极大值-极小值)
- Z-score 标准化:新数据=(原数据-均值)/标准差
- 对数Logistic标准化:新数据=1/(1+e^(-原数据))(sigmoid)
白化是一种重要的预处理过程,其目的就是降低输入数据的冗余性,经过白化处理的输入数据具有如下性质:
- (i) 特征之间相关性较低;
- (ii) 所有特征具有相同的方差。
在图像的深度学习中,为了丰富图像训练集,更好的提取图像特征,
泛化模型(防止模型过拟合),一般都会对数据图像进行数据增强,
常用的方式有,旋转图像,剪切图像,改变图像色差,扭曲图像特征,
改变图像尺寸大小,增强图像噪音(一般使用高斯噪音)等。
from PIL import Image
# 对图像进行随机旋转,img为图像
random_angle = np.random.randint(1, 360)
img.rotate(random_angle, Image.BICUBIC) # 使用双立方滤波进行旋转
# 剪切图像,以图像为[68,68]为例,剪切出大于[40,40]的图像
image_width = image.size[0]
image_height = image.size[1]
crop_win_size = np.random.randint(40, 68)
random_region = ((image_width - crop_win_size) >> 1, (image_height -
crop_win_size) >> 1, (image_width + crop_win_size) >> 1,(image_height +
crop_win_size) >> 1)
image.crop(random_region)
random_factor = np.random.randint(0, 31) / 10. # 随机因子
color_image = ImageEnhance.Color(image).enhance(random_factor) # 调整图像的饱
和度
random_factor = np.random.randint(10, 21) / 10. # 随机因子
brightness_image = ImageEnhance.Brightness(color_image).enhance(random_factor)
# 调整图像的亮度
contrast_image = ImageEnhance.Contrast(brightness_image).enhance(random_factor)
# 调整图像对比度
random_factor = np.random.randint(0, 31) / 10. # 随机因子
ImageEnhance.Sharpness(contrast_image).enhance(random_factor) # 调整图像锐度
3. 时序信号
时间序列是一系列数据点,使用时间戳进行排序,是对时间序列数据的分析。
从水果的每日价格到电路提供的电压输出的读数,时间序列的范围非常大,时间序列分析的领域也是如此。
分析时间序列数据通常侧重于预测,但也可以包括分类,聚类,异常检测等。
例如,通过研究过去的价格变化模式,可以尝试预测曾经想要购买的一款产品的价格,判断它的最佳购买时间!
一系列离散的数据点可以用表格格式存储,其中列表示不同的特征,而行表示不同的数据样本。
对于该格式组织的数据,可以类似地使用列表的相关操作,如下图对表格数据进行数据集划分。
可以使用matplotlib库进行可视化
以上是关于深度学习与图神经网络核心技术实践应用高级研修班-Day1数据理解和处理的主要内容,如果未能解决你的问题,请参考以下文章
深度学习与图神经网络核心技术实践应用高级研修班-Day3迁移学习(Transfer Learning)
深度学习与图神经网络核心技术实践应用高级研修班-Day1典型深度神经网络模型
深度学习与图神经网络核心技术实践应用高级研修班-Day1Tensorflow和Pytorch
深度学习与图神经网络核心技术实践应用高级研修班-Day2基于Keras的深度学习程序开发