首页 飞桨领航团 帖子详情
【AI达人养成营】学习笔记
收藏
快速回复
飞桨领航团 其他学习资料 910 0
【AI达人养成营】学习笔记
收藏
快速回复
飞桨领航团 其他学习资料 910 0

通过代码学习知识,而不是通过公式来学习知识,比较容易入门,且比较直观。在学习代码之前,我们仍需要掌握一些关于深度学习的基本概念。

人工智能、机器学习、深度学习的关系
人工智能研究的是如何使人的智能得以模拟、延伸和扩展的技术;

机器学习是实现人工智能的一种有效的方式;

深度学习是一种实现机器学习的技术;


机器学习的实现
机器学习的实现可以分为两步:训练和预测。
1、训练:从一定数量的样本中,学习输入与输出的关系。
2、预测:基于训练得到的输入与输出关系,对新的输入推测出新的输出。

机器学习的方法论
最主要的就是模型的确立,流程有:假设、评价、优化。

假设
根据数据,提出合理的模型参数,使得其符合数据的规律,个人认为这一步是最重要的,且需要一定的数学素养。

评价
需要定义评价指标来判断模型训练的好坏,通常采用模型预测值和真实值差距的评价函数(也被成为损失函数)。

优化
根据评价来调整模型的参数(利用评价函数与参数的关系求导使得评价函数最小,类似于最优化问题)。

在我看来,机器学习的本质其实是“参数估计”。

深度学习
深度学习和机器学习两者在理论结构上是一致的,即:模型假设、评价函数和优化算法,其根本差别在于假设的复杂度(例如图像识别)。

神经网络的基本概念
人工神经网络包括多个神经网络层,如卷积层、全连接层、LSTM等,每一层又包括很多神经元,超过三层的非线性神经网络都可以被称为深度神经网络。

·神经元:神经网络中每个节点都称为神经元,由两部分组成:
  ·加权和:将所有输入加权求和。
  ·非线性变换(激活函数):加权和的结果经过一个非线性函数变换,让神经元计算具备非线性的能力。

·多层连接:大量这样的节点按照不同的层次排布,形成多层的结构连接起来,即称为神经网络。

·前向计算:从输入计算输出的过程,顺序从网络前至后。

·计算突:以图形化的范式展示神经网络的计算逻辑。可以将计算图以公式的方式表达:

Y = f 3 ( f 2 ( f 1 ( w 1 ⋅ x 1 + w 2 ⋅ x 2 + w 3 ⋅ x 3 + b ) + . . . ) + . . . ) Y=f_3(f_2(f_1(w_1·x_1+w_2·x_2+w_3·x_3+b)+...)+...)
import numpy as np #numpy是一个数据处理的库
import json
# 读入训练数据
datafile = ' E:\\假期学习\\深度学习\\20200811\\housing.data'
data = np.fromfile(datafile, sep=' ') #以空格为界线读取数据

结果是一个长度为7084的数组,不能直接使用仍需要处理。

数据形状变换
原始数据中,每行数据14个,其中13个为影响房价的特征,最后一个为房价的均值。因此我们同样需要将数据转换成类似的矩阵。

feature_names = [ 'CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE',
\'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV' ]
feature_num = len(feature_names)
#reshape函数可以将矩阵转化为特定类型的矩阵
#//表示整数除法,向下取整
data = data.reshape([data.shape[0] // feature_num, feature_num])
#x表示数据的第一行
x = data[0]
#查看x的矩阵行列数,由于是一维的,所以显示的是个数
print(x.shape)
print(x)

数据集划分
将数据集划分为训练集和测试集,其中训练集用于确认模型的参数,训练集用于评估模型的效果。我们期望模型学习的是任务本身的本质规律,而不是训练数据本身,模型训练未使用的数据,才能更真实地评估模型的效果。

#将数据的80%作为训练集,20%作为测试集
ratio = 0.8
offset = int(data.shape[0] * ratio)
training_data = data[:offset]
training_data.shape

数据归一化处理
对每个特征进行归一化处理,使得其在一定的范围内缩放。这样做,一是可以使得训练模型更加高效,优化的参数更加统一适用,二是特征前的权重大小可以代表该变量对预测结果的贡献度(因为每个特征值本身的范围相同)。

#axis=0表示以列为遍历目标(即比较对象),axis=1是以行为遍历目标
maximums, minimums, avgs = \
training_data.max(axis=0), \
training_data.min(axis=0), \
training_data.sum(axis=0) / training_data.shape[0]
# 对数据进行归一化处理
for i in range(feature_num):
#每个数据都在(-1,1)之间
data[:, i] = (data[:, i] - avgs[i]) / (maximums[i] - minimums[i])

封装成load_data数据

def load_data():
# 从文件导入数据
datafile = "E:\\假期学习\\深度学习\\20200811\\housing.data"
data = np.fromfile(datafile, sep=' ')

# 每条数据包括14项,其中前面13项是影响因素,第14项是相应的房屋价格中位数
feature_names = [ 'CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', \
'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV' ]
feature_num = len(feature_names)

# 将原始数据进行Reshape,变成[N, 14]这样的形状
data = data.reshape([data.shape[0] // feature_num, feature_num])

# 将原数据集拆分成训练集和测试集
# 这里使用80%的数据做训练,20%的数据做测试
# 测试集和训练集必须是没有交集的
ratio = 0.8
offset = int(data.shape[0] * ratio)
training_data = data[:offset]

# 计算训练集的最大值,最小值,平均值
maximums, minimums, avgs = training_data.max(axis=0), training_data.min(axis=0), \
training_data.sum(axis=0) / training_data.shape[0]

# 对数据进行归一化处理
for i in range(feature_num):
#print(maximums[i], minimums[i], avgs[i])
data[:, i] = (data[:, i] - avgs[i]) / (maximums[i] - minimum

0
收藏
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户