深度学习 --- stanford cs231学习笔记五(训练神经网络的几个重要组成部分之二,数据的预处理)

本文主要是介绍深度学习 --- stanford cs231学习笔记五(训练神经网络的几个重要组成部分之二,数据的预处理),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

训练神经网络的几个重要组成部分 二

2 Data Preprocessing数据的预处理

数据预处理的几种方法


2,1 数据的零点中心化

        数据的零点中心化的目的就是为了把数据的整体分布拉回到原点附近,也就是让数据的整体均值变为0。


 2,2 数据的标准化

        数据的标准化这个词比较难理解,从统计学的角度讲,经过这一步的处理,原始数据的标准差会变为1。换句话说,我的个人理解是如果原始数据分散的比较开,也就是高斯曲线的sigma比较大,则经过这一步处理后,分散的比较开的数据会被拉拢回来。比如说下图黄色曲线的数据分布。

        如果,原始数据本来分布的就过于集中,经过这一步处理后,数据反而会变的相对松散。例如下图蓝色曲线的数据分布。

        数据的零点中心化和标准化是神经网络的数据预处理中最为常见的两个方法。可以用公式总结为:

y=\frac{x-mean}{sigma}

其中,mean表示均值,sigma表示标准差。下面我通过两个例子看看这一过程究竟发生了什么。


2,3 以一维数据为例:

        下图是我在jupyter notebook中所画的5个狗狗身高的一维数据集。x表示的是样本数,y表示的是该样本的高度。

import numpy as np
import matplotlib.pyplot as pltdata = [600,470,170,430,300]
num=len(data)
x=np.arange(num)
plt.figure()
plt.stem(x,data,label='dog(mm)')
plt.legend()

分别求出这组数据的mean和sigma并在图中表示出来

print('data=',data)
mean_data=np.mean(data)
print('mean=',mean_data)
sigma_data=np.std(data)
print('sigma=',sigma_data)

plt.figure
plt.stem(x,data,label='dog(mm)')
plt.plot(x,[mean_data]*num,'r-',label='mean')
plt.plot(x,[mean_data+sigma_data]*num,'b--',label='mean+sigma')
plt.plot(x,[mean_data-sigma_data]*num,'b--',label='mean-sigma')
plt.legend(loc='upper right')

​原始数据的直方图 

plt.hist(data)
plt.title('Histogram of dog(mm)')

减去均值后的数据与直方图: 

        与原始数据相比减去均值后的数据均值为0,也就是说,原来以394mm为中心分布的数据变成了以0为中心分布的数据。

plt.hist(data1)
plt.title('Histogram of dog-mean (mm)')

​减去均值后再除以标准差后的数据及其分布:

        除以标准差之后的数据,整个数据的标准差会变为1。这一变化在图像上会表现为数据的分布从原始状态中比较分散的情况,变成了比较集中的分布。        

data2=data1/sigma_data
mean_data2=np.mean(data2)
sigma_data2=np.std(data2)
print('(dog-mean)/std=',data2)
print('mean=',mean_data2)
print('sigma=',sigma_data2)
plt.figure
plt.stem(x,data2,label='dog(mm)')
plt.plot(x,[mean_data2]*num,'r-',label='mean')
plt.plot(x,[mean_data2+sigma_data2]*num,'b--',label='mean+sigma')
plt.plot(x,[mean_data2-sigma_data2]*num,'b--',label='mean-sigma')
plt.legend(loc='upper right')

plt.hist(data2)
plt.title('Histogram of (dog-mean)/std (mm)')


2,4 以二维鸢尾花数据集数据为例:

原始数据:

from sklearn.datasets import load_iris# 加载 Iris 数据集
iris = load_iris()
X = iris.data[:, :2]  # 只取前两个特征作为示例
print('X.size=',X.shape)
y = iris.target# 绘制散点图
fig,ax=plt.subplots(figsize=(8, 6))
scatter = ax.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', s=50, alpha=0.8, edgecolors='k')
plt.title('Scatter Plot of Iris Dataset')
plt.xlabel('x=Sepal Length (cm)')
plt.ylabel('y=Sepal Width (cm)')
plt.colorbar(scatter, label='Species', ticks=[0, 1, 2], format=lambda i, _: iris.target_names[int(i)])# 绘制 x 轴和 y 轴
ax.axhline(0, color='black', linewidth=3)  # 绘制水平的 x 轴
ax.axvline(0, color='black', linewidth=3)  # 绘制垂直的 y 轴plt.show()

        在二维坐标系中,x轴和y轴分别表示鸢尾花花瓣的长度和宽度,各150个数据。 注意,此时的数据分布是偏离原点的。

plt.hist(X)
plt.title('Histogram of x,y(cm)')

分别计算两个维度的mean和std:

col_avg=np.mean(X,axis=0)
print('col_avg.size=',col_avg.shape)
print('x_avg=',col_avg[0],'(cm)')
print('y_avg=',col_avg[1],'(cm)')col_sigma=np.std(X,axis=0)
print('col_sigma.size=',col_sigma.shape)
print('x_sigma=',col_sigma[0],'(cm)')
print('y_sigma=',col_sigma[1],'(cm)')

x,y两个维度的数据各自减去其均值:

        先按列求各个维度的均值,然后让各自维度的数据减去各自维度的均值。 

#reshape con_avg
col_avg2d=np.tile(col_avg,(X.shape[0],1))
print('col_avg2d.size=',col_avg2d.shape)
X-=col_avg2d
print('X.size=',X.shape)
# 绘制散点图
fig,ax=plt.subplots(figsize=(8, 6))
scatter = ax.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', s=50, alpha=0.8, edgecolors='k')
plt.title('Scatter Plot of Iris Dataset')
plt.xlabel('x=Sepal Length (cm)')
plt.ylabel('y=Sepal Width (cm)')
plt.colorbar(scatter, label='Species', ticks=[0, 1, 2], format=lambda i, _: iris.target_names[int(i)])# 绘制 x 轴和 y 轴
ax.axhline(0, color='black', linewidth=3)  # 绘制水平的 x 轴
ax.axvline(0, color='black', linewidth=3)  # 绘制垂直的 y 轴plt.show()

         减去均值后的数据分布是以原点为中心的。

plt.hist(X)
plt.title('Histogram of x,y(cm)')

在直方图中也可以看到新的数据集是以0为中心的。 

两个维度分别除以各自维度的标准差:

#reshape con_sigma
col_sigma2d=np.tile(col_sigma,(X.shape[0],1))
print('col_sigma2d.size=',col_sigma2d.shape)
X/=col_sigma2d
print('X.size=',X.shape)
# 绘制散点图
fig,ax=plt.subplots(figsize=(8, 6))
scatter = ax.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', s=50, alpha=0.8, edgecolors='k')
plt.title('Scatter Plot of Iris Dataset')
plt.xlabel('x=Sepal Length (cm)')
plt.ylabel('y=Sepal Width (cm)')
plt.colorbar(scatter, label='Species', ticks=[0, 1, 2], format=lambda i, _: iris.target_names[int(i)])# 绘制 x 轴和 y 轴
ax.axhline(0, color='black', linewidth=3)  # 绘制水平的 x 轴
ax.axvline(0, color='black', linewidth=3)  # 绘制垂直的 y 轴plt.show()

        如果原始数据分布的较为集中(即,标准差<1),除以标准差之后数据的分布会变得相对松散。如果原始数据分布的较为分散(即,标准差>1),除以标准差之后数据的分布会变得相对集中。

col_avg=np.mean(X,axis=0)
print('col_avg.size=',col_avg.shape)
print('x_avg=',col_avg[0],'(cm)')
print('y_avg=',col_avg[1],'(cm)')col_sigma=np.std(X,axis=0)
print('col_sigma.size=',col_sigma.shape)
print('x_sigma=',col_sigma[0],'(cm)')
print('y_sigma=',col_sigma[1],'(cm)')

经过预处理后的数据,均值为0,标准差为1. 

plt.hist(X)
plt.title('Histogram of x,y(cm)')


 2,5 在实际应用中数据预处理的常用方法


(全文完) 

--- 作者,松下J27

 参考文献(鸣谢): 

1,Stanford University CS231n: Deep Learning for Computer Vision

2,训练神经网络(第一部分)_哔哩哔哩_bilibili

3,10 Training Neural Networks I_哔哩哔哩_bilibili

4,Schedule | EECS 498-007 / 598-005: Deep Learning for Computer Vision 

5,标准差和方差

版权声明:所有的笔记,可能来自很多不同的网站和说明,在此没法一一列出,如有侵权,请告知,立即删除。欢迎大家转载,但是,如果有人引用或者COPY我的文章,必须在你的文章中注明你所使用的图片或者文字来自于我的文章,否则,侵权必究。 ----松下J27

这篇关于深度学习 --- stanford cs231学习笔记五(训练神经网络的几个重要组成部分之二,数据的预处理)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080418

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消